
CVE-2026-33634 (CVSS 9.4) — Der bisher folgenreichste CI/CD-Supply-Chain-Angriff des Jahres 2026.
CVE-2026-33634 (CVSS 9.4) — Der bisher folgenreichste CI/CD-Supply-Chain-Angriff des Jahres 2026.
Zwischen dem 19. und 25. März 2026 führte der Bedrohungsakteur TeamPCP (auch bekannt als DeadCatx3, PCPcat, ShellForce, CanisterWorm) eine kaskadenartige Supply-Chain-Kompromittierung über fünf Ökosysteme aus: GitHub Actions, Docker Hub, OpenVSX, npm und PyPI. Ausgehend von einem einzigen unvollständig rotierten GitHub-PAT breitete sich die Kampagne über zwei große Open-Source-Sicherheitsanbieter (Aqua Security und Checkmarx), vier GitHub-Actions-Repositories, zwei VS-Code-Erweiterungen, Container-Registries und 66+ npm-Pakete aus.
Dieses Repository bietet eine vollständige technische Aufschlüsselung, kuratierte IOC-Listen (FP-getestet) und sofort einsetzbare Erkennungsabfragen für Microsoft Defender XDR.
| Datum (UTC) | Ereignis |
|---|---|
| 20. Feb. 2026 | Konto hackerbot-claw erstellt; beginnt mit dem Scannen von Repos nach ausnutzbaren pull_request_target-Workflows |
| 28. Feb. 2026 | Erste Trivy-Kompromittierung über PWN-Request; Anmeldeinformationen exfiltriert |
| 1. März 2026 | Aqua Security versucht Eindämmung — Credential-Rotation unvollständig |
| 19. März, 17:43 | Hauptschlag: TeamPCP pusht per Force-Push 75/76 Tags in aquasecurity/trivy-action + alle 7 Tags in setup-trivy über das kompromittierte Dienstkonto aqua-bot |
| 19. März, 18:22 | Hintertür-Version von Trivy v0.69.4 auf GitHub Releases, Docker Hub, GHCR, ECR veröffentlicht |
| 20. März, 05:40 | Kompromittierungsfenster von trivy-action schließt (~12 Stunden) |
| 20. März, 20:45 | CanisterWorm bei der Verbreitung über npm erkannt — 47+ Pakete kompromittiert |
| 22. März, 20:31 | TeamPCP verunstaltet alle 44 Repos in der GitHub-Organisation aquasec-com in einem skriptgesteuerten 2-Minuten-Burst |
| 22. März | Docker-Hub-Images 0.69.5 und 0.69.6 mit demselben Stealer-Payload gepusht |
| 23. März, 02:53 | Checkmarx-Welle beginnt: Bösartige ast-results v2.53.0 und cx-dev-assist v1.7.0 über das Konto ast-phoenix auf OpenVSX veröffentlicht |
| 23. März, 12:58 | Alle 35 Tags von Checkmarx/kics-github-action per Force-Push über das kompromittierte Konto cx-plugins-releases gepusht |
| 23. März, 15:41 | Checkmarx meldet OpenVSX-Problem als behoben |
| 23. März, 16:50 | KICS GitHub Action nach Nutzermeldung vom Netz genommen |
| 23. März, 22:25 | Sysdig meldet, dass Checkmarx/ast-github-action v2.3.28 ebenfalls kompromittiert ist |
| 24. März, 08:30 | LiteLLM-Welle: Trojanisierte litellm v1.82.7 und v1.82.8 mit gestohlenen Anmeldeinformationen auf PyPI veröffentlicht |
| 24. März, 11:25 | PyPI stellt bösartige LiteLLM-Versionen unter Quarantäne |
Grundursache: unvollständige Credential-Rotation nach dem Vorfall vom 28. Februar. Das PAT des Dienstkontos aqua-bot wurde entweder nicht widerrufen, oder der Angreifer hat das neue Token während der Rotation beobachtet.
TeamPCP nutzte diesen verbleibenden Zugriff, um Versionstags per Force-Push auf bösartige Impostor-Commits zu setzen. Jeder gefälschte Commit übernahm die Metadaten des Originals (Autor, Zeitstempel, Nachricht), während das Einstiegspunkt-Skript durch das Stealer-Payload ersetzt wurde. Die GitHub-Release-Seite zeigte keine sichtbare Veränderung — sogar das Abzeichen „Immutable“ wurde normal angezeigt.
Der Stealer — ein 204-zeiliges entrypoint.sh, das sich selbst als „TeamPCP Cloud stealer“ identifiziert — führt einen dreistufigen Angriff aus:
Stufe 1: Speicher-Scraping
Reads /proc/<pid>/mem from Runner.Worker processes
Searches for pattern: {"value":"<secret>","isSecret":true}
Extracts GitHub PATs, cloud credentials, API keys from runner memory
Stufe 2: Dateisystem-Credential-Sweep
Durchsucht 50+ sensible Pfade, darunter:
~/.ssh/*)~/.npmrc).env-DateienStufe 3: Verschlüsselte Exfiltration
tpcp.tar.gzcurl POST an anbieterspezifische Typosquat-DomainsGITHUB_TOKEN ein Repo tpcp-docs oder docs-tpcp im GitHub-Konto des OpfersAuf Linux-Systemen außerhalb von CI führt die Malware Folgendes aus:
~/.config/sysmon/sysmon.py)Gestohlene Anmeldeinformationen aus der Trivy-Welle ermöglichten die Kompromittierung des Checkmarx-Ökosystems. Jede neue Welle nutzte eine andere Typosquat-C2-Domain, um Blocklisten der vorherigen Welle zu umgehen:
| Welle | C2-Domain | Typosquat von |
|---|---|---|
| Trivy | scan.aquasecurtiy[.]org | aquasecurity.org |
| Checkmarx/KICS | checkmarx[.]zone | checkmarx.com |
| LiteLLM | models.litellm[.]cloud | litellm.ai |
| Repository | Kompromittierte Tags | Offenlegungsfenster (UTC) | Einstiegspunkt |
|---|---|---|---|
aquasecurity/trivy-action | 75 von 76 (sicher: 0.35.0) | 19. März 17:43 – 20. März 05:40 | entrypoint.sh |
aquasecurity/setup-trivy | Alle 7 Tags | 19. März 17:43 – 21:44 | action.yaml |
Checkmarx/kics-github-action | Alle 35 Tags | 23. März 12:58 – 16:50 | setup.sh |
Checkmarx/ast-github-action | v2.3.28 (vermutlich alle) | 23. März ~22:25+ | setup.sh |
| Erweiterung | Bösartige Version | Sichere Version |
|---|---|---|
checkmarx.ast-results | 2.53.0 | >= 2.56.0 |
checkmarx.cx-dev-assist | 1.7.0 | >= 1.10.0 |
Beide Erweiterungen wurden am 23. März um 12:53 UTC im Abstand von 12 Sekunden über das Konto ast-phoenix veröffentlicht. Bei Aktivierung prüft environmentAuthChecker.js auf Anmeldeinformationen von Cloud-Anbietern und lädt anschließend einen Stealer der zweiten Stufe von checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz.
| Image | Bösartige Tags |
|---|---|
docker.io/aquasec/trivy | 0.69.4, 0.69.5, 0.69.6 |
ghcr.io/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
public.ecr.aws/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
| Paket | Versionen | Hintertür-Datei |
|---|---|---|
litellm | 1.82.7, 1.82.8 | litellm/proxy/proxy_server.py |
Dreifach verschachteltes Base64-Payload mit K8s-Toolkit für laterale Bewegung. Persistenz über sysmon.service, das checkmarx.zone/raw abfragt.
Das Exfiltrationsmuster ist über alle Wellen hinweg identisch: