Sicherheitswarnung: Tar Berechtigungen
Veröffentlicht am 10. Dezember 2022 von Natalie Weizenbaum
Das Sass-Team wurde kürzlich vom produktiven externen Mitwirkenden @ntkme über ein Sicherheitsproblem in unserem Veröffentlichungsprozess informiert.
TL;DRTL;DR Permanenter Link
Wenn Sie Linux oder Mac OS verwenden, führen Sie ls -ax pfad/zu/sass aus. Wenn die letzte Gruppe von Buchstaben in der ersten Spalte w enthält, sind Sie anfällig.
Vulnerable:
-rwxr-xrwx 1 nweiz primarygroup 407 Dec 13 12:33 sass-1.56.2/sass
Not vulnerable:
-rwxr-xr-x 1 nweiz primarygroup 407 Dec 13 12:33 sass-1.56.2/sass
Wenn Sie das Paket sass-embedded verwenden, führen Sie denselben Befehl für node_modules/sass-embedded/dist/lib/src/vendor/dart-sass-embedded/dart-sass-embedded aus.
Wer ist betroffen?Wer ist betroffen? Permanenter Link
Obwohl wir nicht erwarten, dass dieses Problem für die überwiegende Mehrheit der Benutzer ein Problem darstellt, betrifft es die folgenden Gruppen:
-
Benutzer, die die eigenständigen
.tar.gz-Archive von Dart Sass, Dart Sass Embedded oder Sass Migrator von der Dart Sass-Website heruntergeladen und als Unix-Root-Benutzer extrahiert haben. -
Benutzer, die das npm-Paket
sass-embeddedals Unix-Root-Benutzer vor Version 1.54.5 installiert haben. -
Benutzer, die die "nicht-native" Version des von der Community gepflegten RubyGems-Pakets
sass-embeddedals Unix-Root-Benutzer vor Version 1.56.2 installiert haben. -
Benutzer auf Multi-User-Systemen, die die eigenständigen
.tar.gz-Archive von Dart Sass, Dart Sass Embedded oder Sass Migrator von der Dart Sass-Website heruntergeladen und explizit das Flag-p/--preserve-permissionsbeim Extrahieren übergeben haben.
Benutzer, die Dart Sass über das npm-Paket sass, Homebrew oder Chocolatey installiert haben, sind kategorisch nicht gefährdet, ebenso wenig wie Benutzer unter Windows.
Wir empfehlen dringend, dass Benutzer in diesen gefährdeten Gruppen Sass löschen und neu installieren. Alle .tar.gz-Dateien auf GitHub wurden bereinigt, um die Sicherheitslücke zu beseitigen. Sie können daher die gleiche Version neu installieren, die Sie zuvor verwendet haben, ohne auf die neueste Version aktualisieren zu müssen.
Dies ist ein Problem der Privilegien-Eskalation, was bedeutet, dass es einem hypothetischen Angreifer mit Zugriff auf ein Konto mit geringen Berechtigungen auf Ihrem Computer ermöglichen könnte, seine Zugriffsrechte auf die Berechtigungen Ihres Kontos zu erweitern. Dies bedeutet jedoch auch, dass es kein Risiko darstellt, *es sei denn*, ein Angreifer hat bereits Zugriff auf ein Konto auf Ihrer Maschine.
Was ist schiefgelaufen?Was ist schiefgelaufen? Permanenter Link
Wir haben versehentlich .tar.gz-Archive mit Berechtigungsmetadaten hochgeladen, die darauf hindeuteten, dass ausführbare Dateien von allen Benutzern überschrieben werden könnten, nicht nur vom Besitzer.
In den meisten Fällen werden diese Metadaten beim Extrahieren der Archive ignoriert und die Berechtigungen werden so gesetzt, dass sie nur für den Benutzer, der das Archiv extrahiert, beschreibbar sind. Beim Extrahieren von Archiven als Unix-Root-Benutzer oder beim expliziten Übergeben des Flags -p/--preserve-permissions werden die Berechtigungen für die extrahierten Dateien jedoch gemäß den Metadaten des Archivs festgelegt. Da die Metadaten falsch waren, könnte ein Angreifer mit Zugriff auf ein Konto mit geringen Berechtigungen die ausführbare Datei überschreiben und seine Privilegien eskalieren, sobald sie ausgeführt wird.
Wie ist das passiert?Wie ist das passiert? Permanenter Link
Dart Sass wird automatisch auf verschiedene Release-Plattformen mit einem Dart-Paket namens cli_pkg bereitgestellt, das ebenfalls vom Sass-Team geschrieben und gepflegt wird. Dieses Paket verwendet das Dart-archive-Paket, um .tar.gz-Dateien für eigenständige Release-Pakete zu generieren, die dann auf GitHub hochgeladen werden. Als ich ursprünglich den Code zur Verwendung dieses Pakets schrieb, habe ich die folgende Funktion geschrieben:
ArchiveFile fileFromBytes(String path, List<int> data,
{bool executable = false}) =>
ArchiveFile(path, data.length, data)
..mode = executable ? 495 : 428
..lastModTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
Meine Absicht war es, den ausführbaren Modus auf 755 (Lesen/Schreiben/Ausführen für den Besitzer, nur Lesen/Ausführen für andere Benutzer) und den nicht-ausführbaren Modus auf 644 (Lesen/Schreiben für den Besitzer, nur Lesen für andere Benutzer) zu setzen. Dart unterstützt jedoch keine Oktalzahlen, und ich muss die Dezimal-zu-Oktal-Konvertierung falsch durchgeführt haben. Die tatsächlich gesetzten Berechtigungen waren 757 (Lesen/Schreiben/Ausführen für den Besitzer *und andere Benutzer*, Lesen/Ausführen für die Gruppe) und 654 (Lesen/Schreiben für den Besitzer, Lesen/Ausführen für die Gruppe und nur Lesen für andere Benutzer).
Dies blieb mehrere Jahre unbemerkt, bis @ntkme uns letzte Woche auf das Problem aufmerksam machte und eine Korrektur für cli_pkg bereitstellte.
Was wurde getan?Was wurde getan? Permanenter Link
Wir haben cli_pkg 2.1.7 veröffentlicht, das die Archivberechtigungen korrekt setzt. Darüber hinaus haben wir alle .tar.gz-Dateien in den Repositories von Dart Sass, Dart Sass Embedded und Sass Migrator aktualisiert, um Schreibberechtigungen korrekt nur auf den Besitzer der Dateien zu beschränken. Wir kündigen die Sicherheitslücke hier und auf dem @SassCSS Twitter Account an.