TL; DR
Yon sèl editè npm te voye uit ti pakè ki gen non yo sanble ak blòk konstriksyon chak jou pou devlopman blockchain ak bous elektwonik. base58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpers, epi crypto-validate-libChak youn gen yon zouti ki fonksyone. Sepandan, apre zouti sa a, gen yon blòk kòd ki lanse poukont li epi ki egzekite lè yo enpòte modil la.
Apeprè 37 segonn apre enpòtasyon an, blòk sa a dekode yon chaj ki vini andedan pake a degize kòm yon aparèy tès, ekri li nan yon fichye kache anba anyè lakay itilizatè a, anrejistre tèt li pou rekòmanse sou chak login atravè Windows, macOS, ak Linux, epi li lanse script dekode a kòm yon pwosesis detache. Pa gen anyen nan sa ki deklanche pandan enstalasyon npm; li tann pou kòd la enpòte epi egzekite, ki se yon moman ki pi trankil pase enstalasyon an.
Chaj la pa opak. Li anbake kòm yon senp base64, kidonk dekode "aparèy tès" la rekipere dezyèm etap la nèt: a kripto-bous ak vòlè sekrè ki tann machin nan rete san fè anyen, ki rekòlte kle prive ak fraz grenn, ki chifre chak dekouvèt ak yon kle RSA-4096 ki kode an fè, epi ki èkfiltre li lè li tache li nan depo IPFS piblik, epi ki voye yon beacon chak 12 èdtan.
Nou swiv gwoup la kòm PhantomSyncTout uit pakè yo te disponib nan rejis npm nan moman analiz la, pibliye anba yon sèl kont.
| Ekosistèm | npm |
| Kontribisyon | base58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpers, crypto-validate-lib |
| Platfòm ki vize yo | Windows, MacOS, Linux |
| Konpòtman debaz | Dropper reta, lè enpòtasyon an kache kòm yon enstalasyon tès; enstale pèsistans kwa-platfòm |
| chaj | Vòlè sekrè ak bous kriptografik, chifreman RSA-4096, èsfiltrasyon atravè pinning IPFS piblik |
Anatomi atak
Chak pake sanble san remak lè ou li l premye fwa. baz58-utils, pa egzanp, se kèk kilobayt kòd asistan Base58 / Bitcoin-WIF ki pa depann de anyen — egzakteman sa non an pwomèt. Kòd ki enpòtan an chita apre modil la modil.ekspòtasyon, kote yon lektè k ap parcourir tèt fichye a gen anpil chans pou l gade: yon fonksyon ki envoke tèt li epi ki pwograme tèt li avèk yon revèy.
Chèn operasyon yo, rekonstwi apati sous pake a, fonksyone konsa:
1. Package is required() by the host project
2. A self-invoking function schedules a callback ~37,000 ms later (setTimeout)
3. On fire, the callback reads test/fixtures/keypairs.dat (a base64 blob)
4. It base64-decodes that blob into a Node.js script
5. It writes the script to ~/.cache-db/.node-sync/syncd.js (mode 0o700)
6. It installs login-persistence for that script (see below)
7. It spawns "node syncd.js" as a detached process De chwa konsepsyon remakab.
Chaj la vwayaje kòm yon aparèy tès. Dezyèm etap la pa ekri kòm yon kòd evidan. Li rete nan tès/fiksè/pè kle.dat, yon fichye base64 ki gen non li melanje nan yon pake ki pretann jere pè kle. Pou yon moun k ap gade tarball la, li sanble ak done echantiyon; pou kòd ki ajoute a, li se yon script pou dekode epi egzekite. Dropper a li menm pa gen okenn adrès rezo — sa yo rete nan dezyèm etap la — men pa gen okenn lòt obfuskasyon: fixture a se yon sèl kouch base64, kidonk dekode li (baz64 -d) rekipere tout la syncd.js ak konpòtman rezo li. Seksyon kap vini an ap eksplike sa etap rekiperasyon sa a fè.
Detonasyon an reta epi li lye ak enpòtasyon, pa ak enstalasyon. Paske deklanchè a se mande () plis yon revèy ~37 segonn olye de yon zen enstalasyon, konpòtman an evite verifikasyon ki sèlman siveye npm enstale etap, epi reta a dire pi lontan pase anpil ekzekisyon sandbox ak CI kout. Lè yon bagay egzekite, enstalasyon ki te rale pake a gentan fini depi lontan.
Yon fwa script dekode a sou disk la nan ~/.cache-db/.node-sync/syncd.js — yon chemen chwazi pou li tankou yon anyè kach woutin — goutè a fè li siviv rdemaraj sou twa gwo platfòm yo:
- Linux: yon antre cron ki relanse script la. Yo enstale antre a lè yo filtre crontab ki egziste deja a atravè grep -v senkronize, ki gen efè segondè pou kite nouvo antre a deyò yon lis senp ki fè grep pou menm non an.
- Fenèt: yon travay pwograme ki rele WinNodeSync, mete pou rekòmanse chak 12 minit.
- MacOS: yon travay launchd ki make com.apple.syncd, prezan nan plizyè nan pakè yo — yon etikèt ki imite yon sèvis sistèm Apple lejitim.
Apre sa, script la kòmanse imedyatman kòm yon pwosesis detache, kidonk li kontinye fonksyone apre pwogram enpòtasyon an fini.
Ki sa dezyèm etap la fè
Paske aparèy la se yon sèl kouch base64, dezyèm etap la dekode pwòp epi yo ka li l nèt. Tout uit pakè yo pote youn nan twa varyant menm script la, ki idantifye tèt li nan yon kòmantè header kòm phantom syncd v3 — topo durmiente ("taupe dòmi"). Travay li se vòlè materyèl bous kriptografik ak sekrè devlopè epi voye yo soti nan machin nan. Li fonksyone nan etap sa yo:
- 1. Tann jiskaske machin nan pa ap fonksyone. Anvan ou fè anyen, syncd.js tcheke konbyen tan itilizatè a te inaktif epi li sèlman kontinye apre yon sèten limit (anviwon 15 minit) — xprintidle sou Linux, ioreg HIDIdleTime sou macOS, ak yon demann PowerShell inaktivite sou Windows. Se poutèt sa, rekòlt done yo gen tandans rive lè pèsonn pa sou klavye a.
- 2. Chache yon switch aktivasyon kontwole a distansSkript la rale yon ti konfigirasyon nan yon dead-drop anvan li aji. Sous prensipal la se yon URL GitHub gist kri (gist.githubusercontent.com/juang55/…/cfg.txt); script la aktive sèlman si konfigirasyon sa a li aktif=1Si gist la pa disponib, li retounen nan twa idantifikatè kontni IPFS ki kode an dirèk, ke yo jwenn atravè pòtay piblik yo. pòtay.pinata.nwaj, ipfs.io, epi cloudflare-ipfs.comSa bay operatè a yon kontwòl pou arme/dezarme apre sa ak yon sistèm pou rekipere lè sistèm nan pa ka take-down. (Pi piti varyant lan, ki anbake nan kripto-valide-lib, èd-bous-eth, epi solana-key-utils, li retire kouch esansyèl la epi li sèlman konte sou idantifikatè IPFS yo.)
- 3. Rekòlte materyèl ak sekrè bous. Skript la mache nan anyè lakay itilizatè a — ~/.config/solana, ~/.ethereum/keystore, ~/.foundry, ~/.kas di, ~ / .ssh, epi Desktop/Dokiman/Telechajeman (ki gen ladan non dosye an panyòl), plis ~/.anviwònman ak fichye shell rc yo, ak ekivalan yo AppData kote sou Windows. Li vize kle prive Ethereum, kle WIF Bitcoin, fraz grenn BIP-39, pè kle Solana, JSON keystore Ethereum, kle SSH, ak varyab anviwònman ki gen sekrè. Pi gwo varyant lan (nan abi-kodaj, baz58-utils, eth-dev) pote tout diksyonè BIP-39 2048 mo a epi li itilize ekspresyon regilye pou ekstrè kle endividyèl ak fraz grenn valide nan nenpòt tèks li li; de pi piti varyant yo olye de sa matche dosye yo pa mo kle (pitit pitit, mnemonik, bous, metamask, Phantom, chèk, san danje, …) epi telechaje dosye antye.
- 4. Chifre epi retire enfòmasyon yo atravè yon sèvis pinning piblik. Chak rezilta vini ak yon anprent dijital lame (non itilizatè@non òdinatè, platfòm, timestamp) epi chiffres ak yon kle piblik RSA-4096 ki kode an dirèk entegre nan script la. Apre sa, yo telechaje dosye chiffres la lè yo tache li sou IPFS atravè api.pinata.cloud/pinning/pinJSONToIPFS, otantifye ak kalifikasyon API Pinata ki kode an fè. Pa gen okenn sèvè C2 espesyal pou sezi: done yo vòlè a estoke nan yon depo piblik desantralize, operatè a ka rekipere li lè l sèvi avèk kontni ki soti nan done yo. Telechajman yo espace ak kèk segonn jitter o aza, ak yon jounal lokal de timestamp | kalite-kle | hach-retounen se kenbe nan ~/.cache-db/.node-sync/.sl.
- 5. Pèsiste epi limen limyè a sou yon sik 12 èdtan. Dezyèm etap la retabli pwòp pèsistans li — yon antre cron sou Linux, yon com.apple.syncd travay launchd sou macOS, ak yon travay pwograme ki rele WindowsNodeSync sou Windows — konfigire pou rekòmanse chak 12 èdtan. Remake byen sa a se yon diferan Non travay Windows la soti nan sa dropper a enstale a (WinNodeSync); tou de vo lapenn pou chèche yo.
Timeline
Yo te pibliye uit pakè yo an yon sèl rafale nan dat 2026-07-13 ak 2026-07-14. Plizyè ladan yo gen plis pase yon vèsyon; dropper a idantik nan tout vèsyon yo, se sèlman décalage liy yo ki chanje pandan gwosè kòd itilite ki anlè a chanje.
| Dat | evènman |
|---|---|
| 2026-07-13 | Premye pakè yo nan gwoup la parèt anba yon sèl piblikatè (solana-key-utils, eth-wallet-helpers, crypto-validate-lib ak premye vèsyon rès la) |
| 2026-07-13 → 07-14 | Non ki rete yo ak vèsyon ki vin apre yo pibliye; menm bato depo yo te ajoute nan chak |
| 2026-07-14 | Tout uit yo make epi analize; chak pake toujou enstalab nan rejis la. |
Pandan tout rafale a, repitasyon rejis editè a te chanje soti nan yon eta net nan kòmansman gwoup la pou rive nan yon eta negatif fò pandan deteksyon yo t ap akimile — yon efè segondè ou ka obsève nan lefèt ke pakè yo te siyalize, pa yon karakteristik ki te fèt espesyalman pou sa.
Endikatè Konpwomi
Yo te konfime prezans tout endikatè ki anba yo nan moman analiz la — sa yo ki nan tablo "Dezyèm etap" yo grasa dekodaj. tès/fiksè/pè kle.dat epi li lekti rekipere a syncd.js.
Dosye ak chemen
| Endikatè | Wòl |
|---|---|
~/.cache-db/.node-sync/syncd.js | Dezyèm etap dekode, ekri ak mòd 0o700 |
~/.cache-db/.node-sync/.sl | Jounal eksfiltrasyon lokal (timestamp | kalite kle | hach IPFS) |
test/fixtures/keypairs.dat | Chaj kode Base64 ki mete anndan tarball la kòm yon "aparèy tès" |
Enfrastrikti rezo dezyèm etap la (rekipere nan syncd.js)
| Endikatè | Wòl |
|---|---|
gist.githubusercontent.com/juang55/b298754cb72942b1cdcf02ccd45cde2f/raw/cfg.txt | Aktivasyon an pa fonksyone; script la fonksyone sèlman si konfigirasyon an li. active=1 |
Qmcqz3w8j4qFQXDAXAxnrdc2oSX3nzBT4NqtpTqL8mr1ga | Konfigirasyon IPFS an rezèv (CID) |
QmdTXoqVmTHY1i4ZWLdLkoQ9YChp5TXPh5cWXwnAYZt5iF | Konfigirasyon IPFS an rezèv (CID) |
QmfJkLU5gdCpqbbqEjWYC2anXW9FmuEeSLLeLiHVJKYUjp | Konfigirasyon IPFS an rezèv (CID) |
gateway.pinata.cloud, ipfs.io, cloudflare-ipfs.com | Pòtay IPFS yo itilize pou chèche konfigirasyon an rezèv |
api.pinata.cloud/pinning/pinJSONToIPFS | Pwen final èsfiltrasyon, done yo vòlè yo tache ak IPFS piblik la |
| Kle API Pinata | 13c766575b9270a9825d, kalifikasyon pou eksfiltrasyon ki kode an dirèk |
Objektif koleksyon dezyèm etap (rekipere nan syncd.js)
| Endikatè | Wòl |
|---|---|
~/.config/solana, ~/.ethereum/keystore, ~/.foundry, ~/.hardhat, ~/.ssh, ~/.env, fichye shell rc yo | Repètwa/dosye yo te fouye pou kle ak sekrè |
AppData\Roaming\Solana, AppData\Local\ethereum\keystore | Ekivalan Windows yo te chèche |
| Kalite atifak yo rekòlte | Kle prive ETH, Bitcoin WIF, fraz grenn BIP-39, pè kle Solana, Ethereum keystore JSON, kle SSH, varyab anviwònman sekrè |
Atifak pèsistans
| Platfòm | Endikatè |
|---|---|
| Linux | lansman antre cron syncd.js; enstale atravè crontab filtre atravè grep -v syncd |
| Windows | travay pwograme WinNodeSync (gout-gout) ak WindowsNodeSync (dezyèm etap) |
| MacOS | etikèt lanse com.apple.syncd |
| tout | Dezyèm etap la repete tèt li sou yon sik 12 èdtan |
Konpòtman
- Fonksyon oto-envokasyon ajoute apre modil.ekspòtasyon, orè a setTimeout de ~37,000 ms sou enpòtasyon.
- pitit_pwosesis spawn("nœud", ) avèk opsyon detache a mete.
- Aktivasyon idle-dependent nan dezyèm etap la (xprintidle / ioreg Tan inaktivite HIDidleTime / PowerShell; ~papòt 15 minit).
- Chifreman RSA-4096 pou chak rezilta, answit HTTPS POST nan yon API pinning IPFS piblik.
Pakè ak vèsyon (npm, piblikatè solbuilder_io)
| Pake | vèsyon |
|---|---|
base58-utils | 1.0.0, 1.0.1, 1.0.3 |
abi-encode | 1.0.0, 1.0.1, 1.0.2 |
eth-dev | 1.0.0, 1.0.1, 1.0.2 |
arb-kit | 1.0.0, 1.0.1 |
layer2-sdk | 1.0.0, 1.0.1 |
solana-key-utils | 1.0.0 |
eth-wallet-helpers | 1.0.0 |
crypto-validate-lib | 1.0.0 |
Editè
- solbuilder_io - angel_lopez89[@]proton[.]mwen, imèl pa verifye, pa gen kont kontwòl sous verifye, pa gen depo lye.
Atribisyon ak Konpòtman Obsève
Uit pakè yo pataje yon sèl kont piblikatè ak yon sèl chaj. Chak pakè se yon pakè trivial — kèk kilobyte kòd itilite reyèl ak menm dropper a ajoute — pibliye san yon depo lye epi anba yon imèl jetab ki pa verifye. Inifòmite sa a, chemen pataje pou lage done yo, etikèt pèsistans pataje yo, ak pataje a... pè kle.dat Fichye staging yo se sa ki lye gwoup la ansanm.
Pakè yo trè fran sou pwòp konpòtman yo. solana-key-utils pote kòmantè anliy ki dekri blòk ki ajoute a an tèm senp — youn mete etikèt sou li FANTOM: pèsistans envizib, yon lòt (an panyòl) li Egzekite tèt nan background nan, "kouri taupe a nan background nan." Sa yo se anotasyon pwòp kòd la sou sa li fè; non kanpay la nan pòs sa a soti nan premye etikèt sa a ansanm ak fo nœd "senkronizasyon daemon" an (senkronizasyon) ke machin pèsistans lan imite.
Nou dekri sèlman sa kòd la fè yon fason obsèvab. Nonmen pakè yo — tout tèm kriptografik, bous elektwonik, ak zouti blòkchenn — endike odyans devlopè ki gen plis chans pou rale yo pa non; li pa poukont li etabli kiyès piblikatè a ye. Dezyèm etap la te konplètman rekiperab lè yo te dekode aparèy base64 la, epi konpòtman li dekri pi wo a: li kolekte kle bous elektwonik, fraz grenn, ak sekrè epi li ekstrè yo, chifre ak RSA, nan depo IPFS piblik atravè Pinata. Yon chwa konsepsyon remakab se absans yon sèvè C2 prive — konfigirasyon an soti nan yon gist GitHub ak IPFS, epi done yo vòlè yo pake nan depo desantralize piblik ki gen kle pa hach kontni, tou de pi difisil pou sezi pase yon sèl lame kontwole pa yon atakè. Pa gen okenn rapò piblik anvan ki koresponn ak gwoup sa a ki te jwenn nan moman ekriti a.
Enpak, Tandans ak Gid pou Defansè yo
Ki moun ki ekspoze. Nenpòt moun ki te ajoute youn nan pakè sa yo nan yon pwojè Node epi ki te egzekite kòd ki enpòte li. Paske detonasyon an se nan moman enpòtasyon an olye ke nan moman enstalasyon an, jis gen pakè a prezan pa sifi - men nenpòt itilizasyon nòmal ki chaje modil la rive nan chaj la. Non atiran yo vize devlopè ki bati sou Ethereum, Solana, Arbitrum, Layer-2, ak zouti bous/kodaj jeneral - popilasyon ki gen plis chans pou gen egzakteman byen dezyèm etap la ap chèche yo. Nenpòt moun ki te egzekite youn nan modil sa yo sou yon machin ki gen kle bous, fraz grenn, depo kle, kle SSH, oswa .env sekrè yo ta dwe trete kalifikasyon sa yo kòm konpwomèt epi chanje yo.
De modèl ki vo lapenn konprann. Premyèman, chaj-kòm-aparèy: anbake dezyèm etap la kòm base64 andedan yon fichye done ki gen yon non ki lojik (tès/fiksè/pè kle.dat) kenbe sous vizib pake a pwòp epi pouse kontni move a nan yon dosye ke zouti revizyon ak moun k ap fè rechèch souvan trete kòm done inaktif. Dezyèmman, ekzekisyon reta nan moman enpòtasyon an ak pèsistans kwa-platfòmRetire deklanchè a nan zen enstalasyon an, ajoute yon revèy, epi pèsiste atravè cron, travay pwograme yo, ak launchd se yon etap volontè lwen teknik enstalasyon-script ki pi fè bwi ke eskanè rejis otomatik la siveye pi pre.
Gid pou defansè ak moun k ap kenbe antretyen yo:
- Trete kòd ki ajoute apre modil.ekspòtasyon kòm yon priyorite revizyon — lojik dropper a souvan kache anba sifas "reyèl" modil la.
- Pa sipoze fichye done yo inaktif. Yon blob base64 anba tès/fiksè/ ki li pandan ekzekisyon an epi ki dekode a se adjasan a ekzekisyon an; li drapo lekti pandan ekzekisyon nan fichye aparèy ki bay yon fonksyon/eval/ekri-apre-anjandre chèn.
- Chache chemen gout la ~/.cache-db/.node-sync/ ak pou inite pèsistans yo WinNodeSync (travay pwograme) ak com.apple.syncd (launchd) sou machin devlopè ki te rale non sa yo.
- Alèt sou pwosesis Node ki kreye antre cron, travay pwograme, oswa travay launchd — bibliyotèk lejitim yo raman fè sa lè y ap enpòte.
- Prefere fichye lockfile ak vèsyon fikse, epi revize diferans nenpòt nouvo ti depandans "itilite", espesyalman pakè zewo-depandans pibliye pa kont ki pa verifye ki pa gen okenn depo lye.
Pou defansè rejis yo, konklizyon an se ke siveyans enstalasyon-hook la nesesè men li pa sifi: yon dropper ki fonksyone nan moman enpòtasyon an, ki retade pa revèy, ki mete andedan yon fichye done ap pase yon verifikasyon ki sèlman nan moman enstalasyon an, epi etap pèsistans lan souvan se siyal ki pi fò ki rete pou obsève.




