Das Rust-Projekt hat bösartige Versionen dreier weitverbreiteter Rust-Pakete aus dem Verzeichnis crates.io entfernt.
Betroffen waren die Versionen arrayref 0.3.10, internment 0.8.7 sowie append-only-vec 0.1.9, alle am 20. August über dasselbe Konto veröffentlicht und innerhalb von 86 bis 107 Minuten wieder entfernt. Da der Schadcode im Build-Skript der eingeschleusten Abhängigkeit lag, reichte allein das Kompilieren eines betroffenen Projekts aus, um die Nutzlast auszulösen, ganz ohne dass eine Funktion der eigentlichen Pakete aufgerufen werden musste. Das Rust Security Response Team erklärte in einer Sicherheitsmitteilung, es gehe nicht davon aus, dass der eigentliche Paket-Verantwortliche selbst böswillig gehandelt habe, vermute jedoch, dass „ihr Computer oder ihre Zugangsdaten wahrscheinlich kompromittiert“ worden seien.
Um die betroffene Version als einzig verfügbare Option erscheinen zu lassen, zog das kompromittierte Konto zudem gleichzeitig die vorherigen Versionen 0.3.5 bis 0.3.9 von arrayref zurück, wodurch Entwicklern beim Cargo-Aktualisierungsbefehl gezielt die schädliche Version als Update vorgeschlagen wurde. Der Entwickler, der den Vorfall ursprünglich meldete, beschrieb den Auslöser so: Die übliche Warnung von Cargo, auf eine nicht zurückgezogene Version zu wechseln, sei der eigentliche Köder gewesen.
Weitreichende Abhängigkeitskette betroffen
Das betroffene Paket arrayref zählt nach Angaben von The Hacker News mehr als 245 Millionen Downloads insgesamt und wird von 403 weiteren Crates im Rust-Ökosystem als Abhängigkeit genutzt, teils über mehrere Zwischenstufen hinweg. Je nach Betriebssystem und Prozessorarchitektur wählte das eingeschleuste Build-Skript eine von vier unterschiedlichen Schadnutzlasten aus, deaktivierte dabei zusätzlich die TLS-Zertifikatsprüfung und richtete unter Windows, macOS und Linux jeweils eigene Mechanismen zur dauerhaften Ausführung ein.
Nach einer Analyse des Sicherheitsunternehmens Wiz baut die eigentliche Schadsoftware anschließend eine verschlüsselte Verbindung zu einem Kontrollserver auf, unterstützt vier grundlegende Fernsteuerungsbefehle und liest gespeicherte Zugangsdaten aus den Browsern Chrome, Brave und Edge aus. Wiz stellte dabei erhebliche Überschneidungen mit der genutzten Infrastruktur zu bereits zuvor bekannt gewordenen, Nordkorea zugeschriebenen Angriffen auf die Paketverzeichnisse npm fest, unter anderem den Kompromittierungen der Pakete Mastra und axios.
Fehlender automatischer Verzögerungsmechanismus
Anders als das npm-Ökosystem, das inzwischen über den Dienst Dependabot eine dreitägige Verzögerung für neu veröffentlichte Abhängigkeiten einführte, verfügt Cargo bislang über keinen vergleichbaren, bereits ausgelieferten Mechanismus. Ein entsprechender Vorschlag für eine konfigurierbare Mindestwartezeit neu veröffentlichter Pakete befand sich zum Zeitpunkt des Angriffs zwar bereits in der finalen Abstimmungsphase, war jedoch weiterhin nicht in Cargo selbst umgesetzt. Für keine der drei betroffenen Crates existiert bislang eine offizielle CVE-Kennung, wie die betroffenen Konten ursprünglich kompromittiert wurden, ist bislang nicht bekannt.
(red)