L’attacco alla catena di approvvigionamento Miasma si diffonde attraverso il verme Phantom Gyp
Detection stack
- AIDR
- Alert
- ETL
- Query
Sintesi
Una nuova variante del worm Miasma si sta diffondendo attraverso l’ecosistema npm sfruttando un file binding.gyp malevolo che innesca l’esecuzione di codice durante npm install. Questo metodo sfugge a molti controlli tradizionali basati su script, scarica un runtime Bun alternativo, ruba le credenziali CI/CD e cloud, e invia i dati raccolti a un account GitHub morto. Più di 57 pacchetti sono stati compromessi durante una campagna in rapido movimento che si è sviluppata in meno di due ore il 3 giugno 2026. Il worm impianta anche backdoor all’interno dei file di configurazione degli assistenti di codifica AI.
Investigazione
I ricercatori hanno ricreato l’intrusione all’interno di un GitHub Actions runner rinforzato e hanno catturato l’intero albero dei processi, il traffico di rete e gli artefatti del codice coinvolti nell’attacco. La loro analisi ha rivelato la tecnica Phantom Gyp, una catena di payload offuscata in quattro fasi, e l’uso di Bun per evitare rilevamenti focalizzati solo sul comportamento di Node.js. Il furto di credenziali è stato effettuato leggendo la memoria del runner e interrogando i punti finali dei metadati dell’istanza cloud. L’esfiltrazione è avvenuta poi attraverso richieste API GitHub autenticate verso un account malevolo che creava dinamicamente repository per memorizzare i dati rubati.
Mitigazione
I difensori dovrebbero ridurre l’esposizione bloccando i passaggi di build nativi, disabilitando node-gyp dove possibile, o ignorando gli script di installazione in ambienti ad alto rischio. Finestre di raffreddamento del registro e verifica delle firme di provenienza SLSA possono anche aiutare a limitare la manomissione dei pacchetti. I team di sicurezza dovrebbero osservare download di Bun inaspettati, file index.js di root sovradimensionati, e la creazione di nuovi repository GitHub tramite token emessi da CI. Qualsiasi token o credenziale cloud esposta dovrebbe essere ruotata immediatamente.
Risposta
Le organizzazioni dovrebbero rilevare binding.gyp file contenenti modelli come <!(node index.js ...), allertare sui download di runtime Bun, e fermare il flusso di lavoro affetto appena confermata l’attività malevola. I repository dovrebbero essere scansionati per file di configurazione di assistenti AI iniettati e puliti prontamente. Tutti i token rubati devono essere revocati e ruotati, gli ambiti di permesso CI/CD rivisitati, e avviata un’indagine di risposta all’incidente per determinare l’entità dell’esposizione delle credenziali.
Flusso di attacco
Stiamo ancora aggiornando questa parte. Iscriviti per essere notificato
NotificamiRilevazioni
Caricamento/Download Remoto di File tramite strumenti standard (tramite cmdline)
Visualizzare
Script Linux Creato in Cartelle Temporanee (tramite file_event)
Visualizzare
File Nascosto Creato su Host Linux (tramite file_event)
Visualizzare
IOC (HashSha256) per rilevare: Miasma attacco alla catena di fornitura npm: worm auto-diffondente tramite Phantom Gyp
Visualizzare
IOC (HashMd5) per rilevare: Miasma attacco alla catena di fornitura npm: worm auto-diffondente tramite Phantom Gyp
Visualizzare
Rilevamento Attacco della Catena di Fornitura di Miasma npm [Indicatori di Rete]
Visualizzare
Rilevamento attacco alla catena di fornitura npm Miasma tramite la tecnica Phantom Gyp [Creazione Processo su Linux]
Visualizzare
Esecuzione Simulazione
Prerequisito: Il Controllo Pre‑volo di Telemetria & Baseline deve essere passato.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta prevista dalla logica di rilevamento.
-
Narrazione & Comandi di Attacco:
Un attaccante compromette un pacchetto npm open‑source, aggiungendo un filebinding.gypmalevolo. Quando uno sviluppatore eseguenpm install, il processo di build del pacchetto invocanode-gyp rebuild. All’interno dello script di build generato, l’attaccante:- Scarica il runtime Bun (binario firmato) tramite
curlin una directory temporanea (/tmp/b-<rand>/). - Eleva i privilegi invocando
sudo python3per decomprimere il zip e collocare il binario in/usr/local/bin. - Raccoglie il token GitHub dello sviluppatore usando
gh auth token. - Esegue un payload (
bun run /tmp/p1764ajw42rg.js) che esfiltra dati.
Ogni passo appare verbatim nei log di creazione di processi, soddisfacendo la lista
containsdella regola Sigma. - Scarica il runtime Bun (binario firmato) tramite
-
Script di Test Regressione: Il seguente script Bash riproduce la catena esatta di comandi in un ambiente di laboratorio controllato.
# miasma_phantom_gyp_simulation.sh set -euo pipefail # 1. Preparare un pacchetto npm falso con binding.gyp malevolo PKG_DIR=$(mktemp -d /tmp/miasma_pkg.XXXX) cd "$PKG_DIR" npm init -y >/dev/null 2>&1 cat > binding.gyp <<'EOF' { "targets": [ { "target_name": "evil", "sources": [ "evil.c" ] } ] } EOF echo "int main(){return 0;}" > evil.c # Installare node‑gyp localmente npm install node-gyp >/dev/null 2>&1 # 2. Eseguire node‑gyp rebuild (primo indicatore) ./node_modules/.bin/node-gyp rebuild # 3. Scaricare runtime Bun (secondo indicatore) TMPDIR=$(mktemp -d /tmp/b-XXXXXX) curl -sSL "https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/bun-linux-x64-baseline.zip" -o "$TMPDIR/bun.zip" # 4. Elevare con sudo python3 per decomprimere (terzo indicatore) sudo python3 - <<PYTHON import zipfile, sys, os zip_path = os.getenv('TMPDIR') + '/bun.zip' with zipfile.ZipFile(zip_path, 'r') as z: z.extractall(os.getenv('TMPDIR')) PYTHON # 5. Acquisire il token GitHub (quarto indicatore) # Nota: Questo richiede l'installazione della CLI GitHub e autenticato precedentemente. gh auth token > "$TMPDIR/gh_token.txt" # 6. Eseguire payload malevolo tramite Bun (quinto indicatore) # Creare un payload JS fittizio echo "console.log('exfiltrated');" > "$TMPDIR/p1764ajw42rg.js" "$TMPDIR/bun" run "$TMPDIR/p1764ajw42rg.js" echo "Simulazione completa. Controlla il tuo SIEM per gli avvisi generati." -
Comandi di Pulizia: Rimozione di artefatti temporanei e inversione degli artefatti di escalation dei privilegi.
# cleanup_miasma_simulation.sh set -euo pipefail # Rimuovere directory temporanee rm -rf "$PKG_DIR" "$TMPDIR" # Opzionalmente rimuovere il binario di Bun installato da /usr/local/bin se è stato posizionato lì if command -v bun >/dev/null; then sudo rm -f "$(command -v bun)" fi # Cancellare qualsiasi token GitHub catturato shred -u "$HOME/.config/gh/hosts.yml" 2>/dev/null || true echo "Pulizia terminata."