Назад к обновлениям
New releaseAug 21, 2026

retire.js v5.5.0

сканер, обнаруживающий использование библиотек JavaScript с известными уязвимостями. Также может генерировать SBOM найденных библиотек.

Поделиться

Retire.js

Что вы подключаете, то должны и вывести из эксплуатации

Существует огромная экосистема JavaScript-библиотек, доступных как для веб-приложений, так и для Node.js-приложений. Хотя эти библиотеки значительно ускоряют разработку, они также требуют постоянного обслуживания, чтобы своевременно устранять уязвимости безопасности. В 2013 году «Использование компонентов с известными уязвимостями» было добавлено в список OWASP Top 10 критических рисков безопасности, что подчеркнуло серьёзную угрозу, которую устаревшие или небезопасные зависимости могут представлять для веб-приложений. Retire.js был создан, чтобы помочь разработчикам выявлять версии JavaScript-библиотек с известными уязвимостями, особенно те, которые отсутствуют в манифестах пакетов, а просто загружены и помещены в систему контроля версий.

Retire.js можно использовать разными способами:

  1. В качестве сканера командной строки
  2. В качестве расширения Chrome - не официально доступно в Chrome Web Store
  3. В качестве расширения Burp или дополнения OWASP ZAP
  4. В качестве расширения для Firefox - устарело. Сообщите нам, если вы хотите поддерживать его и снять статус устаревшего.
  5. Сканер веб-сайтов в headless-режиме
  6. В качестве плагина Grunt (устарело)
  7. В качестве задачи 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();
  });
});

Пожертвования

Пожертвования будут использованы для финансирования поддержки инструмента и репозитория уязвимостей.

Категории