Attacco Multistadio alla Supply Chain CI/CD e Iniezione di Codice Malevolo (BL01/260327/CSIRT-ITA)
Data:
27 Marzo 2026
Impatto Sistemico
Critico (81.28)
Sintesi
È in corso un’estesa campagna di compromissione della supply chain software di Aqua Security perpetrata dal gruppo criminale TeamPCP. L’attacco portato alla compromissione di strumenti di sicurezza e infrastrutture di sviluppo distribuiti a livello globale, inclusi Aqua Trivy, Checkmarx KICS e BerriAI LiteLLM. L’obiettivo dell’attacco consiste nell’esfiltrazione su larga scala di credenziali cloud, chiavi SSH e token di accesso direttamente dagli ambienti di Continuous Integration e Continuous Deployment (CI/CD).
Tipologia
- Remote Code Execution
Descrizione
L’analisi di questa campagna evidenzia lo sfruttamento sistematico di vulnerabilità nelle architetture CI/CD (CVE-2026-26189) e nelle procedure di rotazione delle credenziali (CVE-2026-33634) delle organizzazioni interessate. La catena di compromissione si articola attraverso gli eventi riportati di seguito.
Impatti
La campagna, orchestrata dall’attore malevolo TeamPCP , costituisce una violazione strutturale e sistematica della catena di distribuzione software (Supply Chain). L’offensiva ha sfruttato la mutabilità intrinseca dei tag Git [1] al fine di iniettare artefatti malevoli in strumenti di sicurezza standard del settore, quali Aqua Trivy e Checkmarx KICS , oltre alla libreria LiteLLM .
Tecnicamente, l’intrusione si è concretizzata tramite il repointing dei tag di versione verso commit malevoli orfani, spesso occultati mediante commit spoofing per simulare l’identità di contributori legittimi. Il vettore primario di compromissione risiede nell’esecuzione di un credential stealer avanzato all’interno dei runner CI/CD . A differenza dei malware tradizionali, il payload opera tramite il memory scraping del processo operativo (Runner.Worker), analizzando direttamente il percorso di sistema /proc/<pid>/mem per estrarre in chiaro segreti (chiavi cloud AWS/GCP/Azure , chiavi SSH, token Kubernetes).
La campagna interessato anche l’ecosistema Python, compromettendo il pacchetto LiteLLM su PyPI tramite credenziali rubate durante le scansioni malevole condotte con versioni modificate di Trivy. La pubblicazione del pacchetto LiteLLM compromesso ha esteso ulteriormente il raggio d’azione della campagna.
L’evoluzione della campagna in è sfociata nella distribuzione del malware CanisterWorm che ha introdotto una capacità auto-propagante avanzata: il furto di token di pubblicazione ha permesso l’infezione automatica di namespace verificati sul registro npm (tra cui @EmilGroup e @opengov). La persistenza strategica dell’attaccante è stata garantita da due fattori chiave:
- Infrastruttura C2 Decentralizzata: l’uso di Internet Computer (ICP) Canisters per il Comando e Controllo ha reso l’esfiltrazione resiliente ai tentativi di takedown e difficilmente distinguibile dal traffico cloud legittimo.
- Bonifica Non Atomica: la mancata simultaneità nella revoca e rotazione delle credenziali iniziali ha permesso agli aggressori di mantenere un accesso residuo , intercettando i nuovi segreti nel momento esatto della loro generazione e distribuzione.
Conclusioni
In base alle analisi riportate, la compromissione perpetrata da TeamPCP rappresenta una minaccia sistemica e persistente per le infrastrutture cloud-native a livello globale. L’attore ha dimostrato un’elevata versatilità tattica e una costante rapidità nella rotazione delle infrastrutture di Comando e Controllo (C2), confermando che la campagna è tuttora in fase operativa.
Stando alle rivendicazioni del gruppo risulterebbero essere stati esfiltrati complessivamente oltre 300 GB di credenziali in formato compresso. Di questi, 54 GB risultano riconducibili esclusivamente all’incidente che ha coinvolto l’ecosistema LiteLLM, come rivendicato pubblicamente dagli stessi aggressori.
Prodotti e versioni affette
Aqua Trivy (binarii e immagini container), versioni:
- 0.69.4
- 0.69.5
- 0.69.6
Estensioni OpenVSX
- cx-dev-assist v1.7.0
- ast-results v2.53.0
BerriAI LiteLLM (PyPI), versioni:
- 1.82.7
- 1.82.8
GitHub Actions (Aqua)
- aquasecurity/trivy-action: tag di rilascio (es. 2, 0.12.0) manipolati per indirizzare l’esecuzione verso commit malevoli non presenti nella cronologia ufficiale
- aquasecurity/setup-trivy: tag compresi nell’intervallo tra 0.2.0 e 0.2.6
Checkmarx KICS/AST:
- KICS GitHub Actions: tag di versione (35) identificati tra v1 e v2.1.20.
- AST GitHub Action: versione v2.3.28
Azioni di mitigazione
Gli utenti e le organizzazioni possono far fronte a questa tipologia di attacchi valutando l’implementazione delle misure di mitigazione raccomandate riportate di seguito.
Bonifica Immediata della Supply Chain (GitHub & npm)
- Pinning crittografico : sostituire tempestivamente ogni riferimento a tag mutabili (es. @v2 , @latest ) con l’hash SHA-256 del commit nei workflow GitHub Actions.
- Audit dei Namespace npm : verificare la presenza di dipendenze appartenenti ai namespace @EmilGroup , @opengov , @teale.io , @pypestream , @virtahealth e @leafnoise . Qualsiasi versione pubblicata tra il 19 e il 26 marzo 2026 deve essere considerata malevola.
- Integrità dei Lockfile : imporre l’uso di npm ci (o yarn install –frozen-lockfile ) in tutte le pipeline per impedire l’aggiornamento automatico a versioni “manipolate” durante la build.
Gestione delle Credenziali e delle Chiavi
- Invalidazione e Rotazione delle Chiavi : ogni chiave SSH, API key e credenziale cloud (AWS, GCP, Azure) che sia utilizzata su runner compromessi deve essere revocata. La semplice rotazione è inutile qualora la vecchia chiave non sia stata invalidata prima della generazione della nuova (rischio di intercettazione persistente).
- Revoca dei Token di Pubblicazione : invalidare tempestivamente i token NPM_TOKEN e PYPI_TOKEN : questi ultimi non sono chiavi crittografiche ma token di accesso; la loro compromissione permette al worm di auto-pubblicarsi su nuovi pacchetti.
Restrizioni di Rete e Blocchi IoC (Network Hardening)
- Blocco Canister ICP : interdire a livello perimetrale le connessioni verso *.raw.icp0.io . Nello specifico, l’ID di esfiltrazione tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io dovrebbe essere inserito in blacklist.
- Blacklist Domini C2 : bloccare il traffico verso checkmarx.zone , models.litellm.cloud e i domini di typosquatting rilevati.
- Monitoraggio SIEM : si raccomanda di verificare eventuali anomalie nel traffico di rete nell’arco temporale di eventuali esecuzioni di pipeline compromesse.
Hardening delle Pipeline CI/CD
- Disabilitazione pull_request_target : eliminare questa tipologia di workflow per contributori esterni (è il punto di ingresso che ha permesso il furto iniziale del PAT di Aqua Security).
- Isolamento dei Runner : implementare runner ” ephemeral ” (usa e getta) e isolati dalla rete aziendale interna. Limitare l’accesso ai segreti solo ai job che ne hanno strettamente bisogno tramite l’uso di Environment Secrets con approvazione manuale.
- Monitoraggio dei Processi : Implementare strumenti di Runtime Security sui runner per rilevare tentativi di Memory Scraping (lettura di /proc/self/mem o /proc/<pid>/mem ) da parte di processi non autorizzati.
Infine si raccomanda di valutare l’implementazione sui propri apparati di sicurezza degli Indicatori di Compromissione (IoC) disponibili ai link nella sezione Riferimenti.
[1] Tag GIT : etichette crittografiche che fungono da puntatori a specifiche istantanee del codice (commit), utilizzate dai sistemi di automazione per identificare e distribuire le versioni di rilascio ufficiali (come la v0.69.4)
Riferimenti
- https://www.aquasec.com/blog/trivy-supply-chain-attack-what-you-need-to-know/
- https://www.cisa.gov/news-events/alerts/2026/03/26/cisa-adds-one-known-exploited-vulnerability-catalog
- https://ramimac.me/teampcp/#teampcp
- https://www.aikido.dev/blog/teampcp-deploys-worm-npm-trivy-compromise
- https://research.jfrog.com/post/canister-worm/
- https://socket.dev/blog/canisterworm-npm-publisher-compromise-deploys-backdoor-across-29-packages
- https://ramimac.me/teampcp/
- https://securitylabs.datadoghq.com/articles/litellm-compromised-pypi-teampcp-supply-chain-campaign/
- https://github.com/aquasecurity/trivy/discussions/10425
- https://www.crowdstrike.com/en-us/blog/from-scanner-to-stealer-inside-the-trivy-action-supply-chain-compromise/
- https://www.legitsecurity.com/blog/the-trivy-supply-chain-compromise-what-happened-and-playbooks-to-respond
CVE
| CVE-ID | |
|---|---|
| CVE-2026-33634 | CVE-2026-26189 |
Change log
| Versione | Note | Data |
|---|---|---|
| 1.0 | Pubblicato il 27-03-2026 | 27/03/2026 |
Il presente articolo è un prodotto originale di csirt.gov.it, riproposto qui a solo scopo di aumentarne la visibilità. Può essere visualizzato in versione originale al seguente link
Ultimo aggiornamento
27 Marzo 2026, 18:03
CSIRT Toscana