CVE-2024-38927

9.8 CRITICAL

📋 TL;DR

This CVE describes a use-after-free vulnerability in ROS2 Nav2's AMCL process that can be triggered remotely by sending a request to change the dynamic parameter '/amcl do_beamskip'. This allows attackers to potentially execute arbitrary code or crash the nav2_amcl process. Systems running ROS2 Humble with Nav2 are affected.

💻 Affected Systems

Products:
  • ROS2 (Robot Operating System 2)
  • Nav2 (Navigation2)
Versions: ROS2 Humble versions with Nav2 before the fix
Operating Systems: Linux (Ubuntu 22.04 recommended for ROS2 Humble)
Default Config Vulnerable: ⚠️ Yes
Notes: Affects systems where nav2_amcl is running and exposed to network. ROS2 DDS/ROS middleware must be accessible.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, privilege escalation, or lateral movement within robotic systems.

🟠

Likely Case

Denial of service through nav2_amcl process crash, disrupting robot navigation and autonomous operations.

🟢

If Mitigated

Limited impact if network segmentation prevents external access to ROS2 nodes and parameter services.

🌐 Internet-Facing: HIGH - The vulnerability can be triggered remotely without authentication via ROS2 parameter service.
🏢 Internal Only: HIGH - Even internally, any system with network access to the ROS2 node can exploit this vulnerability.

🎯 Exploit Status

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

Exploitation requires sending a specific parameter change request via ROS2 services, which is straightforward for anyone with ROS2 client access.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Fixed in navigation2 repository via pull request #4397

Vendor Advisory: https://github.com/ros-navigation/navigation2/issues/4379

Restart Required: Yes

Instructions:

1. Update navigation2 package to latest version. 2. Rebuild ROS2 workspace. 3. Restart nav2_amcl and related nodes. 4. Verify parameter handling is secure.

🔧 Temporary Workarounds

Network Segmentation

linux

Restrict network access to ROS2 nodes using firewall rules to prevent unauthorized parameter changes.

sudo ufw deny from any to any port 11311
sudo ufw deny from any to any port 11511

Disable Dynamic Parameter Reconfiguration

linux

Remove or restrict dynamic parameter reconfiguration capabilities for nav2_amcl if not required.

ros2 param set /amcl use_sim_time true
Modify launch files to disable dynamic parameters

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate ROS2 nodes from untrusted networks.
  • Monitor for parameter change requests to '/amcl do_beamskip' and alert on suspicious activity.

🔍 How to Verify

Check if Vulnerable:

Check if nav2_amcl is running and accessible via 'ros2 node list' and test parameter service accessibility.

Check Version:

ros2 pkg list | grep navigation2 && cd ~/ros2_ws && git -C src/navigation2 log --oneline -1

Verify Fix Applied:

Attempt to reproduce the parameter change request that triggers the use-after-free; system should handle it gracefully without crashing.

📡 Detection & Monitoring

Log Indicators:

  • nav2_amcl process crashes or segmentation faults
  • Unexpected parameter change requests to '/amcl do_beamskip'

Network Indicators:

  • ROS2 DDS traffic containing parameter change requests to vulnerable nodes
  • Unusual source IPs accessing ROS2 services

SIEM Query:

process_name="nav2_amcl" AND (event_type="crash" OR event_type="segfault") OR ros_topic="/parameter_events" AND parameter_name="/amcl/do_beamskip"

🔗 References

📤 Share & Export