Sicherheitsanfälligkeit in NPM, die zu Dateischreibungen im System führt.

Das Unternehmen GitHub hat Details zu sieben Schwachstellen in den Tar- und @npmcli/arborist-Paketen veröffentlicht, die Funktionen zur Verarbeitung von Tar-Archiven und zur Berechnung von Abhängigkeitsbäumen in Node.js bereitstellen. Diese Schwachstellen ermöglichen es, beim Entpacken eines speziell gestalteten Archivs Dateien außerhalb des Wurzelverzeichnisses, in das entpackt wird, entsprechend den aktuellen Zugriffsrechten zu überschreiben. Die Probleme eröffnen die Möglichkeit, beliebigen Code im System auszuführen, etwa durch das Hinzufügen von Befehlen zu ~/ .bashrc oder ~/ .profile, wenn die Operation von einem nicht privilegierten Nutzer durchgeführt wird, oder durch Ersetzen von Systemdateien bei der Ausführung mit root-Rechten.

Die Gefährlichkeit der Schwachstellen wird dadurch verstärkt, dass der problematische Code im Paketmanager npm bei Operationen mit npm-Paketen verwendet wird, was es ermöglicht, einen Angriff auf Benutzern durch das Bereitstellen eines speziell gestalteten npm-Pakets im Repository zu organisieren, wobei bei der Verarbeitung in dem System der Code des Angreifers ausgeführt wird. Ein Angriff ist sogar bei der Installation von Paketen im Modus „--ignore-scripts“, der die Ausführung eingebauter Skripte deaktiviert, möglich. Insgesamt trifft npm vier Schwachstellen (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 und CVE-2021-39135) von sieben. Die ersten beiden Probleme betreffen das Tar-Paket, während die anderen beiden das Paket @npmcli/arborist betreffen.

Die gefährlichste Schwachstelle CVE-2021-32804 resultiert daraus, dass beim Bereinigen der im Tar-Archiv angegebenen absoluten Pfade wiederholte Zeichen „/“ nicht korrekt behandelt werden – nur das erste Zeichen wird entfernt, während die anderen erhalten bleiben. Beispielsweise wird der Pfad „/home/user/.bashrc“ in „home/user/.bashrc“ umgewandelt, während der Pfad „//home/user/.bashrc“ in „/home/user/.bashrc“ umgewandelt wird. Die zweite Schwachstelle CVE-2021-37713 tritt nur auf der Windows-Plattform auf und hängt mit der fehlerhaften Bereinigung relativer Pfade zusammen, die ein nicht geteiltes Laufwerksymbol („C:some\path“) und eine Sequenz zum Zurückkehren zum vorherigen Verzeichnis („C:.. /foo“) enthält.

Die Schwachstellen CVE-2021-39134 und CVE-2021-39135 sind spezifisch für das Modul @npmcli/arborist. Das erste Problem tritt nur auf Systemen auf, die keine Groß- und Kleinschreibung im Dateisystem unterscheiden (macOS und Windows), und ermöglicht das Schreiben von Dateien in einen beliebigen Teil des Dateisystems, indem in den Abhängigkeiten die beiden Module ‘»foo»: «file:/some/path»‘ und ‘FOO: «file:foo.tgz»‘ angegeben werden, deren Verarbeitung zum Löschen des Inhalts des Verzeichnisses /some/path und zum Schreiben des Inhalts von foo.tgz in dieses Verzeichnis führt. Das zweite Problem ermöglicht das Überschreiben von Dateien durch Manipulation von symbolischen Links.

Die Schwachstellen wurden in den Versionen Node.js 12.22.6 und 14.17.6, npm CLI 6.14.15 und 7.21.0 sowie in einzelnen Versionen des Tar-Pakets 4.4.19, 5.0.11 und 6.1.10 behoben. Nachdem Informationen zu dem Problem im Rahmen der „Bug-Bounty“-Initiative bereitgestellt wurden, zahlte GitHub den Forschern 14.500 USD und scannte den Inhalt des Repositories, in dem keine Versuche zur Ausnutzung der Schwachstellen festgestellt wurden. Um sich vor den genannten Problemen zu schützen, führte GitHub zudem ein Verbot der Veröffentlichung von NPM-Paketen ein, die symbolische Links, harte Links und absolute Pfade enthalten.

Quelle: opennet.ru

60GB SSD 8Gb DDR4