
Tool zur Überprüfung auf Abhängigkeitsverwirrungs-Schwachstellen in mehreren Paketverwaltungssystemen
Ein Werkzeug, um nach verbleibenden freien Namensräumen für private Paketnamen zu suchen, die in der Abhängigkeitskonfiguration referenziert werden, für Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json oder MVN (maven) pom.xml.
Am 9. Februar 2021 veröffentlichte der Sicherheitsforscher Alex Birsan einen Artikel, der verschiedene Auflösungsreihenfolgefehler in Abhängigkeitsverwaltungswerkzeugen thematisierte, die in mehreren Programmiersprachen-Ökosystemen vorhanden sind.
Microsoft veröffentlichte ein Whitepaper, das Möglichkeiten zur Minderung der Auswirkungen beschreibt, während die Ursache weiterhin bestehen bleibt.
confused liest einfach eine Abhängigkeitsdefinitionsdatei einer Anwendung durch und prüft die öffentlichen Paket-Repositories für jeden Abhängigkeitseintrag in dieser Datei. Es meldet alle Paketnamen, die nicht in den öffentlichen Repositories gefunden werden – ein Zustand, der darauf hindeutet, dass ein Paket für diese Art von Angriff anfällig sein könnte, während dieser Vektor noch nicht ausgenutzt wurde.
Dies bedeutet jedoch nicht, dass eine Anwendung nicht bereits aktiv ausgenutzt wird. Wenn Sie wissen, dass Ihre Software private Paket-Repositories verwendet, sollten Sie sicherstellen, dass die Namensräume für Ihre privaten Pakete von einer vertrauenswürdigen Partei (in der Regel Sie selbst oder Ihr Unternehmen) beansprucht wurden.
Einige Paketierungs-Ökosysteme wie npm haben ein Konzept namens "scopes", die entweder privat oder öffentlich sein können. Kurz gesagt bedeutet es einen Namensraum, der eine obere Ebene hat – den Scope. Die Scopes sind standardmäßig nicht öffentlich sichtbar, was bedeutet, dass confused nicht zuverlässig erkennen kann, ob er beansprucht wurde. Wenn Ihre Anwendung gescopte Paketnamen verwendet, sollten Sie sicherstellen, dass eine vertrauenswürdige Partei den Scope-Namen in den öffentlichen Repositories beansprucht hat.
Laden Sie ein vorerstelltes Binary von der Releases-Seite herunter, entpacken Sie es und führen Sie es aus!
oder
Wenn Sie einen aktuellen Go-Compiler installiert haben: go get -u github.com/visma-prodsec/confused (derselbe Befehl funktioniert auch zum Aktualisieren)
oder
git clone https://github.com/visma-prodsec/confused ; cd confused ; go get ; go build
Usage:
confused [-l LANGUAGENAME] depfilename.ext
Usage of confused:
-l string
Package repository system. Possible values: "pip", "npm", "composer", "mvn", "rubygems" (default "npm")
-s string
Comma-separated list of known-secure namespaces. Supports wildcards
-v Verbose output
./confused -l pip requirements.txt
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l npm package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
[!] @mycompany/internal_package1
[!] @mycompany/internal_package2
# Example when @mycompany private scope has been registered in npm, using -s
./confused -l npm -s '@mycompany/*' package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l mvn pom.xml
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2
./confused -l rubygems Gemfile.lock
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2