TL; DR
Kati ya 2026-06-15 na 2026-06-16 mchapishaji mmoja wa npm alisukuma vifurushi sita — matoleo 26 kwa jumla — ambayo huendesha hati ya muda wa kusakinisha kila npm installKila kifurushi husafirisha README ikikitangaza kuwa ni kipengee cha utafiti "kibaya" cha HackerOne / GitHub Bug Bounty ambacho "hakigusi" kamwe thamani za kitambulisho na "hakifanyi uthabiti wowote." Nambari hailingani na kanusho. Kwenye viendeshaji vya Linux CI, alama za vidole husakinisha mazingira na kuchunguza sehemu ya mwisho ya wingu la instance-metadata; kwenye Windows, inahitaji mwinuko, huendesha kama SYSTEM, na kufungua njia ya amri kwa seva pangishi ya nje. Kiashiria kimoja cha kutafuta sasa ni seva pangishi ya C2 173.255.233[.]239Ukali: juuMfumo ikolojia ulioathiriwa: npmMajina huchanganyika katika kelele ya utegemezi inayoendelea (metrics-pipeline-d8k2, event-metrics-q3x7, pkg-telemetry-r4f9, na ndugu watatu).
Shambulio: Jinsi Linavyofanya Kazi
Kila kifurushi katika kundi kimejengwa kwa njia ile ile. kifurushi.json huunganisha amri hiyo hiyo katika mzunguko wa maisha miwili hooks:
{ "scripts": { "preinstall": "node run.js", "postinstall": "node run.js" } } Kukimbia kwenye zote mbili kusakinisha mapema na kusakinisha baada ya inamaanisha mzigo wa malipo unawaka ikiwa hatua za usakinishaji baadaye zitashindwa au la. run.js yenyewe ni kisambazaji cha jukwaa cha mistari kumi:
// Platform dispatcher — runs beaconNN.js on Windows, beacon_linux.js on Linux. // GitHub Bug Bounty authorized research. Contact: nicholas@curran.tech 'use strict'; const { execFileSync } = require('child_process'); const path = require('path'); const node = process.execPath; const script = process.platform === 'win32' ? path.join(__dirname, 'beacon34.js') : path.join(__dirname, 'beacon_linux.js'); try { execFileSync(node, [script], { stdio: 'inherit', timeout: 90000 }); } catch (e) {} Tabia hiyo kisha hutengana kulingana na mfumo endeshi. Vifurushi vyote sita vina vipande viwili sawa — run.js na beacons za jukwaa — kwa hivyo ni vitoneshi vinavyoweza kubadilishwa badala ya zana sita tofauti. Tofauti pekee yenye maana kati yao ni kasi ya kuchapisha: majina manne yalisafirishwa mara moja, huku mawili yakitolewa tena kila baada ya dakika 30-60 kwa saa, jambo ambalo huweka toleo lililochapishwa hivi karibuni mbele ya wasakinishaji na wasuluhishi hata kama zile za zamani zinavutwa.
Kwenye Linux (beacon_linux.js) wasifu wa hati ambapo inaendeshwa. Inaorodhesha majina ya vigezo vya mazingira, inasoma faili chini ya / prhundi za docker.sock, na inaendesha jina la mwenyeji na whoamiKisha hutoa ombi la HTTP kwa sehemu ya mwisho ya AWS container instance-metadata 169.254.170[.]2 — anwani ya kiungo-eneo inayouliza kazi ya ECS ili kupata usanidi wake na sifa za jukumu la muda mfupi (IMDS, huduma ya metadata ya mfano). Matokeo hutumwa kwa mkusanyaji wa kampeni katika 173.255.233[.]239.
Kwenye Windows (beacon34.js / beacon18.js) kifurushi hufanya zaidi ya wasifu wa mwenyeji wake. Msimbo uliotiwa alama huongeza kitufe cha usajili chini ya ms-mipangilio mhudumu mwenye MteuleMtekelezi thamani — njia inayojulikana ya kudhibiti akaunti ya mtumiaji ambayo inaruhusu mchakato uliozinduliwa kuendeshwa bila ombi. Inaita PowerShell na -Kupita kwa Sera ya Utekelezaji na Usemi wa Kuomba, hutekeleza katika NT AUTHORITY\SYSTEM muktadha, na huchagua seva pangishi ya nje kwa amri. Njia ya amri ya Windows hupita juu ya Handaki la wingu, mapungufu-ya-sarafu-za-kipenyo-cha-wazazi.trycloudflare[.]com:443, kurudi nyuma kwa 173.255.233[.]239:443, kwa kutumia ncha tatu za mwisho: /c2/kura ya maoni ili kupata amri, /c2/nje kurudisha matokeo, /c2/eof kufunga.
Kipi kipya hapa: kanusho kama kujificha
Kipengele kipya si mzigo — upelelezi wa kufunga-kuunganisha na mwinuko wa Windows vyote vimeandikwa vizuri. Ni hadithi ya jalada. Kila kifurushi kina README kinachosomeka kama mabaki ya ufichuzi wa uwajibikaji:
# @ncurran/sandbox-recon-880538 — authorized npm-sandbox security research Hii ni benign kifurushi kilichochapishwa chini ya wigo wa mwandishi mwenyewe wa `@ncurran` kama sehemu ya Ushiriki ulioidhinishwa wa HackerOne / GitHub Bug Bounty (npm iko katika wigo).
Inaposakinishwa, hukagua mazingira yake ya utekelezaji ... mabadiliko ya mazingira
majina muhimu pekee ... huangalia kama inajulikana sehemu za mwisho za metadata ya wingu ni inayoweza kufikiwa … Inaripoti misimbo ya hali, urefu wa majibu, na hashes — kamwe utambulisho wowote, thamani ya tokeni, au data ya mtu mwingine. Haifanyi kazi yoyote uvumilivu, hakuna mwendo wa pembeni, na hakuna hatua ya uharibifu.
Madai matatu katika maandishi hayo yanapingwa na msimbo uliosafirishwa. README inasema "hakuna uvumilivu," lakini beacon ya Windows inaandika kitufe cha mwinuko kinachotegemea usajili. Inasema "kamwe hakuna kitambulisho, thamani ya tokeni," lakini njia ya Windows inaendesha amri zilizochukuliwa kiholela kama SYSTEM, ambayo haiweki kikomo kama hicho kwa kile kinachosomwa au kurejeshwa. Hata inataja kifurushi — @ncurran/sandbox-recon-880538 — hiyo si ile inayosafirishwa, ikionyesha README ni kiolezo kilichotumika tena badala ya maelezo ya kitu kilicho mkononi. Kanusho la ridhaa katika kifurushi ambacho mwathiriwa hakukubali kusakinisha halitoi idhini yoyote. Uainishaji hapa ni mbaya bila kujali maneno. Kanusho hilo pia lina lengo tulivu: hatua ya kiotomatiki ya upimaji ambayo inasoma maandishi ya kifurushi kwa ishara za kutuliza — "isiyo na madhara," "imeidhinishwa," programu iliyopewa jina, barua pepe ya mawasiliano — inaweza kusukumwa kuelekea uamuzi salama kwa nathari ambayo mzigo wa malipo unapingana. Somo hili linawahusu wakaguzi wa kibinadamu na wa mashine vile vile: pima tabia ya wakati wa usakinishaji, sio maelezo ya README.
Timeline
Vifurushi vyote vilionekana ndani ya dirisha la saa 24. Majina manne ya toleo moja yalitua kwanza, yakifuatiwa na vifurushi viwili ambavyo vilichapishwa tena kila baada ya dakika 30-60.
| Tarehe (UTC) | tukio |
|---|---|
| 2026-06-15 18:32 | Kifurushi cha kwanza kilichapishwa — npm:pkg-telemetry-r4f9@1.0.0 |
| 2026-06-15 19:50 | npm:runtime-metrics-w7k2@1.0.0 kuchapishwa |
| 2026-06-15 20:14 | npm:build-tracker-n5p1@1.0.0 kuchapishwa |
| 2026-06-15 20:35 | npm:npm-sandbox-ping-r9t2@1.0.0 kuchapishwa |
| 2026-06-15 21:09–22:42 | npm:event-metrics-q3x7 kuchapishwa 1.0.0 → 1.0.8 (Matoleo 9) |
| 2026-06-15 23:40 → 2026-06-16 04:40 | npm:metrics-pipeline-d8k2 kuchapishwa 1.0.0 → 1.0.10 (Matoleo 11) |
| 2026-06-16 | Kundi limebaini na kuainisha ni hatari; tarball kadhaa tayari zinarudisha 404 kwenye sajili (inaendelea) |
Kampeni ni ya hivi karibuni na uondoaji bado unaendelea: wakati wa uchambuzi baadhi ya matoleo yalitatuliwa kwenye sajili na mengine hayakutatuliwa. Chukulia matoleo yote 26 kama yaliyoathiriwa.
Viashiria vya Maelewano
Packages
| mazingira | mfuko | matoleo | Hali ya Oda |
|---|---|---|---|
| npm | metrics-pipeline-d8k2 | 1.0.0 – 1.0.10 | malicious |
| npm | event-metrics-q3x7 | 1.0.0 – 1.0.8 | malicious |
| npm | runtime-metrics-w7k2 | 1.0.0 | malicious |
| npm | build-tracker-n5p1 | 1.0.0 | malicious |
| npm | npm-sandbox-ping-r9t2 | 1.0.0 | malicious |
| npm | pkg-telemetry-r4f9 | 1.0.0 | malicious |
Mtandao
| aina | Kiashiria | Vidokezo |
|---|---|---|
| IP | 173.255.233[.]239 | Mkusanyaji wa C2; Urekebishaji wa Linux POST na Windows :443 |
| Domain | diameter-coins-limitations-parents.trycloudflare[.]com | Njia ya amri ya Windows kupitia handaki ya Cloudflare, :443 |
| Njia ya URI | /c2/poll, /c2/out, /c2/eof | Kura ya amri ya Windows / matokeo / funga |
| IP | 169.254.170[.]2 | Sehemu ya mwisho ya metadata ya mfano ya AWS ECS iliyochunguzwa kutoka kwa ndoano ya usakinishaji |
Tabia
| Signal | Maelezo ya Kiufundi |
|---|---|
| Kufunga hooks | preinstall na postinstall zote mbili zinakimbia node run.js |
| Usambazaji wa jukwaa | run.js anaendesha beacon_linux.js kwenye Linux, beacon34.js / beacon18.js kwenye Windows |
| Urekebishaji upya wa Linux | Huorodhesha majina muhimu ya env-var, husomeka /prochundi docker.sock, anaendesha hostname / whoami, huchunguza IMDS |
| Mwinuko wa madirisha | ms-settings DelegateExecute Usajili wa UAC bypass; PowerShell -ExecutionPolicy Bypass + Invoke-Expression; inaendeshwa kama SYSTEM |
| Ficha | README inadai utafiti "mbaya" "ulioidhinishwa" na "hakuna uvumilivu"; inarejelea jina la kifurushi ambacho hakijasafirishwa |
Tabia ya sifa na inayoonekana
Tunamelezea mchapishaji kwa ishara zake pekee na hatusemi utambulisho wa mtu yeyote aliye nyuma ya akaunti.
- Katalogi ya ishara. Vifurushi vyote sita vilichapishwa na akaunti hiyo hiyo ya npm, npmresearch8847, pamoja na barua pepe iliyotajwa npmresearch8847@web-library.net (barua pepe na SCM uthibitisho wote haupo; hatujathibitisha umiliki). README huchapisha chini ya @ncurran wigo na kutoa mawasiliano ya nicholas@curran.tech, na run.js pointi kwenye hazina github.com/ncurran/npm-sandbox-research`. Vifurushi sita vinafanana run.js msambazaji, kawaida beacon_linux.js hatua ya upatanisho, na mwenyeji wa mkusanyaji mmoja 173.255.233[.]239`. Mpango wa majina ni thabiti: shina la jumla la sauti ya CI (metrics, telemetry, kifuatiliaji cha ujenzi, ping ya sanduku la mchanga) pamoja na kiambishi tamati kifupi nasibu.
- Kujiamini. Vifurushi sita vinaonekana kuwa kampeni moja kuhusu nguvu ya msambazaji aliyeshirikiwa, hatua ya urekebishaji, na mwenyeji wa C2. Muundo wa "utafiti ulioidhinishwa" unaonekana kuwa sawa katika README zote sita. Hatujaweza kuthibitisha kwamba programu yoyote ya kutoa hitilafu iliidhinisha shughuli hii, na madai ya kanusho hayalingani na msimbo uliosafirishwa.
- Uwezo uliozingatiwa. Mzigo wa mzigocismadarasa manne ya uwezo: utekelezaji wa msimbo wa kufunga-ndoano kwenye zote mbili kusakinisha mapema na baada ya kusakinisha; uchunguzi wa mazingira ya mwenyeji na CI kwa kutoka kwa mkusanyaji wa nje; uchunguzi wa ufikivu wa metadata ya wingu kutoka kwa muktadha wa usakinishaji; na, kwenye Windows, uongezaji wa upendeleo wa ndani, utekelezaji kama SYSTEM, na kitanzi cha amri cha kuchota na kuendesha juu ya chaneli ya nje. Kitanzi cha amri cha Windows ni uwezo wa kudhibiti kwa mbali: hutafuta maelekezo na kurejesha matokeo yake.
Athari, Mitindo na Mambo Watetezi Wanayopaswa Kufanya
Athari
Kiwango cha juu zaidi cha mwangaza ni kwa mazingira ya ujenzi otomatiki. Usakinishaji wa npm katika CI huendesha mzunguko wa maisha hooks na utambulisho wowote ambao mkimbiaji anao; kwenye mkimbiaji wa wingu utambulisho huo mara nyingi hujumuisha sehemu ya mwisho ya metadata inayoweza kufikiwa na sifa ya jukumu. Anwani ya vichunguzi vya beacon ya Linux, 169.254.170[.]2, ni sehemu ya mwisho ya metadata ya kazi ya AWS ECS: kazi inayoweza kuifikia kwa kawaida inaweza pia kupata vitambulisho vya muda vya jukumu lake la kazi kutoka kwa huduma ile ile ya kiungo-eneo. Ukaguzi wa ufikiaji kutoka ndani ya hati ya kusakinisha ni hatua inayotangulia kuvuta vitambulisho hivyo, kwa hivyo kiendeshaji chochote kilichoendesha ndoano na kinaweza kufikia sehemu hiyo ya mwisho kinapaswa kuchukuliwa kama kimefichuliwa jukumu lake la kazi. Kwenye msanidi programu wa Windows au mwenyeji wa ujenzi, mzigo wa malipo huomba mwinuko na kufungua njia ya amri, ambayo hupanua mfiduo kutoka kwa wasifu mmoja-na-kutoka hadi udhibiti shirikishi wa mbali.
Hatukuweza kupata hesabu za upakuaji zinazoaminika kwa matoleo hasidi kabla ya kuondolewa, kwa hivyo hatukadirii idadi ya waathiriwa. Uchapishaji wa haraka wa vifurushi viwili kati ya hivyo — matoleo kumi na moja na tisa kwa saa — uliweka mabaki mapya mbele ya wasakinishaji na wasuluhishi wakati matoleo ya zamani yalipokuwa yakiondolewa.
Mifumo inayoibuka
Kundi hili ni mfano wa lebo inayotumika kama kifuniko. "Utafiti ulioidhinishwa," "fadhila ya hitilafu," na "upimaji wa sanduku la mchanga" vinazidi kuunganishwa kwenye vifurushi ambavyo hati zake za usakinishaji hufanya zaidi ya wasifu wa mwenyeji. Uundaji huu unafanya kazi kwa kusita kwa mhakiki kuchukua hatua dhidi ya kitu kinachojitangaza kuwa kimeidhinishwa. Huendana na mbinu ya pili inayojulikana: majina ya vifurushi yaliyoundwa ili kuonekana kama zana za ndani za CI ili yapite mtazamo wa haraka kwenye mti wa utegemezi. Mchanganyiko huo ndio unaofanya muundo huo ustahili kutazamwa - jina linalosomeka kama mabomba ya miundombinu, lililofungwa kwa nathari linalosomeka kama jaribio lililoidhinishwa, linaloweka ndoano ya usakinishaji inayoongezeka kwenye mfumo mmoja wa uendeshaji na kuchunguza sifa za wingu kwa upande mwingine. Kanusho wala jina lisilo na maana halibadilishi kile ambacho msimbo hufanya kwenye usakinishaji, na mchakato wa triage unaopima mojawapo ya hizo kama ushahidi wa kupunguza utafikia uamuzi usio sahihi.
Watetezi wanapaswa kufanya nini
- Tafuta faili za kufuli na usakinishe kumbukumbu za majina sita ya vifurushi; chukulia ulinganifu wowote kama tukio, si onyo.
- Zuia na utoe tahadhari kuhusu trafiki inayotoka kwenda 173.255.233[.]239 na kwa *.trycloudflare[.]com wenyeji kutoka miundombinu ya ujenzi.
- Tafuta maombi ya HTTP ya muda wa usakinishaji kwa anwani za metadata za instance-(169.254.170.2, 169.254.169.254) inayotokana na wasimamizi wa vifurushi katika CI.
- Zungusha vitambulisho na tokeni zozote za jukumu la wingu ambazo zingeweza kufikiwa kutoka kwa kiendeshaji kilichosakinisha toleo lililoathiriwa.
- Ukaguzi kusakinisha mapema/baada ya kusakinisha hati zako seti ya utegemezi; ndoano ya mzunguko wa maisha inayoendesha faili ya pili ya hati inastahili kusomwa.
- Kwenye sehemu za mwisho za Windows, tafuta mpya MteuleMtekelezi maadili yaliyoandikwa chini ya ms-mipangilio ufunguo wa kidhibiti cha ganda — mwinuko wa awali ambao mzigo huu wa malipo hutumia na ishara ya kuaminika isiyotegemea jina la kifurushi.
- Bandika na uhakiki faili za kufunga, na uzime hati za kusakinisha (usakinishaji wa npm -puuza-hati) katika CI ambapo ujenzi wako hauhitaji.
- Chukulia kanusho za "utafiti ulioidhinishwa" au "mbaya" ndani ya hati ya kusakinisha kama maandishi yasiyoaminika, si kama sababu ya kuruhusu hati.
Kifurushi kinachotangaza nia njema katika nathari na maombi SYSTEM katika msimbo inapaswa kuhukumiwa kwa msimbo.





