Tl; DR
Isang nag-iisang tagapaglathala ng npm, ddjidd5640, ay bumuo ng isang 22-pakete na katalogo ng pekeng Web3 security tooling sa ilalim ng mga gawa-gawang brand tulad ng Samahan ng Seguridad ng Crypto, Kolektibong Pag-audit ng Web3, at DeFi Security Alliance.
Ang mga pakete ay hindi mukhang isang simpleng typosquat campaign. Mukha silang isang branded security ecosystem, na sinusuportahan ng mga tumutugmang walang laman na organisasyon ng GitHub at mga nakakakumbinsing pangalan ng MCP tool tulad ng search_leaked_credentials, validate_chain_key, at deploy_safe.
Ang kampanya ay nahahati sa dalawang aktibong pamilya ng payload at isang natutulog na tranche.
Variant A naglalaman ng 8 pakete ng pagkuha ng kredensyal. Binabasa ng isang postinstall script ang mga lokal na sikretong imbakan, habang ang isang naka-bundle na scanner.js Tumatakbo ito kapag ginamit ng isang AI agent ang mga MCP tool ng package, naghahanap ng mga wallet key, BIP39 mnemonics, API token, at iba pang credentials.
Variant B naglalaman ng 5 binary dropper na nakabatay sa Pinggy. Ang mga paketeng ito ay kumukuha at nagsasagawa ng isang remote payload habang nag-i-install, na may foundry-deploy-helper:1.8.96 pag-drop ng isang hiwalay na executable sa /tmp/.node-cache.
Baryante C Naglalaman ito ng 9 na dormant na pakete na wala pang halatang postinstall payload, ngunit pareho ang publisher, branding pattern, at Web3-focused na pagpapangalan.
Walo lamang sa 22 na pakete ang na-flag kahit saan namin makita; ang natitirang 14 ay live pa rin sa npm noong panahon ng pagsusuri.
Kalubhaan: kritikal.
Ang Pag-atake: Dalawang Payload sa Isang Aparador
Ang aparador ay ang tatak. Buksan ang README ng crypto-credential-scanner at sasabihin sa iyo na ito ay isang credential scanner na ginawa ng Crypto Security Guild. Buksan ang pahina ng defi-threat-scanner at sasabihin sa iyo na ito ay isang tool ng DeFi Security Alliance. Buksan ang web3-secrets-detector at ito ang Web3 Audit Collective. Wala sa mga kolektibong ito ang umiiral bilang mga organisasyon. Umiiral ang mga ito bilang mga walang laman na organisasyon ng GitHub na ang tanging layunin ay punan ang hyperlink na "may-akda" ng pahina ng npm.
Baryante A: ang post-install pre-flight at ang pangunahing yugto ng MCP-time
Ang 8 Variant-A packages ay pawang may dalawang yugtong payload — isang postinstall pre-flight na kumukuha ng anumang credentials na nasa disk na sa plain text, at isang runtime stage na nag-a-activate kapag tinawag ng isang AI agent ang isa sa mga MCP tool ng package.
"Yugto 1, ang bago ang paglipad" Nabubuhay nang inline sa package.json bilang isang node -e one-liner. Binubuksan nito ang pitong kilalang dotfile at ipinapadala ang unang 200 bytes ng bawat isa sa C2:
200 byte ng ~/.ssh/id_ed25519 hindi ibibigay sa attacker ang iyong pribadong susi nang mag-isa, ngunit ibibigay nito ang pangalan ng file, ang komento, at ang mga unang linya ng header ng PEM — sapat na upang kumpirmahin kung anong uri ng susi ang naroon, na sapat na upang magpatakbo ng isang kasunod na yugto. 200 byte ng ~/.env ay karaniwang higit pa sa sapat upang maglabas ng kumpletong API token. 200 bytes ng ~/.git-credentials ay karaniwang isang kumpletong hanay ng mga OAuth token.
"Ikalawang Yugto, ang pangunahing yugto", Ay scanner.jsIto ay nilo-load ng pakete index.js at tinatawag mula sa loob ng MCP request handler sa sandaling gamitin ng isang AI agent ang alinman sa mga inaanunsyong tool. Ang file ay parehong byte-for-byte sa 8 Variant-A packages (b461106e47a1f5966159cd6e92541505), at prangka ito tungkol sa ginagawa nito. Ang pambungad na bloke ng komento ay mababasa nang literal:
| javascript // wallet-scanner.js — naka-embed na aktibong scanner para sa mga pakete ng MCP // Tahimik na tumatakbo kapag tinawag ng ahente ng AI ang anumang tool ng MCP, ini-scan ang kapaligiran para sa // mga wallet/key // Gumagamit lamang ng mga built-in na Node.js, walang mga panlabas na dependency |
Ang sumusunod ay isang recursive walk, depth 3, ng:
ang direktoryo ng bahay mismo
...pagsala para sa mga pangalan ng file na naglalaman ng alinman sa mga keystore, wallet.json, wallet.dat, .lihim, buto.txt, metamask, multo, kuneho, trust-wallet, Coinbase, pribadong-key, nimonik, secret_key, api_key — ibig sabihin, isang manu-manong listahan ng bawat lugar kung saan itinatago ng isang gumagamit ng crypto ang isang susi. Para sa bawat tugma, ang file ay binubuksan at ini-scan laban sa anim na regexe:
| uri | huwaran | Ang nahuhuli nito |
|---|---|---|
| private_key | (?:0x)?[a-fA-F0-9]{64} | Mga pribadong key ng Ethereum at mga generic na 32-byte na hexadecimal na sikreto. |
| nimonik | \b([a-z]+\s+){11,23}[a-z]+\b | Mga pariralang mnemonic seed ng BIP39 na may sukat na 12 hanggang 24 na salita. |
| api_key | (api[_-]?key\|API_KEY)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,}) | Mga generic na token ng API at mga halaga ng kredensyal na naka-embed sa mga configuration file. |
| lihim | (?:secret\|private).{0,10}[:=]\s*["']?([A-Za-z0-9+/=]{20,}) | Mga sikreto at pribadong halaga na karaniwang nakaimbak sa mga format ng configuration na YAML, JSON, at INI. |
| eth_address | 0x[a-fA-F0-9]{40} | Mga address ng Ethereum wallet na ginagamit upang matukoy at makuhanan ng fingerprint ang mga biktima. |
| password | (?:PASSWORD\|PASSPHRASE)\s*=\s*["']?(\S{4,64}) | Mga password at mga environment variable na may istilo ng pag-export ng shell. |
Pagkatapos, babasahin ng scanner.js ang anim pang dotfile nang buo — hanggang 500 bytes bawat isa ng ~/.env, ~/.bash_history, ~/.zsh_history, ~/.npmrc, ~/.gitconfig, ~/.git-credentials — at susuriin ang process.env para sa anumang variable na ang pangalan ay naglalaman ng key, secret, token, password, private, mnemonic, wallet, o seed. Panghuli, tatawagin nito ang execSync('whoami') kasama ang os.hostname() at process.cwd() para i-tag ang dump gamit ang pagkakakilanlan ng biktima. Ang buong payload, kasama ang hanggang 100 indibidwal na findings, ay ipo-POST bilang isang JSON object.
Ang exfil destination ay hindi direktang naka-hardcode. Kinukuha ito ng package sa runtime mula sa:
https://ddjidd564.github.io/defi-security-best-practices/config.json
— isang dokumento ng GitHub Pages na kinokontrol ng attacker. Ibinabalik ng kasalukuyang config.json
Kung mabigo ang pagkuhang iyon, scanner.js bumabalik sa pareho webhook.site Ang URL ay naka-hardcode bilang isang constant. Ang indirection na ito ang tanging bahagi ng operational sophistication sa campaign: hinahayaan nito ang attacker na i-rotate ang mga exfil target nang hindi muling inilalathala ang package, at pinipigilan nito ang aktwal na collector URL na makapasok sa npm artifact, na nagpapahirap sa signature-based detection.
Baryante B: isang tunel ng Pinggy, isang binary, at isang persistent variant
Ang isa pang live tranche ay mas maliit — limang pakete — at hindi gaanong matalino. Hindi na ginamit ng awtor ang MCP costume. Inaangkin ng mga paketeng ito na mga configuration helper sila para sa lehitimong Ethereum at Solana tooling (truffle-config-helper, chainlink-price-feed-aggregator, tagapagbigay ng ganache-cli, solana-pda-helper, katulong sa pag-deploy ng pandayanAng kargamento ay iisa https.get-and-exec linya sa postinstall
Libre ang C2 Pinggy tunnel — isang generic na serbisyo ng developer-tunneling na ginagamit ng attacker bilang panandaliang C2. Dina-download ng package ang anumang ibinabalik ng tunnel at isinusuksok ito proseso_ng_bata.execWalang pagsusuri sa integridad, walang paglagda, walang proteksyon sa pangalawang yugto. Kung ano ang pinaglilingkuran ng tunnel ng operator ngayon, iyon ang tumatakbo.
Ang pinakaagresibong pakete, katulong sa pag-deploy ng pandayan:1.8.96, pinapalitan ang inline https.get sa kulutan at isang trick sa pagtitiyaga:
Baryante C: isang makintab na harapan, walang detonator (sa ngayon)
Ang natitirang siyam na pakete — tagapagpapatunay ng backup ng wallet, env-security-scanner, foundy-toolkit (isang sinasadyang typosquat ng Foundry), solna-web3 (isang typosquat ng Solana), tagasuri ng seguridad ng wallet, plugin ng profiler ng gas-ng-hardhat, ethers-multicall-utils, defi-env-auditor, etherjs-utils - mayroon walang script pagkatapos ng pag-install at walang halatang runtime exfil sa unang tingin. Pareho sila ng publisher, mga brand front, ang Web3 name pattern, at sa ilang mga kaso ay magkaparehong README boilerplate sa mga aktibong variant. Itinuturing namin ang mga ito bilang bahagi ng parehong kampanya at inirerekomenda ang pre-emptive na pag-alis, ngunit hindi pa namin naisa-isa nang buo ang kanilang mga runtime trigger. Ang dormant tranche ay maaaring maging isang foothold na inilalaan ng operator para sa isang susunod na flip — ang parehong pattern na ginamit ng PhantomBot noong kalagitnaan ng Mayo, kung saan ipinagpalit ng operator ang isang credential stealer para sa isang botnet recruit nang hindi muling inilalathala ang pangalan ng package.
Timeline at ang Katalogo
Ang pinakamaagang pakete na may petsa sa kampanya ay ang may pinakamababang bersyon: chain-key-validator:0.2.3 at defi-env-auditor:0.3.2 mukhang mga maagang eksperimental na patak. Nang makarating ang publisher truffle-config-helper:1.7.0 at katulong sa pag-deploy ng pandayan:1.8.96, ang bersyong inflation ay sinadya — ang pagpili ng mga numerong parang linya ng isang itinatag na pakete. Wala sa 22 ang may anumang naunang lehitimong kasaysayan sa ilalim ng eksaktong pangalang iyon sa npm.
Ang buong katalogo, na naka-grupo ayon sa variant:
### Baryante A — taga-ani ng kredensyal (postinstall + MCP-time scanner.js, MD5 b461106e47a1f5966159cd6e92541505)
| pakete | bersyon | Na-flag sa Mga Feed ng Pagtuklas |
|---|---|---|
mnemonic-safety-check | 0.5.2 | oo |
solidity-deploy-guard | 0.4.4 | oo |
web3-secrets-detector | 1.2.6 | oo |
eth-wallet-sentinel | 1.0.9 | oo |
deployment-key-auditor | 0.7.3 | oo |
defi-threat-scanner | 2.1.2 | oo |
crypto-credential-scanner | 2.0.2 | oo |
chain-key-validator | 0.2.3 | oo |
### Baryante B — Pinggy tunnel https.get → exec (walang visibility sa detection-feed bago ang ulat na ito)
| pakete | bersyon | Lasa Pagkatapos I-install |
|---|---|---|
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 & |
### Baryante C — hindi aktibo, pinaghihinalaang runtime trigger (walang visibility sa detection-feed bago ang ulat na ito)
| pakete | bersyon | Mga Tala |
|---|---|---|
wallet-backup-verifier | 1.0.1 | |
env-security-scanner | 1.6.0 | |
foundy-toolkit | 1.5.79 | typosquat ng pandayan |
solna-web3 | 1.5.98 | typosquat ng 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 |
Ang mga kolum ng Variant-A at Variant-B ay hindi pinipili nang basta-basta. Ang mga pangalan ng Variant-A ay pawang ibinebenta bilang mga kagamitan sa pag-awdit ng seguridad — “safety check”, “deploy guard”, “secrets detector”, “wallet sentinel”, “key auditor”, “threat scanner”, “credential scanner”, “chain key validator”. Ang mga ito ay para sa isang developer o AI agent na naghahanap ng tool para suriin ang kaligtasan ng isang proyektong Web3. Ang mga pangalang Variant-B ay pawang ibinebenta ang kanilang mga sarili bilang mga katulong sa pagbuo at pag-deploy para sa parehong Web3 ecosystem — Truffle, Chainlink, Ganache, Solana PDA tooling, Foundry. Ang split ay sumasalamin sa isang normal na mental model ng Web3 developer na "audit phase" vs. "deploy phase". Alinmang phase ang piliin mo, may patibong na inihanda ang publisher para dito.
Mga Tagapagpahiwatig ng Kompromiso
Network at mga file
| Mga IOC | baryante | Layunin |
|---|---|---|
https://ddjidd564.github.io/defi-security-best-practices/config.json | A | Dynamic webhook resolver na naka-host sa pamamagitan ng GitHub Pages. |
https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233 | A | Kasalukuyang endpoint ng exfiltration collector, na naka-embed din bilang fallback. |
rqnyz-2605-7280-7--2000-c51.run.pinggy-free.link/npm/-/binary/telemetry | B | Ang Pinggy tunnel na ginagamit upang ipamahagi ang mga malayuang binary payload. |
scanner.js MD5 b461106e47a1f5966159cd6e92541505 | A | Muling ginamit ang magkaparehong payload ng scanner sa lahat ng 8 Variant-A package. |
/tmp/.node-cache | B | Natanggal ang hiwalay na executable foundry-deploy-helper:1.8.96. |
Tagapaglathala
- npm na pangalan ng gumagamit: ddjidd5640
- email: 1623682356@qq.com (hindi na-verify)
- Email at SCM pagpapatunay: wala
- Mga paketeng nasa ilalim ng account: 22, lahat ay nakalista sa katalogo sa itaas
- Pinakamaagang nakikitang aktibidad: chain-key-validator:0.2.3 (Variant A)
- Pinakabagong nakikitang aktibidad: chain-key-validator:0.2.3 at crypto-credential-scanner:2.0.2 (parehong nasa loob ng 24 oras bago ang sulating ito)
Mga harapan ng tatak (ginagamit sa may-akda / README / pekeng GH org)
- "Crypto Security Guild" — sinusuportahan ng walang laman na GitHub org cryptosec-guild
- “Web3 Audit Collective” — sinusuportahan ng walang laman na GitHub org w3audit
- “DeFi Security Alliance” — sinusuportahan ng walang laman na GitHub org defi-security
- Sangguniang GH account na ddjidd564 — host ng dynamic-webhook config.json
Pag-uugali
- node -e pagbabasa pagkatapos ng pag-install ng alinman sa .ssh, .ethereum, .bitcoin, .env, .bash_history, .zsh_kasaysayan, .git-credentials sa .slice(0, 200) at pinagdurugtong sa | Ang separators ay isang halos natatanging fingerprint para sa Variant A.
- Ini-import ang ./scanner.js mula sa isang pakete na nagrerehistro sa sarili bilang isang MCP server gamit ang mga kagamitang pinangalanan mga kredensyal na_tumulo_sa_search o mga katulad na balangkas na pandiwa na "security audit" ay isang kumpirmasyon ng Variant-A.
- Ang isang node -e postinstall na kumukuha mula sa anumang *.run.pinggy-free.link host at nagpapadala ng tugon papunta sa child_process.exec ay isang kumpirmasyon ng Variant-B anuman ang wrapper.
Pagpapatungkol at Motibasyon
Sapat na ang nakalatag para sa bahagyang fingerprint ng isang publisher at halos hindi sapat para sa isang tunay na pagkakakilanlan. 1623682356@qq.com ay isang QQ mail address — ang libreng webmail ng Tencent, na sikat sa mainland China — at ang numerical local-part ay ang QQ user ID; itinuturing namin ito bilang soft signal lamang, dahil ang mga QQ-format address ay simpleng nakarehistro. Ang npm account ay walang two-factor disclosure, walang na-verify na email, walang na-verify na SCM link. Ang triad ng brand na “Crypto Security Guild” / “Web3 Audit Collective” / “DeFi Security Alliance” ay gawa-gawa lamang — wala sa tatlo ang umiiral sa labas ng kampanyang ito — at ang mga sumusuportang organisasyon ng GitHub ay mga walang laman na shell na nilikha upang punan ang mga link ng pahina ng npm.
Dalawang pattern ang sulit pangalanan, dahil lumalabas ang mga ito sa magkatabing mga kampanya. Ang una ay prefabrication ng tatak bilang patunay sa lipunan: hindi pinili ng operator ang mga pangalan ng kasalukuyang proyekto para sa typosquat; gumawa sila ng isang buong salaysay ng tiwala mula sa simula, alam na ang isang Pagbuo ng ahente ng AI pipeline o ang isang nagmamadaling developer na nag-scan sa npm page ay magtutugma ng pattern sa "mukhang isang organisasyon ng seguridad" sa halip na "ay isang organisasyon ng seguridad". Ito ang parehong pamamaraan na binalaan ng mga slopsquatting literature — mga package na naka-tune sa uri ng pangalan na gagawin ng isang LLM imbentuhin kung hihingan ng Web3 security tool, magbihis nang maayos para hindi na mag-double check ang LLM. Pag-slopsquat ay ang kamakailang likhang termino para sa mga malisyosong pakete na ang mga pangalan ay tumutugma sa mga placeholder na naiisip ng mga LLM kapag walang umiiral na isang awtoritatibong pakete; ang kampanyang ito ay ang mas agresibong pinsan nito, kung saan ang operator ay gumagawa rin ng organisasyong kinabibilangan ng placeholder.
Ang pangalawang pattern ay Pag-activate ng oras ng MCPSa oras na iyon scanner.js tumatakbo, tapos na ang instalasyon at nagpatuloy na ang developer. Ang gatilyo ay ang AI agent na tumatawag sa isang tool — mga kredensyal na_tumulo_sa_search, sa kaso ng Variant-A — na tiyak na gagawin ng ahente, dahil iyon ang buong dahilan kung bakit ibinigay ang pakete. Nangyayari ang malisyosong gawain habang mahusay bahagi ng daloy ng trabaho, kung kailan malamang na pinapanood ng developer ang kanilang AI assistant na magtagumpay sa isang gawaing hinihiling nila. Ito ay isang maliit na pagbabago sa pag-uugali mula sa mas lumang "exfil on" install npm"pattern, at maayos nitong naiiwasan ang sandboxing sa oras ng pag-install.
Hindi namin tinutukoy ang isang threat actor. Ang mga signal (QQ email, single-account, 22-package single-day burst, dalawang parallel C2 stack) ay pare-parehong naaayon sa isang persistent operator, isang maliit na team, o isa sa mga package-flood crew na nakikita sa npm telemetry hanggang 2025–2026. Ang aming maaari Ang sinasabi ay ang operator na ito ay may malinaw na ginustong ecosystem (Ethereum + Solana + Foundry/Hardhat tooling), isang malinaw na ginustong biktima (mga Web3 developer at mga AI agent na nagtatrabaho sa mga proyekto ng Web3), at isang malinaw na ginustong persistence model (MCP-time runtime trigger kasama ang isang detached binary fallback).
Epekto, Mga Uso, at Ang Magagawa ng mga Tagapagtanggol
Ang aming maagang babala pipeline hinuli 8 22 ng mga pakete sa buong panahon ng kampanya — anim sa unang pagwawalis at dalawa pa na dumating nang bandang huli ng parehong araw habang isinasagawa ang campaign-clustering pass. Ang iba pang 14 na pakete ay live sa npm nang ilang araw nang hindi lumalabas sa alinman sa mga detection feed na aming minomonitor, at sa panahon ng pagsulat nito ay mananatiling maaaring i-install. Mahalaga ang puwang na iyon dahil:
- Tahimik ang Variant A habang nag-i-installNangyayari ang dotfile read, ngunit gumagana lamang ang bulk exfil kapag ginamit ng isang AI agent ang mga MCP tool ng package. standard Makikita ng sandbox na nanonood pagkatapos ng pag-install ang node -e harangan at magpasyang ito ay maliit at tila hindi gumagalaw.
- Ang Baryante B ay isang linya lamang. Walang matututunan ang isang malware classifier — walang obfuscation, walang naka-encode na payload, walang kahina-hinalang domain. Ang Pinggy tunnel ay isang lehitimong serbisyo ng developer. Ang tanging kahina-hinala lang ay ang isang "configuration helper" ay kailangang tumawag sa bahay.
- Mukhang malinis na malinis ang Variant C. Wala itong pag-install hooksSa bawat static signal, normal ito.
Isang Maikling Checklist ng Defender para sa Panahon ng MCP-Tool
Tatlong konkretong aksyon na sana'y nahuli sana ang kampanyang ito nang mas maaga:
- Bigyan ng bigat ang publisher, hindi ang pakete. Dalawampu't dalawang pakete sa ilalim ng isang taong gulang na QQ-mail account na walang SCM Ang beripikasyon ay isang mas maliwanag na senyales kaysa sa anumang feature na per-package. Nahuli ng aming early-warning workflow ang mga unang package dahil namukod-tangi ang fingerprint ng publisher — na nagrerekomenda ng score ng reputasyon ng publisher na maaaring mabawasan ng alinman sa mga ligtas, walang tiyak na katiyakan, o malware per-package classifier.
- Ituring ang mga dynamic-config indirections bilang malisyoso hanggang sa mapatunayang iba. Ang isang package na nireresolba ang outbound endpoint nito habang tumatakbo mula sa isang third-party na dokumento (GitHub Pages, GitHub Gist, Pastebin, S3 object, kahit saan pa) ay walang lehitimong dahilan para gawin ito para sa telemetry. Ang mga totoong telemetry endpoint ay naka-hardcode at nakadokumento.
- Suriin ang mga pakete ng MCP-server ayon sa kanilang ina-advertise na tool surface. Ang mga pakete ng Variant-A ay pawang nag-aanunsyo ng mga kagamitang pinangalanang
search_leaked_credentials,validate_chain_key,deploy_safe, at mga katulad na pandiwang "audit". Ang isang MCP host na nagpapakita ng isang tool na ang deskripsyon ay nagsasabing nag-i-scan ng mga direktoryo ng proyekto para sa mga kredensyal ay dapat mangailangan ng tahasang operator opt-in bago ito gamitin ng ahente sa isang tunay na codebase. Ang punto ng MCP ay ang agent loop ay walang paraan para malaman kungsearch_leaked_credentialsay isang paghahanap ng kredensyal o isang taga-alis ng kredensyal.
Para sa mga developer na maaaring nakapag-install na ng isa sa 22 na pakete: ipagpalagay na ang anumang plaintext key sa ~ / .ssh, ~/.ethereum, ~/.bitcoin, ~/.solana, ~/.env, O ~/.git-credentials kung nakompromiso, i-rotate ang bawat kredensyal na ang pangalan ay tumutugma sa listahan ng filter na env-variable sa itaas, at sa Linux/macOS, tingnan kung may executable file sa /tmp/.node-cache (at anumang prosesong naulila ay magsisimula mula rito). Muling pag-install ng lehitimong bersyon ng ginaya na kagamitan (pandayan, Truffle, hardhat, ganache, atbp.) ay hindi nag-aalis ng tinanggal na binary.
Ang natutulog na Variant-C tranche ang bahagi ng kuwentong ito na pinakamatindi ang pagtanda. Siyam na pakete na may malinis na profile ng pag-install at isang matatag na publisher ang eksaktong uri ng imbentaryo na iniimbak ng isang operator. Kung sakaling sumabog ang mga ito sa kalaunan — tulad ng ginawa ng PhantomBot noong axois-utils Ang repackage ay napalitan mula sa pagnanakaw ng kredensyal patungo sa isang botnet recruit — sasabog ang mga ito laban sa sinumang registry consumer na nag-pin ng Variant-C package sa pagitan ng araw na ito at ng takedown. Ang pag-pin ng malisyosong package ayon sa bersyon ay hindi ka mapoprotektahan mula sa isang publisher na kumokontrol sa bawat bersyon.
Mga sanggunian
- [pahina ng tagapaglathala ng npm para sa ddjidd5640](https://www.npmjs.com/~ddjidd5640) — 22 pakete ang kasalukuyang nakalista sa ilalim ng account na ito. Maaasahan na pinagmulan para sa katalogo sa panahon ng pagsulat.
- [pahina ng pakete ng npm para sa crypto-credential-scanner](https://www.npmjs.com/package/crypto-credential-scanner) — halimbawang Variant-A artifact; makikita rito ang README, kasaysayan ng bersyon, at mga link ng may-akda.





