OpenC3 COSMOS provides the functionality needed to send commands to and receive data from one or more embedded systems. From 5.0.0 to 6.10.1, OpenC3 COSMOS contains a critical remote code execution vulnerability reachable through the JSON-RPC API. When a JSON-RPC request uses the string form of certain APIs, attacker-controlled parameter text is parsed into values using String#convert_to_value. For array-like inputs, convert_to_value executes eval(). Because the cmd code path parses the command string before calling authorize(), an unauthenticated attacker can trigger Ruby code execution even though the request ultimately fails authorization (401). This vulnerability is fixed in 6.10.2.
When a JSON-RPC request uses the so-called string form of specific APIs, attacker-controlled input is processed by the String#convert_to_value function. In the case of array data, this function calls eval(), executing the passed Ruby code. The key issue is the order of operations: the cmd command handler processes and evaluates the command string before calling authorize(). This means code execution occurs before permission verification, even if the final server response returns a 401 (unauthorized) error.
An unauthenticated attacker can execute arbitrary Ruby code in the server process context, leading to complete system takeover, data exfiltration, and potential disruption of supported embedded systems.
OpenC3 COSMOS should be updated to version 6.10.2 as soon as possible, where the vulnerability has been fixed. If immediate update is not possible, access to the JSON-RPC API should be restricted to trusted networks or hosts at the firewall level.
OpenC3 COSMOS in versions 5.0.0 to 6.10.1 inclusive
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H