IPBUF安全漏洞报告
English
CVE-2026-9277 CVSS 8.1 高危

CVE-2026-9277 shell-quote远程代码执行漏洞

披露日期: 2026-05-22
来源: 7ffcee3d-2c14-4c3e-b844-86c6a321a158

漏洞信息

漏洞编号
CVE-2026-9277
漏洞类型
远程代码执行
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
shell-quote (npm)

相关标签

远程代码执行shell注入命令注入换行符绕过shell-quotenpmnode.js高危漏洞

漏洞概述

CVE-2026-9277是node.js生态中广泛使用的shell-quote库的远程代码执行漏洞。该漏洞存在于quote()函数的运算符转义逻辑中,由于正则表达式/(.)/g无法匹配换行符等行终止符,导致攻击者可以通过在.op字段中注入换行符来绕过转义机制。在POSIX shell中,换行符被当作命令分隔符处理,因此注入的换行符会使后续内容作为独立命令执行。此漏洞可通过两种方式利用:直接构造包含换行符的{op:'...\n...'}对象,或通过parse(cmd, envFn)函数当envFn返回的.op字段包含攻击者可控内容时触发。CVSS评分8.1,属于高危漏洞,无需认证即可远程利用,对系统机密性、完整性和可用性均造成严重影响。

技术细节

漏洞根源在于shell-quote库对运算符字段的转义处理存在缺陷。在quote()函数中,.op字段使用正则表达式/(.)/g进行逐字符转义,但该正则表达式默认不匹配行终止符(\n、\r、U+2028、U+2029)。当.op字段包含换行符时,换行符会原样传递到输出结果中。在shell解析阶段,换行符被解释为命令分隔符,原本应作为单一命令参数的内容会被拆分为多条独立命令执行。攻击者可通过两种路径触发此漏洞:1) 直接构造包含换行符的{op:'malicious\ncommand'}对象并传入quote()函数;2) 通过parse(cmd, envFn)调用,当envFn回调函数返回的令牌对象.op字段被攻击者控制时触发。修复方案采用严格形状验证替代逐字符转义:.op必须匹配解析器的控制运算符白名单;{op:'glob',pattern}结构需验证pattern且禁止换行符;{comment}结构需验证comment且禁止换行符;其他对象形状均抛出TypeError异常。

攻击链分析

STEP 1
步骤1
攻击者识别使用shell-quote库的目标应用,发现quote()或parse()函数处理用户可控输入
STEP 2
步骤2
攻击者构造恶意令牌对象,在.op字段中注入换行符,如{op:'echo\nmalicious_command'}
STEP 3
步骤3
恶意令牌传入quote()函数,由于正则/(.)/g不匹配换行符,攻击载荷未经过滤进入输出
STEP 4
步骤4
quote()的输出被传递给shell命令执行(如child_process.exec()或shell解释器)
STEP 5
步骤5
Shell将换行符解析为命令分隔符,在echo命令后执行malicious_command,实现远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const quote = require('shell-quote').quote; // PoC 1: Direct construction with newline in op field try { const maliciousToken = { op: 'echo\nwhoami' }; const result = quote([maliciousToken]); console.log('Result:', result); // When executed in shell, 'whoami' will run as a separate command } catch (e) { console.log('Error (vulnerability may be fixed):', e.message); } // PoC 2: Via parse() with malicious envFn const parse = require('shell-quote').parse; try { // envFn returns object tokens with attacker-controlled op field const result = parse('test', () => ({ op: 'echo\nid' })); console.log('Parse Result:', result); // The 'id' command will execute after newline } catch (e) { console.log('Parse Error (vulnerability may be fixed):', e.message); }

影响范围

shell-quote < 1.7.3 (fixed version)
All versions with vulnerable escape logic in quote() function

防御指南

临时缓解措施
在官方修复发布前,建议采取以下临时措施:1) 对所有传入quote()或parse()函数的用户输入进行严格过滤,禁止包含换行符等特殊字符;2) 使用child_process.spawn()替代exec()并禁用shell选项;3) 对envFn回调函数的返回值进行严格验证,确保.op字段不包含换行符或其他控制字符;4) 考虑使用参数化方式构建命令,避免字符串拼接;5) 部署WAF规则检测请求中的换行符注入尝试。

参考链接

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