上周,
GitHub
安全实验室的研究员
Erik Krogh Kristensen
在
StandardVersion
中发现一个漏洞,可导致黑客在多个
node.js
仓库(包括遍布
2
万多个项目的流行的
standard-version changelog
工具)中执行
shell
命令。
已公开的 PoC 显示,如果standard-version的 releaseCommitMessagForms 参数是由受用户控制的输入提供的,那么恶意行动者能够操纵程序流,在应用服务器上运行任意 shell 命令。
GitHub 将该漏洞标记为“中危”级别。GitHub 安全实验室的一名发言人表示,“这个漏洞的完整 exploit 难以创建,因为它是易受攻击的一个库函数。”GitHub 指出,“完整的 exploit 要求某些客户端使用由受用户控制的输入的特定库函数”,并向所有依赖standard-version 的开源项目更新至修复版本 (8.0.1)。
总结一下,standardVersion 函数中含有一个命令注入漏洞。Standard-verison 库的客户端可能未意识到这个问题,因此可能会编写出包含漏洞的代码。如果库客户端调用了输入不可信的易受攻击的方法,则可能引发远程代码执行后果。
命令注入漏洞
GitHub CodeQL 团队在开发新查询以检测类似 bug 时发现了这一漏洞。实验室的发言人指出,“该查询建模了一个危险的代码模式,从而引发命令行注入漏洞。在调查这个问题时,我们注意到其它15个安全问题也遵循同一个模式:‘不慎允许远程代码执行的库 API’。有时,由于缺乏最佳实践文档,不同的代码库中一再出现危险的模式。”
在大概11.5万个开源项目中运行该查询后,GitHub 安全实验室在其它库中发现了类似漏洞,包括 git-diff-apply、mversion、node-dns-sync 等。
GitHub 已通知项目维护人员更新代码。GitHub 安全实验室建议不使用可见字符串解析为 shell 命令的 API。例如,使用 child_process.execFile,而不是使用 child_process.exec。
该发言人表示,“CodeQL 团队的一个目标是识别这些模式和构建查询,阻止开发人员再次引入该漏洞。”
开发人员可以使用多种工具如 GitHub 代码扫描工具在开发仓库时和自动化开发者工作流中的安全性时运行安全检查。发言人指出,“开发人员可以深入分析出现问题的地方,提前在生命周期中检索更多的漏洞信息。另外,保持更新依赖关系,同时在使用字符串拼接构建 shell 命令时要非常仔细。”
https://portswigger.net/daily-swig/github-security-team-finds-remote-code-execution-bug-in-popular-node-js-changelog-library
https://github.com/advisories/GHSA-7xcx-6wjh-7xp2
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。
点个 “在看” ,加油鸭~