
retire.js v5.5.0
用于检测使用已知漏洞JavaScript库的扫描器。还可以生成它所找到库的SBOM。
Retire.js
你所依赖的,也必须退役
存在一个庞大的 JavaScript 库生态系统,可用于 Web 和 Node.js 应用程序。虽然这些库显著加速了开发,但它们也需要持续维护,以确保安全漏洞得到及时处理。2013 年,“使用含有已知漏洞的组件”被列入 OWASP Top 10 关键安全风险列表,凸显了过时或不安全的依赖项可能对 Web 应用程序构成的严重威胁。Retire.js 的创建就是为了帮助开发者识别具有已知漏洞的 JavaScript 库版本,尤其是那些不在包清单中、而只是下载并放入源码控制的库。
Retire.js 可以通过多种方式使用:
- 作为命令行扫描器
- 作为 Chrome 扩展 - 并非在 Chrome 网上应用店官方提供
- 作为 Burp 扩展 或 OWASP ZAP 插件
- 作为 Firefox 扩展 - 已弃用 如果您想维护并取消弃用,请告诉我们。
- 无头网站扫描器
- 作为 grunt 插件(已弃用)
- 作为 gulp 任务(已弃用)
命令行扫描器
扫描 Web 应用或 Node 应用中使用的易受攻击的 JavaScript 库和/或 Node.JS 模块。如果尚未安装,您需要先安装 node/npm。在应用程序文件夹的源代码文件夹中运行:
$ npm install -g retire
$ retire
SBOM 生成
retire.js 可以生成 CycloneDX 格式的 SBOM:
$ retire --outputformat cyclonedx
cyclonedx 生成 CycloneDX 1.4 XML。对于 JSON 以及更新的规范版本,请使用 cyclonedxJSON (1.4)、cyclonedxJSON1_6 或
cyclonedxJSON1_7。cyclonedxJSON1_6_VEX 和 cyclonedxJSON1_7_VEX 变体还包含 vulnerabilities 部分。
默认情况下,如果 retire.js 发现漏洞,将以退出码 13 结束。可以使用 --exitwith 0 覆盖此行为。
Chrome 和 Firefox 扩展
扫描已访问站点中对不安全库的引用,并在开发者控制台中显示警告。地址栏上的图标也会指示是否加载了易受攻击的库。
Burp 扩展和 OWASP ZAP 插件
@h3xstream 已将 Retire.js 改编为渗透测试工具 Burp 和 OWASP ZAP 的插件。
OWASP ZAP 团队官方支持 Retire.js 插件,该插件可通过 ZAP Marketplace 获取,并默认包含在 ZAP 每周版本中:https://www.zaproxy.org/docs/desktop/addons/retire.js/
无头站点扫描器
retire-site-scanner https://github.com/RetireJS/retire-site-scanner 可用于在无头模式下扫描网站(与使用 Chrome/Firefox 扩展相反)。
Grunt 插件(已弃用)
作为应用程序构建例程或其他自动化工作流的一部分,用于运行 Retire.js 的 Grunt 任务。
Gulp 任务(已弃用)
这是一个 Gulp 任务示例,可在您的 gulpfile 中使用,以自动监视和扫描项目文件。您可以根据需要修改监视模式以及(可选的)Retire.js 选项。
const c = require("ansi-colors");
var gulp = require("gulp");
var beeper = require("beeper");
var log = require("fancy-log");
var spawn = require("child_process").spawn;
gulp.task("retire:watch", ["retire"], function (done) {
// Watch all javascript files and package.json
gulp.watch(["js/**/*.js", "package.json"], ["retire"]);
});
gulp.task("retire", function () {
// Spawn Retire.js as a child process
// You can optionally add option parameters to the second argument (array)
var child = spawn("retire", [], { cwd: process.cwd() });
child.stdout.setEncoding("utf8");
child.stdout.on("data", function (data) {
log(data);
});
child.stderr.setEncoding("utf8");
child.stderr.on("data", function (data) {
log(c.red(data));
beeper();
});
});
捐赠
捐款将用于资助该工具和漏洞仓库的维护。
