CVE-2023-39946

8.2 HIGH

📋 TL;DR

CVE-2023-39946 is a heap overflow vulnerability in eprosima Fast DDS that allows remote attackers to crash any Fast-DDS process by sending a specially crafted CDR string to the discovery multicast port. This affects all systems running vulnerable versions of Fast DDS with discovery enabled. The vulnerability can be exploited without authentication.

💻 Affected Systems

Products:
  • eprosima Fast DDS
Versions: All versions before 2.11.1, 2.10.2, 2.9.2, and 2.6.6
Operating Systems: All platforms running Fast DDS
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects systems with discovery enabled (default configuration). Systems using static discovery or without discovery are not vulnerable.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, though this requires additional exploitation beyond the demonstrated crash.

🟠

Likely Case

Remote denial of service causing Fast-DDS processes to crash, disrupting data distribution services.

🟢

If Mitigated

No impact if patched versions are used or if discovery multicast port is properly firewalled.

🌐 Internet-Facing: HIGH - Exploitable via unauthenticated network traffic to discovery multicast port (typically UDP 7400-7410).
🏢 Internal Only: HIGH - Internal attackers can exploit this via the same multicast discovery mechanism.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

The advisory provides technical details that make exploitation straightforward. No authentication required to send discovery packets.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.11.1, 2.10.2, 2.9.2, or 2.6.6

Vendor Advisory: https://github.com/eProsima/Fast-DDS/security/advisories/GHSA-j297-rg6j-m7hx

Restart Required: Yes

Instructions:

1. Identify current Fast DDS version. 2. Upgrade to patched version (2.11.1, 2.10.2, 2.9.2, or 2.6.6). 3. Recompile applications using Fast DDS. 4. Restart all Fast DDS processes.

🔧 Temporary Workarounds

Block Discovery Multicast Ports

linux

Block UDP traffic to discovery multicast ports (typically 7400-7410) at network perimeter or host firewall.

sudo iptables -A INPUT -p udp --dport 7400:7410 -j DROP
sudo iptables -A OUTPUT -p udp --dport 7400:7410 -j DROP

Disable Discovery

all

Configure Fast DDS to use static discovery instead of dynamic discovery.

Set DomainParticipantQos to use static discovery in XML configuration

🧯 If You Can't Patch

  • Implement network segmentation to isolate Fast DDS systems from untrusted networks.
  • Deploy intrusion detection systems to monitor for exploitation attempts on discovery ports.

🔍 How to Verify

Check if Vulnerable:

Check Fast DDS version and compare against vulnerable versions. If using discovery and version < 2.11.1, 2.10.2, 2.9.2, or 2.6.6, system is vulnerable.

Check Version:

Check application documentation or build configuration for Fast DDS version. For compiled applications, use strings command: strings binary_name | grep Fast

Verify Fix Applied:

Verify Fast DDS version is 2.11.1, 2.10.2, 2.9.2, or 2.6.6 or higher. Test discovery functionality works without crashes.

📡 Detection & Monitoring

Log Indicators:

  • Segmentation fault or crash logs from Fast DDS processes
  • Unexpected termination of Fast DDS services

Network Indicators:

  • Unusual UDP traffic to port 7400-7410 with large payloads
  • Multiple discovery packets from single source

SIEM Query:

source_port=7400-7410 AND protocol=udp AND payload_size>normal_threshold

🔗 References

📤 Share & Export