
retire.js v5.5.0
сканер, обнаруживающий использование библиотек JavaScript с известными уязвимостями. Также может генерировать SBOM найденных библиотек.
Retire.js
Что вы подключаете, то должны и вывести из эксплуатации
Существует огромная экосистема JavaScript-библиотек, доступных как для веб-приложений, так и для Node.js-приложений. Хотя эти библиотеки значительно ускоряют разработку, они также требуют постоянного обслуживания, чтобы своевременно устранять уязвимости безопасности. В 2013 году «Использование компонентов с известными уязвимостями» было добавлено в список OWASP Top 10 критических рисков безопасности, что подчеркнуло серьёзную угрозу, которую устаревшие или небезопасные зависимости могут представлять для веб-приложений. Retire.js был создан, чтобы помочь разработчикам выявлять версии JavaScript-библиотек с известными уязвимостями, особенно те, которые отсутствуют в манифестах пакетов, а просто загружены и помещены в систему контроля версий.
Retire.js можно использовать разными способами:
- В качестве сканера командной строки
- В качестве расширения Chrome - не официально доступно в Chrome Web Store
- В качестве расширения Burp или дополнения OWASP ZAP
- В качестве расширения для Firefox - устарело. Сообщите нам, если вы хотите поддерживать его и снять статус устаревшего.
- Сканер веб-сайтов в headless-режиме
- В качестве плагина Grunt (устарело)
- В качестве задачи Gulp (устарело)
Сканер командной строки
Сканируйте веб-приложение или Node.js-приложение на предмет использования уязвимых JavaScript-библиотек и/или Node.js-модулей. Если вы ещё не сделали этого, сначала необходимо установить node/npm. В папке с исходным кодом приложения выполните:
$ npm install -g retire
$ retire
Генерация SBOM
retire.js может генерировать SBOM в формате CycloneDX:
$ 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/
Headless-сканер сайтов
retire-site-scanner https://github.com/RetireJS/retire-site-scanner можно использовать для сканирования веб-сайта в headless-режиме (в отличие от расширений для Chrome/Firefox).
Плагин Grunt (устарело)
Задача Grunt для запуска Retire.js как часть процесса сборки вашего приложения или какого-либо другого автоматизированного рабочего процесса.
Задача 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();
});
});
Пожертвования
Пожертвования будут использованы для финансирования поддержки инструмента и репозитория уязвимостей.
