- Das Bitwarden-CLI-Paket für npm wurde als Teil des laufenden Checkmarx-Lieferkettenangriffs kompromittiert; der bislang bestätigte Wirkungsbereich ist auf den Build
@bitwarden/cli2026.4.0 begrenzt - Der im Paket enthaltene Schadcode
bw1.jsnutzt dieselbe Infrastruktur und Verschleierung wieaudit.checkmarx[.]cx/v1/telemetryund passt zudem zu Hinweisen auf eine CI/CD-Kompromittierung über eine kompromittierte GitHub Action - Zu den Sammelzielen gehören nicht nur GitHub-Tokens, sondern auch AWS-, Azure- und GCP-Zugangsdaten,
.npmrc, SSH-Schlüssel, Umgebungsvariablen sowie Konfigurationsdateien von Claude/MCP - Die exfiltrierten Informationen werden zum Erstellen und Committen öffentlicher GitHub-Repositories, zur Weiterverbreitung per erneuter Veröffentlichung mit npm-Tokens sowie zur Workflow-Injektion genutzt; außerdem sind Persistenzfunktionen wie Änderungen an
~/.bashrcund~/.zshrcenthalten - Organisationen, die Bitwarden CLI verwendet haben, sollten den Vorfall als Offenlegung von Zugangsdaten und CI/CD-Kompromittierung behandeln; wichtig sind die Prüfung von CI-Logs und der Austausch potenziell offengelegter Geheimnisse
Überblick
- Das Bitwarden-CLI-npm-Paket wurde als Teil des laufenden Checkmarx-Lieferkettenangriffs kompromittiert; als betroffene Version wurde bislang
@bitwarden/cli2026.4.0bestätigt- Der Schadcode befand sich in
bw1.js, das im Paket enthalten war - Der Angriffsweg passt zu Hinweisen auf die Nutzung einer kompromittierten GitHub Action innerhalb der CI/CD-Pipeline von Bitwarden und entspricht den Mustern der Kampagne, die auch in anderen Repositories beobachtet wurden
- Der Schadcode befand sich in
- Nach aktuellem Stand ist der bestätigte Umfang auf den Bitwarden-CLI-Build begrenzt; die Kompromittierung folgt dem GitHub-Actions-Lieferkettenvektor, der in der umfassenderen Checkmarx-Kampagne identifiziert wurde
- Betroffen ist nur das CLI-Paket für npm
- Für die Chrome-Erweiterung, den MCP-Server und andere offizielle Distributionen wurde bislang keine Auswirkung bestätigt
- Die Untersuchung läuft weiter; eine vollständige technische Analyse, betroffene Versionen, Kompromittierungsindikatoren und Reaktionsleitlinien sollen noch veröffentlicht werden
- Wer Bitwarden CLI verwendet, sollte CI-Logs prüfen und potenziell offengelegte Geheimnisse austauschen
Technische Analyse
- Die schädliche Payload
bw1.jsteilt die Kerninfrastruktur mit Checkmarx'mcpAddon.js, das am Vortag analysiert wurde- Es wird derselbe C2-Endpunkt
audit.checkmarx[.]cx/v1/telemetryverwendet und die Verschleierung erfolgt mit__decodeScrambledund dem Seed0x3039 - Zusätzlich werden commit-basierte Exfiltration über die GitHub-API sowie Token-Diebstahl und erneute Veröffentlichung über das npm-Register durchgeführt
- Es wird derselbe C2-Endpunkt
- Auch die Struktur der eingebetteten Payload stammt aus derselben Familie
- Innerhalb einer gzip+base64-Struktur befindet sich ein Python-Skript, das den Speicher von GitHub-Actions-
Runner.Workerausliest, um an GitHub-Tokens zu gelangen - Ebenfalls enthalten sind ein
setup.mjs-Loader für erneut veröffentlichte npm-Pakete, GitHub-Actions-Workflow-YAML, ein hart codierter öffentlicher RSA-Schlüssel und eine ideologische Manifest-Zeichenkette
- Innerhalb einer gzip+base64-Struktur befindet sich ein Python-Skript, das den Speicher von GitHub-Actions-
- Der Umfang der Sammlung von Zugangsdaten ist sehr breit
- GitHub-Tokens werden per Speicher-Scraping von
Runner.Workerund aus Umgebungsvariablen gesammelt - AWS-Zugangsdaten werden in Dateien unter
~/.aws/und in Umgebungsvariablen gesucht - Azure-Tokens werden über
azdgesammelt, GCP-Zugangsdaten übergcloud config config-helper - Auch
.npmrc, SSH-Schlüssel, Umgebungsvariablen und Konfigurationsdateien von Claude/MCP gehören zu den Zielen
- GitHub-Tokens werden per Speicher-Scraping von
- Auch die Exfiltrationsmethode über GitHub ist konkret belegt
- Unter dem Konto des Opfers werden öffentliche Repositories erstellt, die dem Dune-Namensschema
{word}-{word}-{3digits}folgen - Verschlüsselte Ergebnisse werden committet, und in die Commit-Nachrichten werden zusammen mit dem Marker
LongLiveTheResistanceAgainstMachinesTokens eingefügt
- Unter dem Konto des Opfers werden öffentliche Repositories erstellt, die dem Dune-Namensschema
- Die Mechanismen zur Ausbreitung in der Lieferkette sind ebenfalls enthalten
- Mit gestohlenen npm-Tokens werden beschreibbare Pakete gesucht und mit eingefügtem preinstall hook erneut veröffentlicht
- GitHub-Actions-Workflows werden injiziert, um weitere Repository-Geheimnisse zu sammeln
- Es gibt einen Kill Switch für russische Locale-Einstellungen
- Beginnt die System-Locale mit
"ru", beendet sich die Malware still - Geprüft werden
Intl.DateTimeFormat().resolvedOptions().localesowie die UmgebungsvariablenLC_ALL,LC_MESSAGES,LANGUAGEundLANG
- Beginnt die System-Locale mit
- Als Laufzeitumgebung wird Bun v1.3.13 verwendet, heruntergeladen von GitHub Releases
Unterschiede zum Checkmarx-Vorfall
bw1.jsenthält zusätzliche Kompromittierungsindikatoren, die in der Dokumentation des Checkmarx-Vorfalls nicht erwähnt wurden- Eine hart codierte Lock-Datei
/tmp/tmp.987654321.lockverhindert parallele Ausführung - Durch Injektion der Payload in
~/.bashrcund~/.zshrcwird Persistenz über Shell-Profile hergestellt - Mit dem Setzen der Repository-Beschreibung auf
Shai-Hulud: The Third Comingund Debug-Zeichenketten wie"Would be executing butlerian jihad!"wird explizites Branding verwendet
- Eine hart codierte Lock-Datei
- Die gemeinsam genutzten Werkzeuge deuten stark auf ein gemeinsames Malware-Ökosystem hin, operative Signaturen erschweren jedoch die Zuschreibung zusätzlich
- Nach Entdeckung des Checkmarx-Angriffs behauptete TeamPCP über das Social-Konto
@pcpcats, dafür verantwortlich zu sein - Die betreffende Malware versuchte, sich mit unauffällig wirkenden Beschreibungen zu tarnen
- Nach Entdeckung des Checkmarx-Angriffs behauptete TeamPCP über das Social-Konto
- Diese Payload tritt öffentlich anders auf
- Ideologische Markierungen wie Repository-Namen mit Shai-Hulud, ein
"Butlerian Jihad"-Manifest und Commit-Nachrichten, die den Widerstand gegen Maschinen propagieren, sind direkt in die Malware eingebettet - Möglich bleiben damit mehrere Erklärungen: ein anderer Betreiber mit gemeinsamer Infrastruktur, eine ideologisch stärkere Abspaltung oder ein Wandel im öffentlichen Auftreten der Kampagne
- Ideologische Markierungen wie Repository-Namen mit Shai-Hulud, ein
Empfehlungen
- Organisationen, die das bösartige Bitwarden-npm-Paket installiert haben, sollten den Vorfall als Offenlegung von Zugangsdaten und CI/CD-Kompromittierung behandeln
- Das betroffene Paket sollte auf Entwicklerrechnern und in Build-Umgebungen sofort entfernt und alle Zugangsdaten ersetzt werden, die in diesen Umgebungen offengelegt worden sein könnten
- Dazu gehören GitHub-Tokens, npm-Tokens, Cloud-Zugangsdaten, SSH-Schlüssel und CI/CD-Geheimnisse
- In GitHub sollten unautorisierte Repository-Erstellungen und auffällige Workflows geprüft werden
- Es sollten unerwartete Dateien unter
.github/workflows/, verdächtige Workflow-Ausführungen, Artifact-Downloads und öffentliche Repositories mit dem Dune-Namensschema{word}-{word}-{3digits}überprüft werden - Bei möglicher Betroffenheit sollten neu veröffentlichte Repositories auf die folgenden Schlüsselwörter geprüft werden
atreidescogitorfedaykinfremenfutargesseritgholaharkonnenheighlinerkanlykralizeclasgunlazamelangementatnavigatorornithopterphibianpowindahpranaprescientsandwormsardaukarsayyadinasietchsiridarsligstillsuitthumpertleilaxu
- Es sollten unerwartete Dateien unter
- In npm sollte auf unautorisierte Veröffentlichungen geprüft werden
- Es sollten nicht genehmigte Publishes, Versionsänderungen und neu hinzugefügte Installations-Hooks kontrolliert werden
- In Cloud-Umgebungen sollten die Zugriffslogs erneut überprüft werden
- Nachvollzogen werden müssen ungewöhnliche Zugriffe auf Geheimnisse, Token-Nutzung und neu ausgestellte Zugangsdaten
- Auf Endpunkten und Runnern sollten die beobachtete Exfiltrationsinfrastruktur und Spuren von Dateizugriffen verfolgt werden
- Es sollte nach ausgehenden Verbindungen zu
audit[.]checkmarx[.]cxgesucht werden - Es sollte geprüft werden, ob Bun-Ausführung in sonst unüblichen Umgebungen stattgefunden hat
- Zu untersuchen sind Zugriffe auf
.npmrc,.git-credentials,.env, Cloud-Speicherorte für Zugangsdaten sowiegcloud,azundazd - Auch das Vorhandensein von
/tmp/tmp.987654321.locksowie Änderungen an~/.bashrcund~/.zshrcsollten geprüft werden
- Es sollte nach ausgehenden Verbindungen zu
- In GitHub Actions sollte untersucht werden, ob unautorisierte Workflows erstellt wurden
- Es muss geprüft werden, ob Workflows in temporären Branches angelegt wurden
- Ebenfalls sollte kontrolliert werden, ob Artifacts wie
format-results.txterzeugt oder heruntergeladen wurden
- Langfristig sollte der Schadensradius künftiger Lieferkettenvorfälle verringert werden
- Token-Berechtigungen sollten minimiert und nach Möglichkeit kurzlebige Zugangsdaten verwendet werden
- Rechte zum Erstellen und Veröffentlichen von Paketen sollten eingeschränkt und GitHub-Actions-Berechtigungen verschärft werden
- Unnötiger Artifact-Zugriff sollte deaktiviert und öffentliche Repositories oder Workflow-Änderungen außerhalb des regulären Release-Prozesses überwacht werden
Kompromittierungsindikatoren
-
Bösartiges Paket
-
Netzwerkindikatoren
94[.]154[.]172[.]43https://audit.checkmarx[.]cx/v1/telemetry
-
Dateisystemindikatoren
/tmp/tmp.987654321.lock/tmp/_tmp_<Unix Epoch Timestamp>/package-updated.tgz
1 Kommentare
Hacker-News-Kommentare
Ich frage mich, ob es eine bessere Verteidigung gibt als eine minimale Wartezeit vor Releases
Schon wenn man nur
min-release-age=7in.npmrcgesetzt hätte, hätten die 334 Personen, die@bitwarden/cli 2026.4.0erhalten haben, das vor etwa 19 Stunden hochgeladen und später als bösartig erkannt wurde, es wohl vermeiden könnenÄhnlich passt das auch ziemlich gut auf die Fälle
axios,ua-parser-jsundnode-ipc; gegen lange schwelende Fälle wieevent-streamhilft es zwar nicht, aber gegen die meisten akuten Supply-Chain-Angriffe scheint es wirksam zu seinEs gibt Beispielkonfigurationen, wie man für npm/pnpm/bun/uv jeweils eine Wartezeit setzt, und weil es kein One-Click-Tool zum Prüfen und Anwenden gab, habe ich selbst https://depsguard.com gebaut
Ich habe gerade auch https://cooldowns.dev entdeckt, das eine ähnliche Idee hat
Das setzt nicht nur eine minimale Release-Wartezeit, sondern prüft als Wrapper um npm/uv usw. vor der Installation jede Abhängigkeit gegen eine kommerzielle Schwachstellen-Datenbank und auf bekannte Probleme oder verdächtige Signale
In der Realität aktualisiert zwar immer irgendjemand sofort, aber der ganze Prozess, durch den solche Vorfälle auffliegen, scheint auch davon abzuhängen, dass einige Nutzer sehr schnell updaten
Wenn man Register-Binärdateien unverändert ziehen muss, kann ein Cooldown das Risiko etwas senken
Für die langen Randfälle, in denen auch GitHub kompromittiert wurde, braucht man wohl eine Kombination aus Commit-/Maintainer-Heuristiken und KI-basierter Analyse von Codeänderungen, mit menschlicher Prüfung bei Auffälligkeiten
Zur Einordnung: Ich arbeite dort
Der Kern dieses Vorfalls ist, dass die Build-Pipeline kompromittiert wurde und dadurch verunreinigte Pakete verteilt wurden
Wenn man geschäftskritische Dinge auf npm aufsetzt, sollte man Abhängigkeiten trotzdem unbedingt pinnen
Viele Entwickler halten ein Lockfile für ausreichend, aber wenn
^-Bereiche übrig bleiben, kann ein Lockfile-Update neue Versionen hereinziehen, die ich nicht ausdrücklich ausgewählt habeBei Systemen, die den Fortbestand eines Unternehmens beeinflussen können, ist dieser Aufwand es wert
https://github.com/doy/rbw ist eine Rust-Alternative zur Bitwarden CLI
Das Rust-Ökosystem wirkt auch zunehmend so, als würde es wie npm mit großen und tiefen Abhängigkeitsbäumen werden, aber man muss immer noch deutlich weniger Autoren vertrauen als in typischen JavaScript-Fällen
Immerhin sind die Versionen dort gepinnt
rbw + vaultwardenfunktioniert ziemlich gut als selbst hostbare Rust-Version von BitwardenOder es geht in die andere Richtung und mehr Funktionalität wandert in die Standardbibliotheken der Sprachen
Meine Erfahrung mit der Bitwarden-CLI war sehr schlecht
Ich habe
bw listausgeführt und dachte, es würde nur die Namen der Passwörter anzeigen, tatsächlich wurden aber alle Passwörter und sogar die aktuellen TOTP-Codes ausgegebenNoch schlimmer: Als ich per ssh auf den Server ging und weechat in tmux öffnete, war der komplette Inhalt des
bw-Befehls über die weechat-Eingabeverlaufshistorie zugänglichIch habe keine Ahnung warum; es blieb über tmux- und weechat-Sitzungen hinweg bestehen und verschwand erst nach einem Neustart des Servers
Danach habe ich die
bw-CLI sofort gelöscht und werde sie nicht wieder installierenZur Einordnung: Ich nutze ghostty als Terminal
Ich frage mich, ob es eine
bwcli-Erweiterung für weechat gibt; dass Bitwarden überhaupt eine CLI hat, höre ich gerade zum ersten MalIch nutze lokal KeePass
Die CLI habe ich nie benutzt, aber das Browser-Plugin verwende ich
Wenn das kompromittiert wird, wäre das wirklich schlimm, und ich weiß nicht, was man dagegen tun soll
Ich überlege, ob es die richtige Antwort ist, dauerhaft eine verifizierte ältere Version zu verwenden
Es fühlt sich plötzlich merkwürdig an, dass ein großer Teil meines Lebens davon abhängt, dass diese Geheimnisse geheim bleiben
Deshalb nutze ich Passwortmanager-Browser-Erweiterungen grundsätzlich nicht
Nachdem ich früher einmal ein Produkt mit Sicherheitsproblemen in der Browser-Integration gesehen habe, meide ich das komplett; iOS-Integration vertraue ich etwas mehr, bleibe aber vorsichtig
Also in Entwickler-Paketmanagern, OS-Paketmanagern, Browser-Erweiterungen und sogar bei automatischen Updates eigenständiger Apps
Firmen wie Socket brauchen Zeit, um bösartige Updates zu erkennen; wenn alle schon wenige Minuten nach Veröffentlichung herunterladen, wird solche Erkennung sinnlos
Ich kann dieses Setup nur empfehlen
Der Titel hat mich kurz erschreckt, aber ich habe das Gefühl, alles Vernünftige zu tun, ohne paranoide Züge anzunehmen
https://cooldowns.dev
https://depsguard.com
Das zweite pflege ich; hätte ich das erste früher gekannt, hätte ich es wahrscheinlich gar nicht gebaut
Beide machen fast dasselbe, nur meine Variante ist mit Rust vielleicht etwas übertrieben
Das Wichtigste hier ist, dass ein npm install schon ausreichte
Wenn der Kompromittierungspunkt
preinstallist, bricht die verbreitete Annahme zusammen, man könne ja nach der Installation prüfenZu diesem Zeitpunkt hatte die Payload schließlich bereits Gelegenheit zur Ausführung
Besonders interessant ist das in Agenten-, CI- und ephemeren Sandbox-Umgebungen: Selbst wenn die Expositionszeit kurz ist, reicht es aus, wenn Installationen automatisch wiederholt werden
Bemerkenswert ist auch, dass diese Payload nicht nur auf Geheimnisse zielte, sondern auch auf Konfigurationen von KI-Tooling
Die Manipulation von Shell-Profilen könnte realistisch ein Weg sein, den Kontext zu vergiften, den der nächste Coding-Assistent einliest
Diese Perspektive habe ich zusammen mit der AgentSH-Arbeit ausführlicher hier beschrieben: https://www.canyonroad.ai/blog/the-install-was-the-attack/
Am Ende führt man sowieso das eigentliche Binärprogramm aus
Und wenn man es genau nehmen will, könnte man Pakete auch vor der Installation manuell herunterladen und prüfen; wenn man die Garantien und den Geltungsbereich des Installers nicht sehr genau versteht, ist es eigentlich noch seltsamer, dem Herunterladen und Entpacken von Schadcode halb blind zu vertrauen
Ein Kill Switch für russische Locale — das wirkt zugleich dreist und feige
Discretion is the better part of valorKurz gesagt wirkt es wie die Haltung: sich nicht selbst ins Bein schießen
In den
Vault7-Leaks stand auch, dass NSA und CIA solche Spuren absichtlich hinterlassen, um die Herkunft zu verschleiern, und auch andere staatliche Akteure würden so etwas durchaus einsetzenEs sieht nach einer allzu offensichtlichen Irreführungsspur aus, erzeugt aber gleichzeitig stark den Eindruck staatlicher Beteiligung
Als KeePass-Nutzer lebt es sich mit deutlich weniger Stress
Schon in den letzten fünf Jahren habe ich mit KeePass auf lokaler Infrastruktur mehrere Sicherheitsvorfälle vermieden
Dasselbe könnte bei einem KeePass-Zugriffstool theoretisch auch passieren; ich sehe also nicht genau, was daran grundlegend anders sein soll
Ich dachte bisher, das sei nicht möglich, habe es aber ehrlich gesagt nie tief untersucht
Was passiert etwa, wenn zwei Geräte offline jeweils ein Passwort hinzufügen und später wieder online gehen?
Wenn man das Backup verschlüsselt, wo speichert man dann dieses Passwort, und wo wiederum das Passwort des Cloud-Anbieters?
Besonders beeindruckend an diesem Angriff ist, dass die Angreifer das Timing genau auf einen Moment abstimmen mussten, in dem GitHub nicht ausgefallen war
https://mrshu.github.io/github-statuses/
Deshalb verwende ich überhaupt keinen Passwortmanager eines Drittanbieters
Denn man muss dauerhaft darauf vertrauen, dass jemand Dinge wie Sicherheit, Updates und Backups ordentlich erledigt
Ich habe stattdessen selbst einen zustandslosen Passwortgenerator gebaut, wodurch ich keinerlei Daten-Backups oder Synchronisierung zwischen Geräten brauche
Man gibt ein sehr langes und starkes Master-Passwort, den Servicenamen und den Benutzernamen ein, und daraus wird mit passenden Parametern ein scrypt-Hash berechnet, der Brute-Force praktisch unmöglich macht
Für wichtige Konten nutze ich zusätzlich 2FA