
Scanner, der die Verwendung von JavaScript-Bibliotheken mit bekannten Schwachstellen erkennt. Kann auch eine SBOM der gefundenen Bibliotheken erstellen.
Was du benötigst, musst du auch ausmustern
Es gibt ein riesiges Ökosystem an JavaScript-Bibliotheken für Web- und Node.js-Anwendungen gleichermaßen. Diese Bibliotheken beschleunigen die Entwicklung zwar erheblich, erfordern aber auch eine fortlaufende Wartung, um Sicherheitslücken zeitnah zu beheben. Im Jahr 2013 wurde „Using Components with Known Vulnerabilities“ in die OWASP-Top-10-Liste kritischer Sicherheitsrisiken aufgenommen, was die ernste Bedrohung verdeutlicht, die veraltete oder unsichere Abhängigkeiten für Webanwendungen darstellen können. Retire.js wurde entwickelt, um Entwicklern zu helfen, JavaScript-Bibliotheksversionen mit bekannten Schwachstellen zu identifizieren – insbesondere solche, die nicht in Paketmanifesten aufgeführt sind, sondern einfach heruntergeladen und in die Versionsverwaltung aufgenommen wurden.
Retire.js kann auf viele Arten verwendet werden:
Scannt eine Web-App oder Node-App auf die Verwendung verwundbarer JavaScript-Bibliotheken und/oder Node.js-Module. Falls du es noch nicht getan hast, musst du zuerst Node/npm installieren. Führe im Quellcode-Ordner des Anwendungsordners Folgendes aus:
$ npm install -g retire
$ retire
retire.js kann SBOMs im CycloneDX-Format erzeugen:
$ retire --outputformat cyclonedx
cyclonedx erzeugt CycloneDX-1.4-XML. Verwende für JSON und für neuere Spezifikationsversionen cyclonedxJSON (1.4), cyclonedxJSON1_6 oder
cyclonedxJSON1_7. Die Varianten cyclonedxJSON1_6_VEX und cyclonedxJSON1_7_VEX enthalten ebenfalls einen Abschnitt vulnerabilities.
Standardmäßig beendet sich retire.js mit dem Exit-Code 13, wenn es Schwachstellen findet. Dies kann mit --exitwith 0 überschrieben werden.
Scannt besuchte Websites auf Verweise auf unsichere Bibliotheken und gibt Warnungen in der Entwicklerkonsole aus. Ein Symbol in der Adressleiste zeigt außerdem an, ob verwundbare Bibliotheken geladen wurden.
@h3xstream hat Retire.js als Plugin für die Penetrationstest-Werkzeuge Burp und OWASP ZAP angepasst.
Das OWASP-ZAP-Team unterstützt offiziell ein Retire.js-Add-on, das über den ZAP-Marketplace verfügbar ist und standardmäßig in den wöchentlichen ZAP-Releases enthalten ist: https://www.zaproxy.org/docs/desktop/addons/retire.js/
Der retire-site-scanner https://github.com/RetireJS/retire-site-scanner kann verwendet werden, um eine Website im Headless-Modus zu scannen (anstatt die Chrome-/Firefox-Erweiterungen zu verwenden).
Eine Grunt-Aufgabe zum Ausführen von Retire.js als Teil der Build-Routine deiner Anwendung oder eines anderen automatisierten Workflows.
Ein Beispiel für eine Gulp-Task, die du in deiner gulpfile verwenden kannst, um deine Projektdateien automatisch zu überwachen und zu scannen. Du kannst die Watch-Muster und (optional) die Retire.js-Optionen nach Belieben anpassen.
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();
});
});
Spenden werden verwendet, um die Wartung des Tools und des Schwachstellen-Repositorys zu finanzieren.