CVE-2026-9277CVE-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异常。