DEV#POPPER RAT Distribuito Attraverso Rilasci Compromessi di Joyfill su npm
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
Due versioni beta compromesse del @joyfill pacchetto npm sono state trovate contenenti un impianto JavaScript eseguito al momento dell’importazione. L’impianto utilizza transazioni blockchain attraverso Tron, Aptos e BNB Smart Chain per risolvere e scaricare il trojan di accesso remoto (RAT) DEV#POPPER. La campagna prende di mira le workstation degli sviluppatori e le pipeline CI/CD eseguendo codice dannoso non appena il modulo colpito viene importato.
Indagine
Il Team di Ricerca di Socket ha scoperto la compromissione mentre analizzava le versioni beta di @joyfill/layouts and @joyfill/components. I ricercatori hanno identificato una catena di consegna del payload multistadio che combinava JavaScript offuscato con meccanismi di dispatch basati su blockchain. L’indagine ha collegato il loader iniziale alla famiglia PolinRider e ha confermato che il payload finale apparteneva alla famiglia di malware DEV#POPPER.
Mitigazione
Gli sviluppatori dovrebbero rimuovere immediatamente le @joyfill versioni beta colpite da lockfile, cache dei pacchetti, ambienti di build e artefatti di distribuzione. È consigliato fissare le dipendenze a versioni verificate come @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 . I team di sicurezza dovrebbero anche bloccare le versioni compromesse tramite proxy di registro e strumenti di governance delle dipendenze.
Risposta
Qualsiasi sistema che abbia importato i pacchetti compromessi dovrebbe essere isolato, e tutte le credenziali accessibili al processo Node.js compromesso dovrebbero essere ruotate. Gli investigatori dovrebbero ispezionare le applicazioni degli sviluppatori, inclusi VS Code, GitHub Desktop e Discord, per cambiamenti inattesi nei moduli fondamentali. La telemetria di endpoint e CI/CD dovrebbe anche essere revisionata per processi Node.js scollegati, indirizzi C2 noti e traffico RPC blockchain sospetto.
Flusso di Attacco
Rilevazioni
Possibile Tentativo di Abuso di Ethereum via Publicnode come Canale C2 (via dns_query)
Visualizza
Possibile Tentativo di Comunicazione di Dominio di Lookup IP (via dns)
Visualizza
Possibile Schermata Linux è stata Catturata (via cmdline)
Visualizza
File Nascosto è Stato Creato su Host Linux (via file_event)
Visualizza
IOC (HashSha256) per rilevare: Due versioni beta di Joyfill npm compromesse per consegnare Trojan DEV#POPPER
Visualizza
IOC (SourceIP) per rilevare: Due versioni beta di Joyfill npm compromesse per consegnare Trojan DEV#POPPER
Visualizza
IOC (DestinationIP) per rilevare: Due versioni beta di Joyfill npm compromesse per consegnare Trojan DEV#POPPER
Visualizza
Rilevazione degli Indicatori di Malware DEV#POPPER [Connessione di Rete Windows]
Visualizza
Rilevazione dei Pacchetti npm Joyfill Compromessi che Consegna Trojan [Evento File Linux]
Visualizza
Rilevazione di Iniezione di Moduli Node.js ed Esecuzione di Processi Scollegati [Creazione di Processi Linux]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-flight di Telemetria & Baseline deve essere superato.
Motivazione: Questa sezione dettaglia l’esatta esecuzione della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e il resoconto DEVE riflettere direttamente le TTP identificate e mirare a generare esattamente la telemetria prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a una diagnosi errata.
-
Narrativa dell’Attacco & Comandi: L’avversario è riuscito a iniettare codice dannoso in una dipendenza npm ampiamente utilizzata (Compromissione della Catena di Fornitura). Quando uno sviluppatore esegue
npm installo avvia un progetto, lo script dannoso si esegue. Lo script tenta inizialmente di nascondere il suo intento assegnando lafunzione requirea una variabile globale (global.r = require), consentendo di caricare moduli ovunque nell’applicazione senza chiamarefunzione requiredirettamente (offuscamento). Infine, usachild_process.spawnper avviare un processo shell scollegato che si collega nuovamente a un server di Comando & Controllo (C2), tentando di eludere la rilevazione dissociando il processo dannoso dal processo Node.js padre. -
Script di Test di Regressione:
#!/bin/bash # Script di simulazione per attivare la regola di rilevamento dell'iniezione in Node.js. # Questo script crea un file JS dannoso temporaneo e lo esegue tramite Node.js. MALICIOUS_FILE="malicious_pkg.js" echo "[+] Creando script Node.js dannoso..." cat << 'EOF' > $MALICIOUS_FILE // Simulare l'iniezione di un modulo globale (T1027) global.r = require; // Simulare l'esecuzione di un processo scollegato tramite child_process.spawn (T1059.006) const cp = require('child_process'); cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' }); console.log("[!] Payload dannoso eseguito."); EOF echo "[+] Esecuzione dello script dannoso via Node.js..." node $MALICIOUS_FILE echo "[+] Simulazione completata. Controlla SIEM per Allarme: Rilevazione di Iniezione di Moduli Node.js ed Esecuzione di Processi Scollegati." -
Comandi di Pulizia:
# Rimuovere il file dannoso simulato rm -f malicious_pkg.js # Uccidere qualsiasi processo sleep orfano generato dalla simulazione pkill -f "sleep 30"