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.get cù curl è un truccu di persistenza:
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 | iè |
solidity-deploy-guard | 0.4.4 | iè |
web3-secrets-detector | 1.2.6 | iè |
eth-wallet-sentinel | 1.0.9 | iè |
deployment-key-auditor | 0.7.3 | iè |
defi-threat-scanner | 2.1.2 | iè |
crypto-credential-scanner | 2.0.2 | iè |
chain-key-validator | 0.2.3 | iè |
### 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 cù .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 pò 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:
- 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.
- 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.
- 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è sesearch_leaked_credentialshè 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
- [pagina di l'editore npm per ddjidd5640](https://www.npmjs.com/~ddjidd5640) — 22 pacchetti attualmente elencati sottu à questu contu. Fonte autorevole per u catalogu à u mumentu di a scrittura.
- [pagina di pacchetti npm per scanner di credenziali criptografici](https://www.npmjs.com/package/crypto-credential-scanner) — esempiu di artefattu Variante-A; README, a storia di e versioni è i ligami di l'autore sò visibili quì.





