SOC Prime Bias: Critico

05 Jun 2026 15:45 UTC

L’attacco alla catena di approvvigionamento Miasma si diffonde attraverso il verme Phantom Gyp

Author Photo
SOC Prime Team linkedin icon Segui
L’attacco alla catena di approvvigionamento Miasma si diffonde attraverso il verme Phantom Gyp
shield icon

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

Notificami

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 file binding.gypmalevolo. Quando uno sviluppatore esegue npm install, il processo di build del pacchetto invoca node-gyp rebuild. All’interno dello script di build generato, l’attaccante:

    1. Scarica il runtime Bun (binario firmato) tramite curl in una directory temporanea (/tmp/b-<rand>/).
    2. Eleva i privilegi invocando sudo python3 per decomprimere il zip e collocare il binario in /usr/local/bin.
    3. Raccoglie il token GitHub dello sviluppatore usando gh auth token.
    4. Esegue un payload (bun run /tmp/p1764ajw42rg.js) che esfiltra dati.

    Ogni passo appare verbatim nei log di creazione di processi, soddisfacendo la lista contains della regola Sigma.

  • 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."