Hijacking des Bitwarden-CLI-npm-Pakets – groß angelegter Diebstahl von Entwickler-Zugangsdaten entdeckt
(research.jfrog.com)Das Sicherheitsteam von JFrog hat entdeckt, dass die npm-Version @bitwarden/cli 2026.4.0 gekapert wurde. Dabei wurden die legitimen Bitwarden-Metadaten und das Branding unverändert beibehalten, während nur das preinstall-Skript und der bw-Binär-Einstiegspunkt durch einen bösartigen Loader (bw_setup.js) ersetzt wurden.
Funktionsweise
Bei der Installation lädt der Loader zunächst die Bun-Runtime von GitHub herunter und führt anschließend eine verschleierte JavaScript-Payload (bw1.js) aus. Die Nutzung von Bun statt Node.js ist selbst eine Strategie zur Umgehung der Erkennung.
Die Payload sammelt über drei verschiedene Sammler in großem Umfang Zugangsdaten aus Entwickler-Workstations und CI-Umgebungen.
- Dateisystem-Sammler: SSH-Schlüssel (
~/.ssh/), Git-Anmeldedaten (.git-credentials), npm-Tokens (~/.npmrc),.env, AWS-Zugangsdaten (~/.aws/credentials), GCP-Credentials (~/.config/gcloud/credentials.db) usw. - Shell-/Umgebungs-Sammler: Ausführung des Befehls
gh auth token, Scannen vonprocess.envzur Mustererkennung für GitHub- und npm-Tokens - GitHub-Actions-Sammler: Injektion von Workflows in Repositories mit Token-Berechtigungen, um auch Actions-Secrets zu extrahieren
Besonders bemerkenswert ist, dass sogar Konfigurationsdateien von AI-Tools und MCP wie ~/.claude.json, ~/.claude/mcp.json, ~/.kiro/settings/mcp.json usw. zu den Sammelzielen gehören.
Doppelter Exfiltrationspfad
Die gestohlenen Daten werden nach gzip-Komprimierung über eine hybride Verschlüsselung mit AES-256-GCM + RSA-OAEP übertragen.
- Primärer Pfad: HTTPS-POST an
audit.checkmarx.cx/v1/telemetry(getarnt als legitimer Sicherheitsdienst) - Sekundärer Pfad (Missbrauch von GitHub): Falls der primäre Pfad fehlschlägt, wird aus GitHub-Commit-Messages ein doppelt Base64-kodiertes PAT anhand des Markers
LongLiveTheResistanceAgainstMachinesgesucht und extrahiert. Über den Markerbeautifulcastleund die Prüfung einer RSA-Signatur wird außerdem dynamisch eine alternative Exfiltrations-Domain wiederhergestellt. Schließlich wird im GitHub-Konto des Opfers ein neues Repository erstellt und das verschlüsselte JSON in das Verzeichnisresults/hochgeladen.
Erkennung einer Infektion
Die eingebetteten legitimen Bitwarden-CLI-Metadaten tragen die Version 2026.3.0, während das Paket-Root auf 2026.4.0 gesetzt ist. Das wird als Hinweis gewertet, dass die bösartige Schicht außerhalb der normalen Build-Pipeline aufgebracht wurde.
Gegenmaßnahmen
Wenn diese Version installiert wurde, muss davon ausgegangen werden, dass sämtliche Zugangsdaten auf dem betreffenden Host abgeflossen sind.
npm uninstall -g @bitwarden/cliund Cache bereinigen- GitHub-PATs, npm-Tokens und AWS-Access-Keys vollständig rotieren
- Audit-Logs von Azure Key Vault / GCP Secret Manager prüfen
- In GitHub-Actions-Workflows nach nicht autorisierten Ausführungen suchen
audit.checkmarx.cxund94.154.172.43im Netzwerk blockieren- Prüfen, ob sensible Informationen in Konfigurationsdateien von AI-Tools (Claude, Kiro usw.) offengelegt wurden
Es handelt sich um einen ausgefeilten Angriff, der über einen gewöhnlichen npm-Credential-Stealer hinausgeht und Supply-Chain-Kompromittierung, mehrstufigen Diebstahl von Secrets und die Bewaffnung der GitHub-Infrastruktur kombiniert.
4 Kommentare
> THE MOST TRUSTED PASSWORD MANAGER
> Schützen Sie sich vor Hackern und Datenpannen
Der Slogan auf der Unternehmenswebsite wirkte auf mich bedeutungslos, daher habe ich mein Konto gelöscht.
Gruselig ;; Ich habe das täglich benutzt, und glücklicherweise war die Homebrew-Seite wohl nicht betroffen.
Puh … Ich sollte wohl erst mal alle globalen npm-Bibliotheken entfernen oder pre/postinstall deaktivieren.
Homebrew hat
postinstallinzwischen standardmäßig deaktiviert und lässt es nur noch ausnahmsweise zu. Wenn man es so sagen will, hatte ich Glück: Da ich Updates nicht über npm, sondern anhand von Repo-Tags verfolge, habe ich diese Version übersprungen. In letzter Zeit gibt es außerdem wohl auch eine npm-Cooldown-Phase, daher wäre es vermutlich selbst dann nicht verteilt worden, wenn ich auf npm geschaut hätte.Wow, das ist schon ziemlich schockierend.