Nach Angaben von StepSecurity wurden drei schädliche Gems in RubyGems veröffentlicht. Besonders auffällig ist dabei „git_credential_manager“, das sich als legitimes Werkzeug von Microsoft ausgibt. Die beiden anderen Pakete, „Dendreo“ und „fastlane-plugin-run_tests_firebase_testlab“, waren über Jahre nicht mehr aktualisiert worden, bevor neue bösartige Versionen erschienen. „Dendreo“ war zuletzt am 24. Oktober 2020 aktualisiert worden, „fastlane-plugin-run_tests_firebase_testlab“ blieb seit dem 9. März 2019 inaktiv.
Ein weiteres Merkmal der Kampagne ist laut StepSecurity, dass die neuen Releases direkt in der Registry auftauchten, ohne dass es in den zugehörigen Quellprojekten entsprechende Commits oder Tags gab. Hinzu kommt, dass „git_credential_manager“ als Abhängigkeit in fünf Pakete aufgenommen wurde, darunter auch „Dendreo“ und „fastlane-plugin-run_tests_firebase_testlab“. Dadurch konnte sich die schädliche Nutzlast auch an bestehende Nutzer dieser Pakete verteilen.
Fast alle genannten Pakete mit Ausnahme von „fastlane-plugin-run_tests_firebase_testlab“ werden vom selben Konto „LR-DEV“ gepflegt. Da dieses Gem einem anderen Maintainer, „pinkroom“, zugeordnet ist, halten die Forscher es für wahrscheinlich, dass mehr als ein Konto kompromittiert wurde, um die manipulierten Versionen auf RubyGems zu veröffentlichen.
Ist eines der Pakete installiert, durchsucht die eingebettete Schadsoftware das betroffene System nach rund 30 Umgebungsvariablen. Dazu zählen laut Bericht Variablen im Zusammenhang mit GitHub Actions, GitLab, CircleCI, Travis, Jenkins und Vercel. Wird eine solche Umgebung erkannt, beendet sich der Code sofort. StepSecurity bewertet das als gezielten Versuch, flüchtige CI-Runner zu meiden und stattdessen auf Entwicklerrechnern aktiv zu werden.
Bei „git_credential_manager“ wird der schädliche Code ausgelöst, sobald die Bibliothek eingebunden wird. Anschließend lädt sie von der öffentlichen Forgejo-Instanz „git.disroot[.]org/git-ecosystem“ zwei weitere Komponenten nach: ein Shell-Skript namens „deploy.sh“ sowie eine native Binärdatei, die denselben Namen trägt wie das Werkzeug, als das sich das Gem tarnt. Unter Windows wird die nachgeladene Nutzlast per PowerShell ausgeführt.
Version 2.8.2 dient laut StepSecurity zunächst dazu, die Nutzlasten bereitzustellen. Mit Version 2.8.3 geht der Angriff dann in die nächste Phase über: Das Installationsskript startet die Binärdatei als Hintergrund-Daemon, richtet Persistenz über einen Cron-Eintrag und einen systemd-Benutzerdienst ein und fragt die Gruppen sudo und wheel ab. Kann der Nutzer sudo ohne Passwort ausführen, startet sich das Skript laut StepSecurity erneut mit Root-Rechten. Läuft es als Root, legt es eine setuid-Root-Kopie der System-Shell unter „/usr/local/sbin/ping6“ ab, getarnt als Netzwerkwerkzeug.
StepSecurity rät Nutzern, die eines der betroffenen Gems installiert haben, sowohl die betroffenen Rechner als auch zugehörige Geheimnisse als kompromittiert zu betrachten. Empfohlen werden das Entfernen des abgelegten Daemons unter „~/.local/share/gcm/“, das Beseitigen der Persistenzmechanismen, die Prüfung auf eine setuid-Shell unter „/usr/local/sbin/ping6“ sowie der Austausch aller Zugangsdaten.
Aikido-Security-Forscher Charlie Eriksen erklärte, ein RubyGems-Konto, das sechs oder sieben Jahre lang unauffällig geblieben sei, wirke auf niemanden riskant. Genau dieses Profil eigne sich aber zur Übernahme. Daher stamme auch der Name SleeperGem: kein gezielt über lange Zeit angelegtes Angreifer-Asset, sondern ein reales, gewöhnliches Konto, das schlicht inaktiv geworden und harmlos genug erschienen sei, um unbemerkt gekapert zu werden.
Die Veröffentlichung folgt auf weitere Vorfälle rund um RubyGems. Mehr als zwei Monate zuvor hatte RubyGems Registrierungen für neue Konten vorübergehend ausgesetzt, nachdem Angreifer im Rahmen einer koordinierten Spam-Kampagne Dutzende schädliche Pakete veröffentlicht hatten. Zeitgleich meldeten Socket-Forscher eine parallele Kampagne mit 150 Gems, die die Registry als Kanal zum Abfluss von Daten missbrauchten.
In diesem Monat legte zudem Mend.io Details zu einer nicht dokumentierten Supply-Chain-Attacke offen, bei der 14 weitere RubyGems-Pakete zum Speichern gestohlener Zugangsdaten genutzt wurden. Demnach erbeutete eine bösartige Browser-Erweiterung Zugangsdaten über eine lokal erreichbare API, verpackte die Informationen vollständig im Browser mit JavaScript und Standard-Web-APIs in gültige .gem-Dateien und lud diese mit einem fest codierten RubyGems-API-Schlüssel direkt zu RubyGems.org hoch. Maciej Mensfeld zufolge umfasste die Beute Klartext-Passwörter, private SSH-Schlüssel, AWS-Zugangsdaten, Seed-Phrasen von Krypto-Wallets, Sozialversicherungsnummern, Kreditkartennummern und Bankkontodaten aus 63 Tresor-Einträgen. RubyGems sei dabei nicht der Zustellweg gewesen, sondern das Versteck: eine vertrauenswürdige, stark frequentierte Domain, auf der gestohlene Daten zwischen normalen Entwickler-Uploads verborgen lagen, bis die Angreifer sie wieder abholten.
