CVE-2025-3753

7.8 HIGH

📋 TL;DR

A remote code execution vulnerability exists in ROS 'rosbag' tool due to unsafe eval() usage on user input in the 'rosbag filter' command. Attackers can execute arbitrary Python code by crafting malicious input. This affects ROS Noetic Ninjemys and earlier distributions.

💻 Affected Systems

Products:
  • Robot Operating System (ROS)
  • rosbag tool
Versions: ROS Noetic Ninjemys and earlier distributions
Operating Systems: Linux (primary ROS platform), Windows (ROS support), macOS (ROS support)
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability is present in default rosbag installations when using the 'rosbag filter' command with untrusted input.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full system compromise allowing attacker to execute arbitrary commands, install malware, pivot to other systems, and exfiltrate sensitive data.

🟠

Likely Case

Local privilege escalation or remote code execution in environments where rosbag processes untrusted input, potentially leading to service disruption or data theft.

🟢

If Mitigated

Limited impact if proper input validation and sandboxing are implemented, though the vulnerability still exists.

🌐 Internet-Facing: MEDIUM - Requires rosbag to process untrusted input from external sources, which is less common but possible in exposed ROS interfaces.
🏢 Internal Only: HIGH - Common in development and testing environments where rosbag processes various data sources, including potentially malicious inputs.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: LOW - Exploitation requires crafting malicious input to the eval() function, which is straightforward for attackers familiar with Python.

Exploitation requires access to execute rosbag filter command with malicious input. No public exploit code identified at this time.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Not available - ROS Noetic reached end-of-life (EOL) on May 23, 2025

Vendor Advisory: https://www.ros.org/blog/noetic-eol/

Restart Required: No

Instructions:

1. Migrate to supported ROS distribution (ROS 2 recommended). 2. If staying on Noetic, implement workarounds below. 3. Monitor for community patches or backports.

🔧 Temporary Workarounds

Input Validation and Sanitization

all

Implement strict input validation for all rosbag filter command inputs to prevent malicious payloads.

# Custom wrapper script that validates input before passing to rosbag
# Example: validate_input() function checking for dangerous characters

Restrict rosbag Usage

linux

Limit rosbag filter command execution to trusted users and environments only.

sudo chmod 750 /opt/ros/noetic/bin/rosbag
# Or implement mandatory access controls

🧯 If You Can't Patch

  • Network segmentation: Isolate ROS systems from untrusted networks and limit inbound connections.
  • Monitor rosbag processes: Implement auditing for rosbag filter command usage and alert on suspicious patterns.

🔍 How to Verify

Check if Vulnerable:

Check ROS version: 'rosversion -d' should return 'noetic' or earlier. Check if rosbag is installed: 'which rosbag'.

Check Version:

rosversion -d

Verify Fix Applied:

Test with safe input validation: Create test script that attempts to pass malicious eval payloads to verify they're blocked.

📡 Detection & Monitoring

Log Indicators:

  • Unusual rosbag filter command executions
  • Python error messages containing eval() failures
  • Process execution of unexpected Python code

Network Indicators:

  • Unusual network connections originating from ROS systems
  • Data exfiltration patterns from ROS hosts

SIEM Query:

process.name:"rosbag" AND process.args:"filter" AND (process.args:"eval" OR process.args:"__import__" OR process.args:"os.system")

🔗 References

📤 Share & Export