AuditorTrap

AuditorTrap: Una falsa gilda di sicurezza crittografica di 22 pacchetti nantu à npm cù dui carichi utili paralleli

TL; DR

Un unicu editore npm, ddjidd5640, hà custruitu un catalogu di 22 pacchetti di strumenti di sicurezza Web3 falsi sottu marche fabricate cum'è Gilda di Sicurezza Criptografica, Cullettivu di Audit Web3, e Alleanza di Sicurezza DeFi.

I pacchetti ùn parenu micca una semplice campagna typosquat. Parenu un ecosistema di sicurezza di marca, sustinutu da urganisazioni GitHub viote currispondenti è nomi di strumenti MCP cunvincenti cum'è search_leaked_credentials, validate_chain_key, e deploy_safe.

A campagna si divide in duie famiglie di carichi utili attivi è una tranche dormiente.

Variante A cuntene 8 pacchetti di raccolta di credenziali. Un script di postinstallazione legge i magazzini secreti lucali, mentre un pacchettu in bundle scanner.js si eseguisce quandu un agente IA invoca l'arnesi MCP di u pacchettu, circendu chjave di portafogliu, mnemonichi BIP39, token API è altre credenziali.

Variante B cuntene 5 droppers binari basati nantu à Pinggy. Sti pacchetti recuperanu è eseguiscenu un payload remotu durante a postinstallazione, cù foundry-deploy-helper:1.8.96 abbandunà un eseguibile staccatu à /tmp/.node-cache.

Variante C cuntene 9 pacchetti dormienti senza ancu un payload postinstallazione evidente, ma u listessu editore, mudellu di marca è denominazione focalizzata nantu à Web3.

Solu 8 di i 22 pacchetti eranu stati segnalati in ogni locu chì pudemu vede; i 14 rimanenti eranu sempre in diretta nantu à npm à u mumentu di l'analisi.

Gravità: critica.

L'Attaccu: Dui Carichi Utili in Un Armadiu

L'armariu hè a marca. Aprite u README di crypto-credential-scanner è vi diceranu ch'ellu hè un scanner di credenziali custruitu da a Crypto Security Guild. Aprite a pagina di defi-threat-scanner è vi diceranu ch'ellu hè un strumentu di a DeFi Security Alliance. Aprite web3-secrets-detector è hè u Web3 Audit Collective. Nisunu di sti cullettivi esiste cum'è urganizazione. Esistenu cum'è urganisazioni GitHub viote chì u so solu scopu hè di pupulà l'iperligame "autore" di a pagina npm.

Variante A: u pre-flight dopu l'installazione è l'attu principale in tempu MCP

L'8 pacchetti Variant-A spartenu tutti un payload in duie tappe - un pre-flight post-installazione chì piglia tutte e credenziali digià presenti nantu à u discu in testu chjaru, è una tappa di runtime chì si attiva una volta chì un agente AI chjama unu di l'arnesi MCP di u pacchettu.

"Fase 1, u pre-volu" vive in linea in package.json cum'è un node -e one-liner. Apre sette dotfile ben cunnisciuti è spedisce i primi 200 byte di ognunu à u C2:

200 byte di ~/.ssh/id_ed25519 ùn darà micca à l'attaccante a vostra chjave privata per sè stessu, ma darà u nome di u schedariu, u cummentariu è e prime linee di l'intestazione PEM — abbastanza per cunfirmà chì tipu di chjave si trova quì, chì hè abbastanza per guidà una tappa successiva. 200 byte di ~/.env sò generalmente più chè abbastanza per filtrà un token API cumpletu. 200 byte di ~/.git-credentials sò generalmente un inseme cumpletu di gettoni OAuth.

"Stappa 2, l'attu principale", hè scanner.jsHè caricatu da u pacchettu index.js è chjamatu da l'internu di u gestore di richieste MCP in u mumentu chì un agente IA invoca unu di i strumenti publicitati. U schedariu hè u listessu byte per byte in tutti l'8 pacchetti Variant-A (b461106e47a1f5966159cd6e92541505), è hè sinceru nantu à ciò chì face. U bloccu di cumenti d'apertura dice, testualmente:

javascript // wallet-scanner.js — scanner attivu integratu per i pacchetti MCP // Funziona in silenziu quandu l'agente AI chjama qualsiasi strumentu MCP, scansiona l'ambiente per // portafogli/chjavi // Utilizza solu i built-in di Node.js, senza dipendenze esterne

Ciò chì seguita hè una camminata recursiva, prufundità 3, di:

u cartulare principale stessu

...filtru per i nomi di file chì cuntenenu unu di keystore, portafogliu.json, wallet.dat, .sicretu, semente.txt, metamask, ensemble, rabbinu, portafogliu di fiducia, coinbase, chjave privata, mnemonicu, chjave_secreta, api_key — vale à dì, una lista aghjustata à manu di ogni locu chì un utilizatore di criptovalute tene una chjave. Per ogni currispundenza, u schedariu hè apertu è scansionatu contr'à sei regex:

Type Pattern Ciò chì piglia
chjave_privata (?:0x)?[a-fA-F0-9]{64} Chjavi private Ethereum è secreti esadecimali generici di 32 byte.
mnemonicu \b([a-z]+\s+){11,23}[a-z]+\b Frasi mnemoniche BIP39 chì varianu da 12 à 24 parolle.
api_key (api[_-]?key\|API_KEY)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,}) Gettoni API generici è valori di credenziali integrati in i fugliali di cunfigurazione.
sicretu (?:secret\|private).{0,10}[:=]\s*["']?([A-Za-z0-9+/=]{20,}) Sicreti è valori privati ​​​​​​cumunemente almacenati in i furmati di cunfigurazione YAML, JSON è INI.
indirizzu_eth 0x[a-fA-F0-9]{40} Indirizzi di portafogli Ethereum aduprati per identificà è piglià impronte digitali di e vittime.
codice (?:PASSWORD\|PASSPHRASE)\s*=\s*["']?(\S{4,64}) Variabili d'ambiente di password è passphrase in stile Shell-export.

Dopu, scanner.js legge sei altri dotfile in pienu - finu à 500 byte ognunu di ~/.env, ~/.bash_history, ~/.zsh_history, ~/.npmrc, ~/.gitconfig, ~/.git-credentials - è cerca process.env per qualsiasi variabile chì u so nome cuntene key, secret, token, password, private, mnemonic, wallet, o seed. Infine, chjama execSync('whoami') più os.hostname() è process.cwd() per etichettà u dump cù l'identità di a vittima. L'interu payload, più finu à 100 risultati individuali, hè POSTatu cum'è un unicu ughjettu JSON.

A destinazione exfil ùn hè micca codificata direttamente. U pacchettu a recupera à l'esecuzione da:
https://ddjidd564.github.io/defi-security-best-practices/config.json

— un documentu GitHub Pages chì l'attaccante cuntrolla. L'attuale config.json restituisce

Sè quellu recuperu fiasca, scanner.js torna à listessu webhook.site URL codificatu in modu fissu cum'è una costante. Questa indiretta hè l'unicu elementu di sofisticazione operativa in a campagna: permette à l'attaccante di rotà i miri exfil senza ripubblicà u pacchettu, è mantene l'URL di u cullettore attuale fora di l'artefattu npm, ciò chì rende più difficiule a rilevazione basata nantu à a firma.

Variante B: un tunnel Pinggy, un binariu è una variante persistente

L'altra tranche in diretta hè assai più chjuca - cinque pacchetti - è assai menu intelligente. L'autore hà abbandunatu cumpletamente u costume MCP. Quessi pacchetti pretendenu esse assistenti di cunfigurazione per strumenti legittimi Ethereum è Solana (aiutu di cunfigurazione di truffle, aggregatore di feed di prezzi di catena, ganache-cli-provider, solana-pda-helper, aiutu-di-spiegamentu-di-fonderia). U payload hè un solu https.get-è-exec linea in u postinstallazione

U C2 hè gratuitu Pinggy tunnel — un serviziu genericu di tunneling di sviluppatori chì l'attaccante usa cum'è C2 effimeru. U pacchettu scarica tuttu ciò chì u tunnel restituisce è u mette in prucessu_zitellu.execÙn ci hè nisuna verificazione d'integrità, nisuna firma, nisuna prutezzione di seconda tappa. Ciò chì u tunnel di l'operatore serve oghje hè ciò chì funziona.

U pacchettu u più aggressivu, aiutu-di-distribuzione-di-fonderia:1.8.96, rimpiazza l'inline https.getcurl è un truccu di persistenza:

A traccia & stacca u binariu da u prucessu d'installazione, cusì l'installazione si cumpleta in silenziu mentre un binariu di longa durata hè lasciatu in sfondate sottu un nome chì s'assumiglia à un schedariu di cache Node.js insignificante. Ùn avemu micca recuperatu u binariu stessu; u tunnel ùn rispondia micca quandu avemu verificatu, chì hè u cumpurtamentu previstu per un tunnel chì l'operatore attiva è disattiva à dumanda.

 Variante C: una facciata lucidata, senza detonatore (ancu)

I nove pacchetti rimanenti - verificatore di salvezza di portafogliu, scanner di sicurezza ambientale, kit di strumenti di ricerca (un typosquat vuluntariu di Foundry), solna-web3 (un typosquat di Solana), verificatore di sicurezza di u portafogliu, plugin-profiler-di-gas-di-cascu-duru, ethers-multicall-utils, auditore di defi-env, utili etherjs - anu nisun script di postinstallazione è nisuna exfil di runtime evidente à prima vista. Spartenu l'editore, e facciate di a marca, u mudellu di denominazione Web3, è in certi casi un schedariu README identicu cù e varianti attive. Li trattemu cum'è parte di a stessa campagna è avemu cunsigliatu a rimuzione preventiva, ma ùn avemu ancu enumeratu cumpletamente i so trigger di runtime. A tranche dormiente pò esse un puntu d'appoghju chì l'operatore riserva per un futuru cambiamentu - u listessu mudellu chì PhantomBot hà utilizatu à a mità di maghju, induve l'operatore hà scambiatu un ladru di credenziali per una recluta di botnet senza ripublicà u nome di u pacchettu.

Cronologia è u Catalogu

U pacchettu cù a data più antica di a campagna hè quellu cù a versione più bassa: validatore-chjave-catena:0.2.3 e defi-env-auditor:0.3.2 parenu e prime gocce sperimentali. À u mumentu chì l'editore hè ghjuntu truffle-config-helper:1.7.0 e aiutu-di-distribuzione-di-fonderia:1.8.96, l'inflazione di e versioni era deliberata - scegliendu numeri chì si leghjenu cum'è a discendenza di un pacchettu stabilitu. Nimu di i 22 ùn hà alcuna storia legittima precedente sottu à quellu nome esattu in npm.

U catalogu cumpletu, raggruppatu per variante:

### Variante A — raccoglitore di credenziali (postinstallazione + scanner.js in tempu MCP, MD5 b461106e47a1f5966159cd6e92541505)

pacchettu Version Segnalatu in i Feed di Rilevazione
mnemonic-safety-check 0.5.2
solidity-deploy-guard 0.4.4
web3-secrets-detector 1.2.6
eth-wallet-sentinel 1.0.9
deployment-key-auditor 0.7.3
defi-threat-scanner 2.1.2
crypto-credential-scanner 2.0.2
chain-key-validator 0.2.3

### Variante B — Tunnel Pinggy https.get → exec (nisuna visibilità di u feed di rilevazione prima di stu rapportu)

pacchettu Version Sapore di postinstallazione
truffle-config-helper 1.7.0 https.get → exec(stdout)
chainlink-price-feed-aggregator 1.1.12 https.get telemetry call
ganache-cli-provider 1.7.51 https.get telemetry call
solana-pda-helper 1.0.46 https.get telemetry call
foundry-deploy-helper 1.8.96 curl + chmod +x /tmp/.node-cache &

### Variante C — dormiente, suspettatu trigger in tempu reale (nisuna visibilità di u feed di rilevazione prima di stu rapportu)

pacchettu Version Fonti
wallet-backup-verifier 1.0.1
env-security-scanner 1.6.0
foundy-toolkit 1.5.79 typosquat di fonderia
solna-web3 1.5.98 typosquat di solana
wallet-security-checker 1.0.3
hardhat-gas-profiler-plugin 1.7.86
ethers-multicall-utils 1.3.15
defi-env-auditor 0.3.2
etherjs-utils 1.0.39

E colonne Variante-A è Variante-B ùn sò micca scelte à casu. I nomi di Variante-A si vendenu tutti cum'è strumenti di audit di sicurezza — «verifica di sicurezza», «guardia di implementazione», «rilevatore di sicreti», «sentinella di portafogli», «auditore di chiavi», «scanner di minacce», «scanner di credenziali», «validatore di chiavi di catena». Sò destinati à un sviluppatore o agente IA chì cerca un strumentu per valutà a sicurezza di un prughjettu Web3. I nomi di Variant-B si vendenu tutti cum'è assistenti di custruzzione è implementazione per u listessu ecosistema Web3 - Truffle, Chainlink, Ganache, Solana PDA tooling, Foundry. A divisione riflette u mudellu mentale di un sviluppatore Web3 nurmale di "fase di audit" vs. "fase di implementazione". Qualunque sia a fase chì sceglite, l'editore hà imballatu una trappula per ella.

Indicatori di compromessi

Rete è schedari

CIO varianti Fini
https://ddjidd564.github.io/defi-security-best-practices/config.json A Risolutore di webhook dinamicu ospitatu via GitHub Pages.
https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233 A Puntu finale di u cullettore di esfiltrazione attuale, ancu integratu cum'è una riserva.
rqnyz-2605-7280-7--2000-c51.run.pinggy-free.link/npm/-/binary/telemetry B Tunnel Pinggy utilizatu per distribuisce carichi binarii remoti.
scanner.js MD5 b461106e47a1f5966159cd6e92541505 A Caricamentu utile identicu di u scanner riutilizatu in tutti l'8 pacchetti Variant-A.
/tmp/.node-cache B Eseguibile staccatu abbandunatu da foundry-deploy-helper:1.8.96.

Publisher

  • nome d'utilizatore npm: ddjidd5640
  • mail: 1623682356@qq.com (micca verificatu)
  • Email è SCM verificazione: nisuna
  • Pacchetti sottu contu: 22, tutti elencati in u catalogu sopra
  • A prima attività visibile: validatore-chjave-catena:0.2.3 (Variante A)
  • Ultima attività visibile: chain-key-validator:0.2.3 è crypto-credential-scanner:2.0.2 (tramindui in e 24 ore prima di sta scrittura)

Fronti di marca (usate in auturi / README / falsa GH org)

  • «Crypto Security Guild» — sustinuta da una urganizazione GitHub viota gilda di criptosecurit
  • «Web3 Audit Collective» — sustinutu da una urganizazione GitHub viota w3audit
  • «DeFi Security Alliance» — sustinuta da una urganizazione GitHub viota defi-sicurezza
  • Riferimentu contu GH ddjidd564 — host di u dynamic-webhook config.json

Comportamentali

  • nodu -e lettura di qualsiasi di i postinstallazione .ssh, .ethereum, .bitcoin, .env, .bash_history, .zsh_history, .git-credentials.slice(0, 200) è cuncatenendu cù | I separatori sò una impronta digitale quasi unica per a Variante A.
  • Impurtante ./scanner.js da un pacchettu chì si registra cum'è un MCP Servidor cù strumenti chjamati credenziali_di_ricerca_filtrate o verbi di "audit di sicurezza" inquadrati in modu simile hè una cunferma di a Variante A.
  • Un node -e postinstall chì recupera da qualsiasi host *.run.pinggy-free.link è manda a risposta in child_process.exec hè una cunferma Variant-B indipendentemente da u wrapper.

Attribuzione è Motivazione

Ci hè abbastanza nantu à a tavula per una impronta digitale parziale di l'editore è micca abbastanza per una vera identificazione. Email 1623682356@qq.com hè un indirizzu postale QQ - u webmail gratuitu di Tencent, pupulare in Cina cuntinentale - è a parte lucale numerica hè l'ID di l'utente QQ; trattemu questu solu cum'è un signale dolce, postu chì l'indirizzi in furmatu QQ sò registrati trivialmente. U contu npm ùn hà micca divulgazione à dui fattori, nisun email verificatu, nisun email verificatu SCM ligame. A triade di marca "Crypto Security Guild" / "Web3 Audit Collective" / "DeFi Security Alliance" hè fabbricata à l'ingrossu - nisuna di e trè esiste fora di sta campagna - è l'urganisazioni GitHub di supportu sò gusci vioti creati per pupulà i ligami di a pagina npm.

Dui mudelli valenu a pena d'esse numinati, perchè si prisentanu in campagne adiacenti. U primu hè prefabbricazione di marca cum'è prova suciale: l'operatore ùn hà micca sceltu i nomi di i prughjetti esistenti per typosquat; anu fabricatu una narrativa di fiducia sana da zero, sapendu chì un Custruzzione di l'agente IA pipeline o un sviluppatore frettu chì scansiona a pagina npm currisponderà à u mudellu "pare una urganizazione di sicurezza" invece di "hè una urganizazione di sicurezza". Questu hè u listessu approcciu chì a literatura di slopsquatting hà avvistatu - pacchetti sintonizzati nantu à u tipu di nome chì un LLM averebbe. inventà s'ellu hè dumandatu un strumentu di sicurezza Web3, vestitu abbastanza bè chì l'LLM ùn verificherà micca duie volte. Slopsquatting hè u termine inventatu pocu fà per i pacchetti maliziosi chì i so nomi currispondenu à i placeholder. L'LLM anu allucinazioni quandu un pacchettu autorevole ùn esiste micca; sta campagna hè a so cugina più aggressiva, induve l'operatore fabrica ancu l'urganizazione à a quale appartenerebbe u placeholder.

U secondu mudellu hè Attivazione in tempu MCP. Quandu scanner.js funziona, l'installazione hè finita è u sviluppatore hè andatu avanti. U trigger hè l'agente IA chì chjama un strumentu — credenziali_di_ricerca_filtrate, in u casu di a Variante-A - ciò chì l'agente farà assolutamente, perchè hè tutta a ragione per a quale hè statu datu u pacchettu. U travagliu maliziosu si faci durante u bene parte di u flussu di travagliu, quandu u sviluppatore hè più prubabile di vede u so assistente IA riesce à un compitu ch'ellu hà dumandatu. Hè un picculu cambiamentu di cumpurtamentu da u vechju "exfil on" npm install", è evita perfettamente u sandboxing in tempu d'installazione.

Ùn citemu micca un attore di minaccia. I signali (email QQ, contu unicu, burst di 22 pacchetti in un ghjornu, dui stack C2 paralleli) sò ugualmente coerenti cù un operatore persistente, una piccula squadra, o una di e squadre di inundazione di pacchetti chì hè stata visibile in a telemetria npm finu à u 2025-2026. Ciò chì avemu Ciò chì si pò dì hè chì questu operatore hà un ecosistema preferitu chjaru (Ethereum + Solana + strumenti Foundry/Hardhat), una vittima preferita chjara (sviluppatori Web3 è agenti IA chì travaglianu nantu à prughjetti Web3) è un mudellu di persistenza preferitu chjaru (trigger di runtime MCP più un fallback binariu staccatu).

Impattu, Tendenze, è Ciò chì i Difensori Possenu Fà

U nostru avvertimentu precoce pipeline fuòru pigghiàti 8 di 22 pacchetti durante a durata di a campagna - sei à u sweep iniziale è dui altri chì sò ghjunti più tardi u stessu ghjornu durante u passu di raggruppamentu di a campagna. L'altri 14 pacchetti sò stati in diretta nantu à npm per ghjorni senza mai apparisce in alcunu di i feed di rilevazione chì monitorizemu, è à u mumentu di a scrittura restanu installabili. Questa lacuna hè impurtante perchè:

  • A variante A hè silenziosa durante l'installazioneA lettura di u dotfile si faci, ma l'exfil in massa si attiva solu quandu un agente AI invoca l'arnesi MCP di u pacchettu. A standard A sandbox di postinstallazione chì osserva a postinstallazione vedrà u nodu -e bloccu è decide ch'ellu hè chjucu è apparentemente inerte.
  • A variante B hè una sola linea. Ùn ci hè nunda da chì un classificatore di malware possa amparà - nisuna offuscazione, nisun payload codificatu, nisun duminiu suspettu. U tunnel Pinggy hè un serviziu di sviluppatore legittimu. L'unica cosa suspetta hè chì un "aiutu di cunfigurazione" hà bisognu di telefonà in casa.
  • A variante C pare cumpletamente pulita. Ùn hà micca installazione hooksPer ogni signale staticu, hè nurmale.

Una breve lista di cuntrollu di u difensore per l'era di u strumentu MCP

Trè azzioni concrete chì averebbenu catturatu sta campagna prima:

  1. Pesate l'editore, micca u pacchettu. Vintidui pacchetti sottu à un contu QQ-mail di un annu senza SCM A verificazione hè un signale più luminosu chè qualsiasi funzione per pacchettu. U nostru flussu di travagliu di alerta precoce hà rilevatu i primi pacchetti perchè l'impronta digitale di l'editore si distingueva - raccomandendu un puntuatu di reputazione di l'editore chì qualsiasi classificatore per pacchettu sicuru, inconcludente o malware pò riduce u pesu.
  2. Trattate l'indirezioni di cunfigurazione dinamica cum'è maliziose finu à prova contraria. Un pacchettu chì risolve u so endpoint in uscita à l'esecuzione da un documentu di terze parti (GitHub Pages, GitHub Gist, Pastebin, ughjettu S3, in ogni altru locu) ùn hà alcuna ragione legittima per fà cusì per a telemetria. I veri endpoints di telemetria sò codificati è documentati.
  3. Verificate i pacchetti di u servitore MCP per via di a so superficia di strumenti publicitata. I pacchetti Variant-A publicitanu tutti strumenti chjamati search_leaked_credentials, validate_chain_key, deploy_safe, è verbi simili di "audit". Un host MCP chì mostra un strumentu chì a so descrizzione pretende di scansà i repertori di prughjetti per e credenziali deve richiede un opt-in esplicitu di l'operatore prima chì l'agente l'invochi nantu à una basa di codice reale. U puntu di MCP hè chì u ciclu di l'agente ùn hà manera di sapè se search_leaked_credentials hè una ricerca di credenziali o hè un esfiltratore di credenziali.

Per i sviluppatori chì puderanu avè digià installatu unu di i 22 pacchetti: assumete qualsiasi chjave di testu chjaru in ~ / .ssh, ~/.ethereum, ~/.bitcoin, ~/.solana, ~/.env, o ~/.git-credentials hè cumprumessu, rote ogni credenziale chì u so nome currisponde à a lista di filtri env-variable sopra, è in Linux / macOS verificate un schedariu eseguibile in /tmp/.node-cache (è qualsiasi prucessu orfanu iniziatu da ellu). Reinstallazione di a versione legittima di l'arnesi impersonati (foneria, trufa, cascu di prutezzione, ganache, ecc.) ùn elimina micca u binariu abbandunatu.

A tranche Variant-C dormiente hè a parte di sta storia chì invechja u peghju. Nove pacchetti cù un prufilu d'installazione pulitu è ​​un editore stabilitu sò esattamente u tipu d'inventariu chì un operatore tene in riserva. S'elli detonanu dopu - cum'è PhantomBot hà fattu quandu u so axois-utils U rimpacchettamentu hè passatu da u furtu di credenziali à una recluta di botnet - detoneranu contr'à qualsiasi cunsumadore di registru chì hà appuntatu un pacchettu Variant-C trà oghje è a rimozione. Appuntà un pacchettu maliziosu per versione ùn vi prutege micca da un editore chì cuntrolla ogni versione.

Vede ancu

sca-tools-software-strumenti-d'analisi-di-cumpusizione
Priorizà, rimedià è assicurà i vostri risichi di software
Uttene u vostru contu gratuitu.
Nisuna carta di creditu necessaria.

Assicurà u vostru sviluppu è a consegna di software

cù a Suite di Prodotti Xygeni