Laut Sysdig zielt der „TeamPCP Cloud stealer" auf Zugangsdaten und Geheimnisse zu SSH-Schlüsseln, Git, Amazon Web Services (AWS), Google Cloud, Microsoft Azure, Kubernetes, Docker, .env-Dateien, Datenbanken und VPNs ab. Hinzu kommen CI/CD-Konfigurationen, Daten aus Kryptowährungs-Wallets sowie Webhook-URLs von Slack und Discord.

Wie schon bei Trivy erzwingen die Angreifer per Force-Push das Setzen von Tags auf bösartige Commits, die die Stealer-Nutzlast („setup.sh") enthalten. Die gestohlenen Daten werden als verschlüsseltes Archiv („tpcp.tar.gz") an die Domain „checkmarx[.]zone" (IP-Adresse 83.142.209[.]11:443) ausgeleitet. Neu ist, dass der Stealer mit dem GITHUB_TOKEN des Opfers ein Repository namens „docs-tpcp" anlegt, um die Daten zu sichern, falls die Übertragung an den Server scheitert; im Trivy-Fall hieß dieses Repository noch „tpcp-docs".

Die Verwendung herstellerspezifischer Typosquat-Domains für jede vergiftete Action wertet Sysdig als bewusste Täuschung: Ein Analyst, der CI/CD-Protokolle prüfe, sehe curl-Verkehr zu einer Domain, die wie die eigene Hersteller-Domain der Action aussehe – was eine manuelle Entdeckung unwahrscheinlicher mache.

Weil der Stealer Zugangsdaten aus dem Speicher des CI-Runners abgreift, können die Betreiber persönliche Zugangstoken (PATs) und weitere Geheimnisse abschöpfen, sobald eine kompromittierte Trivy-Action in einem Workflow ausgeführt wird. Verfügen diese Token über Schreibrechte auf Repositories, die ebenfalls Checkmarx-Actions nutzen, lässt sich darüber Schadcode einschleusen. So entsteht eine kaskadierende Supply-Chain-Kompromittierung, bei der eine vergiftete Action Geheimnisse erbeutet, mit denen sich weitere Actions vergiften lassen. Identische Nutzlast, identisches Verschlüsselungsschema und die Namenskonvention „tpcp.tar.gz" bestätigen laut Sysdig, dass es sich um denselben Akteur handelt. Code-Review und Dependency-Scanning hätten hier versagt, weil der Schadcode direkt an der Quelle in eine vertrauenswürdige Action eingeschleust wurde.

Nach Erkenntnissen von Wiz erfolgte der Angriff über die Kompromittierung des Dienstkontos „cx-plugins-releases". Die Angreifer veröffentlichten zudem trojanisierte Versionen der Open-VSX-Erweiterungen „ast-results" (Version 2.53.0) und „cx-dev-assist" (Version 1.7.0); die Fassungen im VS Code Marketplace seien nicht betroffen. Nach der Aktivierung prüft die Nutzlast, ob das Opfer über Zugangsdaten für mindestens einen Cloud-Anbieter wie GitHub, AWS, Google Cloud oder Microsoft Azure verfügt, und lädt bei Fund eine weitere Stufe von „checkmarx[.]zone" nach.

Die Wiz-Forscher Rami McCarthy, James Haughom und Benjamin Read berichten, dass die Nutzlast über npx, bunx, pnpx oder yarn dlx ausgeführt werde, womit die wichtigsten JavaScript-Paketmanager abgedeckt seien. Das nachgeladene Paket enthalte einen umfassenden Credential-Stealer; die erbeuteten Daten würden verschlüsselt und als „tpcp.tar.gz" an „checkmarx[.]zone/vsx" ausgeleitet. Auf Nicht-CI-Systemen richte die Malware über einen systemd-Benutzerdienst Persistenz ein. Das Skript frage alle 50 Minuten „https://checkmarx[.]zone/raw" nach weiteren Nutzlasten ab und verfüge über einen Notausschalter, der abbreche, wenn die Antwort „youtube" enthalte – derzeit verweise der Link auf den Queen-Titel „The Show Must Go On".

In den Tagen nach dem ursprünglichen Einbruch haben TeamPCP-Akteure bösartige Docker-Images von Trivy mit demselben Stealer verbreitet und die GitHub-Organisation „aquasec-com" des Unternehmens gekapert, um Dutzende interne Repositories zu manipulieren. Beobachtet wurde außerdem ein Angriff auf Kubernetes-Cluster mit einem Shell-Skript, das alle Maschinen löscht, sobald es Systeme mit iranischer Zeitzone und Spracheinstellung erkennt.