
escaner que detecta el uso de librerías JavaScript con vulnerabilidades conocidas. También puede generar un SBOM de las librerías que encuentra.
Lo que necesitas, también debes retirarlo
Existe un vasto ecosistema de librerías JavaScript disponibles tanto para aplicaciones web como para Node.js. Si bien estas librerías aceleran significativamente el desarrollo, también requieren un mantenimiento continuo para garantizar que las vulnerabilidades de seguridad se aborden con prontitud. En 2013, “Using Components with Known Vulnerabilities” se añadió a la lista OWASP Top 10 de riesgos de seguridad críticos, lo que puso de relieve la grave amenaza que las dependencias obsoletas o inseguras pueden suponer para las aplicaciones web. Retire.js fue creado para ayudar a los desarrolladores a identificar versiones de librerías JavaScript con vulnerabilidades conocidas, especialmente aquellas que no están en los manifiestos de paquetes, sino que simplemente se descargan y se incluyen en el control de versiones.
Retire.js se puede utilizar de muchas maneras:
Escanea una aplicación web o una aplicación Node para detectar el uso de librerías JavaScript vulnerables y/o módulos Node.JS. Si aún no lo has hecho, primero necesitas instalar node/npm. En la carpeta del código fuente de la aplicación, ejecuta:
$ npm install -g retire
$ retire
retire.js puede generar SBOMs en formato CycloneDX:
$ retire --outputformat cyclonedx
cyclonedx produce CycloneDX 1.4 XML. Para JSON, y para versiones más recientes de la especificación, usa cyclonedxJSON (1.4), cyclonedxJSON1_6 o cyclonedxJSON1_7. Las variantes cyclonedxJSON1_6_VEX y cyclonedxJSON1_7_VEX también incluyen una sección vulnerabilities.
Por defecto, retire.js termina con el código 13 si encuentra vulnerabilidades. Esto se puede sobrescribir con --exitwith 0.
Escanea los sitios visitados en busca de referencias a librerías inseguras y muestra advertencias en la consola de desarrollador. Un icono en la barra de direcciones indicará también si se cargaron librerías vulnerables.
@h3xstream ha adaptado Retire.js como un plugin para las herramientas de pruebas de penetración Burp y OWASP ZAP.
El equipo de OWASP ZAP ofrece soporte oficial a un complemento de Retire.js que está disponible a través de ZAP Marketplace y se incluye por defecto en las versiones semanales de ZAP: https://www.zaproxy.org/docs/desktop/addons/retire.js/
El retire-site-scanner https://github.com/RetireJS/retire-site-scanner se puede utilizar para escanear un sitio web en modo headless (a diferencia de usar las extensiones de Chrome/Firefox).
Una tarea de Grunt para ejecutar Retire.js como parte de la rutina de compilación de tu aplicación, o de algún otro flujo de trabajo automatizado.
Un ejemplo de tarea de Gulp que puedes usar en tu gulpfile para vigilar y escanear automáticamente los archivos de tu proyecto. Puedes modificar los patrones de vigilancia y las opciones (opcionales) de Retire.js como prefieras.
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();
});
});
Las donaciones se utilizarán para financiar el mantenimiento de la herramienta y del repositorio de vulnerabilidades.