你所需的,也终需退休
在Web和Node.js应用开发中,存在一个庞大的JavaScript库生态系统。虽然这些库能显著加速开发,但也需要持续维护以确保安全漏洞能及时修补。2013年,"使用含有已知漏洞的组件"被列入OWASP十大关键安全风险列表,凸显了过时或不安全的依赖项对Web应用的严重威胁。Retire.js 旨在帮助开发者识别含有已知漏洞的JavaScript库版本,特别是那些未在包清单中记录,而是直接下载并放入版本控制的库。
Retire.js 可通过多种方式使用:
扫描Web应用或Node应用,检测是否使用了存在漏洞的JavaScript库和/或Node.js模块。如果尚未安装,需要先安装node/npm。在应用的源代码目录中运行:
$ npm install -g retire
$ retire
retire.js 可以生成CycloneDX格式的SBOM:
$ retire --outputformat cyclonedx
默认情况下,retire.js 在发现漏洞时会以退出码13退出。可以通过 --exitwith 0 覆盖此行为。
扫描访问过的站点,查找对不安全库的引用,并在开发者控制台中显示警告。地址栏上的图标也会指示是否加载了存在漏洞的库。
@h3xstream 已将 Retire.js 改编为渗透测试工具 Burp 和 OWASP ZAP 的插件。
OWASP ZAP 团队官方支持一个 Retire.js 附加组件,可通过 ZAP 市场获取,并默认包含在 ZAP 每周发布版中:https://www.zaproxy.org/docs/desktop/addons/retire.js/
retire-site-scanner https://github.com/RetireJS/retire-site-scanner 可用于以无头模式扫描网站(与使用Chrome/Firefox扩展程序相对)。
一个运行 Retire.js 的 Grunt 任务,可将其集成到应用的构建流程或其他自动化工作流中。
以下是一个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) {
// 监视所有JavaScript文件和package.json
gulp.watch(["js/**/*.js", "package.json"], ["retire"]);
});
gulp.task("retire", function () {
// 作为子进程启动Retire.js
// 可选的参数可以添加到第二个参数(数组)
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();
});
});
捐款将用于资助该工具及漏洞仓库的维护。