Tiekimo grandinės ataka: „Axios“ buvo pažeista. Štai kas tiksliai atsitiko ir ką mes padarėme.

Tiekimo grandinės ataka tyliai įdiegė nuotolinės prieigos Trojos arklys kūrėjų įrenginiuose visame pasaulyje. Jį radome savo krūvoje per kelias valandas – čia yra visas mūsų atsakymas ir tai, ką turite padaryti dabar.
- axios@1.14.1 ir axios@0.30.4 buvo paskelbti per užgrobtą prižiūrėtojo paskyrą npm
- Jie tyliai įdiegia paprastą-kripto-js@4.2.1, RAT lašintuvą, kuris išfiltruoja jūsų paslaptis
- Kenkėjiškos versijos veikė maždaug 2 valandas 2026 m. kovo 31 d. (UTC)
- Nedelsdami grąžinkite į axios@1.14.0 arba axios@0.30.3 ir pakeiskite visus kredencialus
- Auditavome kiekvieną mūsų įmonės projektą, informavome klientus ir pradėjome pilną įgaliojimų rotaciją


Kas iš tikrųjų atsitiko
2026 m. kovo 31 d. užpuolikai į npm registrą paskelbė dvi užnuodytas axios versijas – vieną iš dažniausiai atsisiunčiamų npm paketų planetoje su daugiau nei 100 mln. įdiegimų per savaitę.
Tai nebuvo klaidinimas ar nesąžininga šakutė. Užpuolikas užgrobė npm paskyrą iš vienas iš pagrindinių ašių prižiūrėtojų. Jie pakeitė registruotą el. laišką į anoniminį „ProtonMail“ adresą ir rankiniu būdu nustūmė kenkėjiškus leidimus per npm CLI – visiškai apeinant įprastą projekto „GitHub Actions“ CI/CD dujotiekį. Nėra atitinkamų „GitHub“ žymų. Nėra SLSA kilmės patvirtinimų. Jokių šaltinio kodo pakeitimų. Vienintelis viso paketo pakeitimas buvo viena nauja eilutė package.json: priklausomybė nuo plain-crypto-js@4.2.1.
Kas daro šį puolimą bjaurų
Nebuvo paliestas joks axios šaltinio kodas. Tradicinė skirtumais pagrįsta kodo peržiūra to nepastebėtų. Ataka buvo nematoma, nebent jūs tikrintumėte, ar nėra naujų, netikėtų priklausomybių.
Atakos laiko juosta
- 2026 m. kovo 30 d. – 05:57 UTC
Užpuolikas skelbia plain-crypto-js@4.2.0švari teisėtos crypto-js bibliotekos kopija. Nulis kenksmingo kodo. Tikslas: sukurkite leidybos istoriją, kad apgautumėte automatinius skaitytuvus.
- 2026 m. kovo 30 d. – 23:59 UTC
Piktybiškas plain-crypto-js@4.2.1 paskelbta. Sudėtyje yra užtemdytas RAT lašintuvas setup.js. „Socket“ automatinis aptikimas pažymi jį per 6 minutes.
- 2026 m. kovo 31 d. – 00:21 UTC
axios@1.14.1 paskelbta per pažeistą prižiūrėtojo paskyrą. Suleidžia plain-crypto-js@4.2.1 kaip vykdymo trukmės priklausomybė.
- 2026 m. kovo 31 d. – 01:00 UTC
axios@0.30.4 paskelbta. Tiek 1.x, tiek 0.x šakos apsinuodijo per 39 minutes viena nuo kitos – maksimaliai padidinus sprogimo spindulį.
- 2026 m. kovo 31 d. – 03:29 UTC
Kenkėjiškos versijos pašalintos iš npm po StepSecurity ir Socket atskleidimo. Bet kas bėgo npm install tame ~3 valandų lange gali būti pažeista.
18 valandų trukmė prasideda nuo švaraus sėjimo plain-crypto-js@4.2.0 buvo apgalvota: dauguma automatinių saugos skaitytuvų ieško visiškai naujų paketų be paskelbimo istorijos. Kai kenkėjiška versija nukrito, paskyra atrodė patikima.
Kada npm install veikia, npm išsprendžia priklausomybės medį, įsitraukia plain-crypto-js@4.2.1ir automatiškai jį vykdo postinstall kabliukas: node setup.js. tiek. Tai kompromiso momentas.
Lašintuvas įeina setup.js naudoja du užtemimo sluoksnius – atvirkštinį Base64 su užpildymo pakeitimu, po kurio seka XOR šifras – prieš pasiekiant C2 serverį sfrclak(.)com:8000 (IP: 142.11.206.73), kad atsisiųstumėte konkrečiai platformai skirtą antrosios pakopos RAT.
Po vykdymo jis uždengia savo pėdsakus: ištrina save, pašalina package.json kuriame yra kabliukas po įdiegimo, ir pakeičia jį švariu masalu. Tikrinama node_modules/plain-crypto-js vėliau atrodo visiškai nekaltas – nebent žinote, kad aplanko iš viso neturėtų būti.
macOS artefakast
/Library/Caches/com.apple.act.mond
Linux artefaktas
/tmp/ld.py
Windows artefaktas
%PROGRAMDATA%\wt.exe
C2 kompromiso rodikliai
Blokuoti ir tikrinti išeinančius ryšius su sfrclak(.)com ir IP142.11.206.73prie 8000 prievado. Jei kuris nors kompiuteris rodo šį srautą tinklo žurnaluose, imkitės visiško kompromiso.
Kam gresia pavojus
Rizika yra didžiausia, jei 2026 m. kovo 31 d. nuo 00:21 UTC iki 03:29 UTC jūsų aplinkai taikoma bet kuri iš toliau nurodytų sąlygų:
- CI / CD konvejeriai, kurie neprisega priklausomybės versijų ir paleidžiami
npm installpagal grafiką arba įsipareigoja - Kūrėjai, kurie bėgo
npm installarbanpm updatetame lange - Projektai, kuriuose naudojami „Caret“ diapazonai (
^1.14.0arba^0.30.0). - Kas traukia
@shadanai/openclawarba@qqbrowser/openclaw-qbot@0.0.130— antriniai paketai, parduodantys tą patį naudingąjį krovinį
Jei jūsų užrakto failas buvo padarytas prieš paskelbiant kenkėjiškas versijas, o jūsų diegimas jo neatnaujino, jums tai nebuvo paveikta. Tačiau prieš darydami įsitikinkite.
Kaip mes reagavome savo įmonėje
Mūsų atsakas į incidentą, žingsnis po žingsnio
1 veiksmas
Neatidėliotinas visų projektų auditas. Susisiekėme su kiekvienu technikos lyderiu tuo metu, kai pasirodė įspėjimas. Klausimas buvo aiškus: patikrinkite axios versijas kiekviename šiuo metu jums priklausančiame projekte – paleiskite cat package-lock.json | grep axios arba npm list axios ir pranešti. Jokių išimčių, jokių „pažiūrėsime vėliau“.
2 veiksmas
Patikrinkite, ar nėra kenkėjiškos priklausomybės. Techniniai vadovai taip pat buvo paprašyti bėgti npm list plain-crypto-js kiekviename projekte ir kiekviename aktyviame kūrimo įrenginyje. Bet kokia išvestis = paveikta.
3 veiksmas
Kliento pranešimas – prieš pataisymą. Su klientais susisiekėme aktyviai. Mes jiems pasakėme, kas atsitiko, ką tikrinome, koks rizikos langas ir ką darome. Pirmiausia skaidrumas. Tai svarbu pasitikėjimui, o kai kuriais atvejais to reikalaujama pagal sutartį.
4 veiksmas
Pataisykite, tada statykite. Paveiktų projektų reitingas buvo sumažintas iki axios@1.14.0 (už 1.x) arba axios@0.30.3 (skirta 0.x), užrakinimo failai atnaujinti, plain-crypto-js katalogas rankiniu būdu pašalintas iš node_modules, tada išvalykite iš naujo su npm install --ignore-scripts. Tik po švarios patikrintos konstrukcijos mes reklamavome bet kokią aplinką.
5 veiksmas
Kredencialų kaitaliojimas bet kokioms potencialiai paveiktoms mašinoms. Bet koks kūrėjas arba CI bėgikas, kuris paleido naują npm install rizikos lange: visos .env reikšmės, AWS raktai, npm prieigos raktai, SSH raktai ir CI paslaptys buvo pasuktos iš karto. Nemanykite, kad esate saugus – vis tiek sukite.
6 veiksmas
Tinklo žurnalo auditas. Tikrino tinklo žurnalus, ar nėra jokių išeinančių ryšių sfrclak.com arba 142.11.206.73. Nieko nerado, bet patikrinimas buvo nederamas.
Jūsų ištaisymo kontrolinis sąrašas
1.Patikrinkite kiekvieną paveiktos versijos projektą
Bėk npm list axios arba grep užrakto failą. Bet kuriam projektui, kurio 1.14.1 arba 0.30.4, reikia nedelsiant imtis veiksmų.
2. Ieškokite kenkėjiškos priklausomybės
npm list plain-crypto-js — jei kas nors atspausdinama (išskyrus tuščią), lašintuvas nubėgo.
3. Atnaujinkite ir iš naujo įdiekite švariai
npm install axios@1.14.0 (arba 0,30,3). Tada npm install --ignore-scripts kad nebūtų paleisti scenarijai po įdiegimo.
4. Patikrinkite, ar kiekviename įrenginyje nėra RAT failų
macOS:ls /Library/Caches/com.apple.act.mond · Linux: ls /tmp/ld.py · Langai: Test-Path "$env:ProgramData\wt.exe"
5. Pasukite visus kredencialus paveiktuose įrenginiuose
Visos .env paslaptys, AWS/GCP/Azure raktai, npm prieigos raktai, SSH raktai, CI paslaptys. Nelaukite. Pasukite, net jei nesate tikri.
6. Audito tinklo žurnalus C2 ryšiui
Blokuoti ir nuskaityti sfrclak(.)com ir 142.11.206.73:8000. Bet koks pataikymas = numatomas visiškas mašinos kompromisas.
Užkirsti kelią kitam
Ši ataka pavyko, nes atvirojo kodo tiekimo grandinės pasitikėjimas yra numanomas. Prižiūrėtojo paskyroje paskelbtas paketas atrodo teisėtas. Turime visam laikui sulaužyti šią prielaidą.
Tvirtinamas CI / CD dabar
Visada bėk
npm install --ignore-scriptsCI aplinkoje. Tai blokuoja scenarijus po įdiegimo – tikslų mechanizmą, naudojamą šiam RAT diegti. Gamybiniams užrakinimo failams patvirtinkite ir patikrinkite – niekada nepasikliaukite slankiaisiais diapazonais, pvz.,^1.14.0didelių statymų aplinkoje. Apsvarstykite tokį įrankį kaip „Socket“, „Snyk“ arba „StepSecurity“, kad galėtumėte stebėti tiekimo grandinę realiuoju laiku.
Reikalauti npm paskyrų su publikavimo teisėmis, kad būtų galima naudoti aparatinės įrangos MFA, o ne TOTP, ir tikrinti savo komandos npm prieigos rakto higieną. Ilgaamžiai klasikiniai prieigos raktai (čia tikėtinas atakos vektorius) turėtų būti pasukti, kad būtų galima naudoti ribotos apimties granuliuotus automatizavimo žetonus.
Paskutinė mintis
Tiekimo grandinės atakos niekur nedingsta. „Axios“ incidentas vyksta pagal tą patį planą, kuris buvo naudojamas prieš „Chalk“, „Debug“ ir „Shai-Hulud npm“ kirminą 2025 m. pabaigoje. Pavyzdys: pažeisti prižiūrėtojo paskyrą, paskelbti užnuodytą versiją, išnaudoti ekosistemos numanomą pasitikėjimą registruotais paketais.
Vienintelė tikroji apsauga yra daugiasluoksnė: prisekite versijas, patikrinkite kilmę, blokuokite scenarijus po įdiegimo CI, stebėkite, ar nėra naujų netikėtų priklausomybių ir . Mes turėjome savo. Štai kodėl galėjome judėti greitai.
Jei tai buvo naudinga, pasidalykite ja su savo komandos vadovais. Žmonės, kuriems to reikia, ne visada skaito saugos tinklaraščius – jie kuria funkcijas ir gali jų nežinoti npm install šį rytą numetė žiurkę.


