IPBUF安全漏洞报告
English
CVE-2025-61787 CVSS 8.1 高危

CVE-2025-61787 Deno Windows平台批处理文件命令行注入漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-61787
漏洞类型
命令行注入(Command Injection)
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Deno(JavaScript、TypeScript 和 WebAssembly 运行时)

相关标签

CVE-2025-61787Deno命令注入Windows批处理文件CreateProcesscmd.exe高危漏洞跨平台运行时GitHub安全公告

漏洞概述

CVE-2025-61787 是 Deno 运行时在 Windows 平台上存在的一个高危命令行注入漏洞,CVSS 评分为 8.1 分。该漏洞源于 Windows 操作系统中 CreateProcess() API 的特殊行为:当应用程序尝试执行批处理文件(如 .bat、.cmd 等扩展名)时,即使调用方没有显式指定 cmd.exe,Windows 系统也会隐式地通过 cmd.exe 来解析和执行该批处理文件。这一操作系统层面的行为差异在 Unix/Linux 系统中并不存在,因此 Deno 的开发团队在最初设计跨平台进程执行逻辑时未能充分考虑 Windows 的这一特性,从而引入了安全风险。

攻击者可以利用该漏洞,通过精心构造的批处理文件路径或文件名,在 Deno 进程执行批处理文件时注入并执行任意操作系统命令。由于 Deno 通常被用于执行用户提供的脚本或代码,这种命令行注入可能导致完整的主机系统接管。攻击者可以读取敏感文件、安装恶意软件、修改系统配置、窃取凭据或利用被攻陷的服务器作为进一步攻击的跳板。

该漏洞的影响范围包括所有在 Windows 平台上运行且版本低于 2.5.3(2.5.x 分支)和 2.2.15(2.2.x 分支)的 Deno 运行时实例。由于 Deno 已被广泛应用于服务端 JavaScript/TypeScript 应用开发、CI/CD 流水线以及边缘计算场景中,该漏洞的潜在影响面非常广泛。GitHub 安全团队([email protected])于 2025 年 10 月 8 日披露了该漏洞,并已在最新版本中完成修复。

技术细节

该漏洞的根本原因在于 Windows 操作系统中 CreateProcess() 系统调用的特殊行为。当应用程序调用 CreateProcess() 启动一个以 .bat、.cmd、.btm 等扩展名结尾的批处理文件时,Windows 内核会自动将该执行请求重定向到 cmd.exe,由 cmd.exe 负责解析和执行批处理文件中的命令序列。这一行为对于 Windows 开发者来说是众所周知的,但跨平台运行时(如 Deno)必须显式处理这种差异。

在 Deno 受影响版本中,当通过 Command::new() 或类似 API 执行批处理文件时,Deno 直接将文件路径传递给 Windows 的 CreateProcess() 函数,而没有对路径进行适当的转义或验证,也没有强制使用安全的执行方式。由于 cmd.exe 在解析命令行参数时会执行元字符(如 &、|、&&、|| 等),攻击者可以通过构造包含命令注入元字符的文件名或路径参数来实现任意命令执行。

例如,如果 Deno 应用接受用户输入作为批处理文件路径的一部分,攻击者可以提交类似 "legit.bat & calc.exe" 的路径,由于 cmd.exe 会将 & 解释为命令分隔符,从而执行 calc.exe。修复方案是通过使用 CreateProcessW() 配合 NULL 命令行参数(仅传递可执行文件路径),或者通过使用 CreateProcessAsUser() 等替代 API 来绕过 cmd.exe 的隐式调用,确保批处理文件以安全的方式执行。

攻击链分析

STEP 1
步骤1:识别目标
攻击者识别出运行受影响版本 Deno 的 Windows 主机或服务,这些服务接受用户输入作为批处理文件路径或文件名的参数。
STEP 2
步骤2:构造恶意输入
攻击者精心构造包含命令行注入元字符(如 &、|、&&、||)的批处理文件路径或文件名,例如 'legit.bat & malicious_command.exe'。
STEP 3
步骤3:提交恶意输入
攻击者通过 Web 请求、API 调用、配置文件或其他输入渠道将恶意构造的路径传递给 Deno 应用程序。
STEP 4
步骤4:触发隐式 cmd.exe 执行
Deno 应用程序调用 Command::new() 执行该路径,Windows 的 CreateProcess() 检测到 .bat/.cmd 扩展名后隐式启动 cmd.exe 来执行批处理文件。
STEP 5
步骤5:命令注入执行
cmd.exe 在解析命令行时将元字符解释为命令分隔符,从而执行攻击者注入的任意操作系统命令,如下载并执行恶意软件、窃取凭据或建立持久化后门。
STEP 6
步骤6:权限提升与持久化
利用 Deno 进程的权限级别,攻击者可以读取敏感数据、修改系统配置、创建新用户账户或安装后门程序,实现对目标主机的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61787 PoC - Deno Windows Command Line Injection via Batch File # Vulnerability: When Deno executes a batch file on Windows, CreateProcess() # implicitly spawns cmd.exe, enabling command injection through crafted paths. // vulnerable_deno_app.ts // This is a simulated Deno application that demonstrates the vulnerability // when executing user-controlled batch file paths on Windows. import { Command } from "https://deno.land/[email protected]/command/mod.ts"; // User-controlled input (e.g., from web request, config file, etc.) const userInput = Deno.args[0] || "legit.bat"; // VULNERABLE: Passing user-controlled path directly to Command::new() // On Windows, if the path ends with .bat/.cmd, CreateProcess() will // implicitly invoke cmd.exe, allowing command injection via metacharacters. const cmd = new Command("C:\\batch\\" + userInput); const output = await cmd.output(); console.log(new TextDecoder().decode(output.stdout)); // Exploit example: // deno run --allow-run vulnerable_deno_app.ts "legit.bat & calc.exe" // // On Windows, cmd.exe interprets '&' as a command separator, so this would: // 1. Execute legit.bat // 2. Then execute calc.exe (arbitrary command) // // More dangerous payloads: // "legit.bat & whoami > C:\\temp\\output.txt" // "legit.bat & powershell -e <base64_encoded_payload>" // "legit.bat & net user attacker P@ssw0rd /add" // FIXED behavior (Deno >= 2.5.3 or >= 2.2.15): // Deno now properly handles batch file execution by avoiding the implicit // cmd.exe invocation, preventing command injection through path metacharacters.

影响范围

Deno < 2.2.15
Deno 2.3.x
Deno 2.4.x
Deno 2.5.0 - 2.5.2

防御指南

临时缓解措施
在无法立即升级 Deno 版本的情况下,建议采取以下临时缓解措施:1)对所有传入的文件路径参数进行严格的输入验证和过滤,禁止包含 Windows 命令行元字符(&、|、&&、||、>、<、^ 等);2)实施文件路径白名单,仅允许执行预定义的合法批处理文件;3)将 Deno 进程配置为以最低权限运行,限制潜在命令注入的影响范围;4)部署主机入侵检测系统(HIDS)监控异常的 cmd.exe 子进程创建行为;5)考虑在应用层使用安全的进程创建 API 替代直接调用 Command::new() 执行批处理文件。

参考链接

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