- Napadalec je ogrozil npm račun glavnega vzdrževalca sistema Axios in izdal različici 1.14.1 in 0.30.4 s fantomsko odvisnostjo plain-crypto-js, ki je med namestitvijo namestila večplatformski RAT.
- Zlonamerna programska oprema je stopila v stik s strežnikom C2 (sfrclak[.]com) in prenesla specifične koristne naloge za Windows, macOS in Linux, pri čemer je izvajala sistemsko izvidovanje, vzdrževala periodične signale in v nekaterih primerih vzpostavljala vztrajnost.
- Napad, ki ga Google in drugi raziskovalci pripisujejo severnokorejskemu akterju UNC1069, je združil približno triurno obdobje izpostavljenosti s prefinjeno kampanjo socialnega inženiringa proti vzdrževalcu, da bi ukradel njihove poverilnice.
- Organizacije, ki so lahko namestile prizadete različice, se morajo zavezati k ukrepanju, iskanju artefaktov RAT, menjavi poverilnic, pripenjanju varnih različic sistema Axios ter krepitvi svojih kontrolnikov za upravljanje dobavne verige, CI/CD in odvisnosti.
Skupnost razvijalcev JavaScripta je pravkar doživela enega tistih strahov, zaradi katerih ponovno premislite, koliko zaupate svojim odvisnostim, kar dokazujejo težave z ranljivostjo knjižnic . Axios, ena najpogosteje uporabljenih knjižnic HTTP v ekosistemu, je bila na npm manipulirana, da je distribuirala trojanca za oddaljeni dostop (RAT) prek na videz legitimnih različic. Incident je trajal le nekaj ur, vendar je jasno pokazal, da dobavna veriga programske opreme visi na veliko tanjši niti, kot so mnogi mislili.
Resna težava ni le v tem, da so napadalci uspeli vtakniti zlonamerno programsko opremo v paket, ki se prenaša več deset ali več sto milijonov krat na teden. Prava težava je, da so to storili z ugrabitvijo npm računa glavnega vzdrževalca in objavo "uradnih" različic, ki so bile videti normalne in se niso dotaknile niti ene vrstice izvorne kode Axiosa . Vse zlonamerno vedenje je bilo v fantomski odvisnosti, posebej zasnovani za napad.
Kako je nastala Axiosova zavezanost NPM
Da bi razumeli obseg incidenta, moramo začeti z vstopno točko. Napadalcu je uspelo prevzeti nadzor nad npm računom »jasonsaayman«, glavnega vzdrževalca sistema Axios, in spremeniti povezani e-poštni naslov v naslov pod svojim nadzorom , ki gostuje na Proton Mailu. Od tistega trenutka naprej je imel proste roke pri objavljanju novih različic paketa, kot da bi bil vzdrževalec.
Z uporabo teh poverilnic je naložil dve zlonamerni različici Axiosa: 1.14.1 in 0.30.4 , ki sta zajemali obe glavni veji projekta. Nalaganja so bila opravljena v razmiku le 39 minut in so bila po analizi StepSecurity opravljena neposredno iz npm z uporabo klasičnega dolgoživega žetona, s čimer je popolnoma zaobšel običajni cevovod CI/CD, ki temelji na dejanjih GitHub.
Osemnajst ur pred zadnjim napadom je akter v registru npm že objavil »čisto« različico, povezano z zlonamerno odvisnostjo . Ta predhodni korak je služil za ustvarjanje zgodovine in preprečevanje sprožitve nekaterih samodejnih preverjanj, ko se je v času napada pojavil popolnoma nov paket.
Presenetljivo je, da napadalci niso spremenili izvorne kode Axiosa ali naredili kakršnih koli vidnih sprememb v repozitoriju GitHub . Pravzaprav različici 1.14.1 in 0.30.4 nista imeli ustreznih zapisov ali oznak na GitHubu; obstajali sta le na npm. Ključna razlika je bila v datoteki odvisnosti paketa, ki je bila objavljena v registru.
Axios v normalnih okoliščinah deklarira le tri odvisnosti: follow-redirects, form-data in proxy-from-env . Vendar pa se je v ogroženih različicah pojavila četrta odvisnost, ki je prej v projektu ni bilo: plain-crypto-js, različica 4.2.1. Ta fantomska knjižnica ni bila uporabljena nikjer v kodni bazi Axiosa, je pa vključevala skript po namestitvi, ki se je samodejno zagnal ob namestitvi paketa z npm, pnpm ali podobnimi orodji.
plain-crypto-js: fantomska odvisnost, ki jo je namestil RAT
Ključ napada je bil v tej dodatni odvisnosti. Datoteko plain-crypto-js je na npm objavil uporabnik z imenom »nrwise«, prav tako z e-poštnim naslovom Proton Mail, njen edini namen pa je bil izvesti zakrito skripto po namestitvi v Node.js (setup.js) . Ta skripta je delovala kot »dropper«, torej kot začetni namestitveni program za drugo fazo zlonamerne programske opreme.
Pri nameščanju Axiosa v eni od njegovih zastrupljenih različic je po namestitvi življenjski cikel npm samodejno sprožil kodo plain-crypto-js, ne da bi razvijalec moral ukrepati . Dropper se je povezal s strežnikom za upravljanje in nadzor (C2), ki je bil aktiven v domeni sfrclakcom, poslušal na vratih 8000 in prenesel koristni tovor, specifičen za operacijski sistem prizadetega računalnika; to vedenje je mogoče prepoznati z analizo omrežnega prometa.
Raziskovalci pri StepSecurity in drugih analitičnih skupinah opisujejo zelo previdno vedenje. Po izvedbi zlonamernega koristnega tovora je spuščalnik odstranil lastne sledi: izbrisal je skript postinstall, datoteko package.json zamenjal s "čisto" različico in pustil datoteko node_modules, ki je na prvi pogled delovala neškodljivo . Na ta način kasnejši ročni pregled ni odkril zlonamerne kode neposredno v Axiosu.
Edini zanesljiv namig za identifikacijo manipulacije so bile datoteke zaklepanja (package-lock.json, pnpm-lock.yaml, yarn.lock) in prisotnost specifičnih različic: axios 1.14.1 ali 0.30.4 in plain-crypto-js 4.2.1, poleg dveh različic tega paketa z vmesnimi številkami (4.2.0, 4.2.2), ki sta bili povezani v nekaterih analizah. Socket je kasneje zaznal, da se je ista zlonamerna programska oprema distribuirala tudi prek paketov @shadanai/openclaw (različne različice 2026.3.xx) in @qqbrowser/openclaw-qbot (0.0.130), varnostne tehnike, kot so honeypot-i, pa lahko pomagajo tudi pri prepoznavanju podobnih kampanj.
Medplatformski RAT: Windows, macOS in Linux v središču pozornosti
Ko je bil skript setup.js izveden, je deloval kot orkestrator, ki je sposoben zaznati operacijski sistem in slediti platformo specifični poti napada . Kampanja je bila očitno vnaprej pripravljena: po podatkih StepSecurity so imeli napadalci vnaprej prevedene tri ločene koristne tovore, enega za vsak sistem.
V sistemih macOS je postopek po namestitvi zagnal AppleScript, ki je s strežnika sfrclakcom:8000 prenesel okuženo binarno datoteko s trojanskim konjem . Ta binarna datoteka je bila shranjena na pot /Library/Caches/com.apple.act.mond, njena dovoljenja so bila prilagojena, da je postala izvedljiva, in na koncu je bila zagnana v ozadju z uporabo /bin/zsh. Ko se je RAT zagnal, je bil sam AppleScript izbrisan, kar je še dodatno otežilo forenzično analizo.
V sistemih Windows je zlonamerna programska oprema našla binarno datoteko PowerShell sistema, jo kopirala v %PROGRAMDATA%\wt.exe, da bi jo prikrila kot terminal Windows, in ustvarila začasno datoteko VBScript . Ta VBScript je nato stopil v stik s strežnikom C2, da bi prenesel dodatno skripto PowerShell RAT, jo izvedel in nato izbrisal preneseno datoteko. Poleg tega je različica za Windows ustvarila datoteko %PROGRAMDATA%\system.bat z rutino prenosa, ki je zlonamerni programski opremi omogočila, da se je naložila ob vsaki prijavi, in v register sistema Windows dodala ključ za izvajanje, da bi zagotovila obstojnost.
V Linuxu in drugih Unixu podobnih sistemih, razen macOS-a, je spuščalnik uporabil Node.js-ov execSync za zagon ukaza lupine, ki je prenesel skript Python iz sfrclakcom, ga shranil kot /tmp/ld.py in ga izvedel z nohup, da je ostal v teku v ozadju . Za razliko od sistema Windows ta različica ni imela robustnega mehanizma vztrajnosti, kar je nakazovalo na hitrejši pristop, usmerjen v izkopavanje podatkov, ali občasno uvajanje vztrajnosti prek nadaljnjih ukazov.
SafeDep in Elastic Security Labs sta analizirala koristne tovore druge ravni in ugotovila, da imajo RAT-i za macOS (binarna datoteka C++ Mach-O) in Linux (skripta Python) enak nabor ukazov, protokol C2, obliko sporočil in operativno vedenje . Ta vrsta analize se običajno zanaša na storitve skeniranja, kot je VirusTotal , ki omogočajo korelacijo vzorcev in IOC-jev.
V vseh primerih je vsak ogroženi gostitelj izvedel takojšnjo sistemsko izvidnico: uporabniške imenike, korenske mape pogonov, aktivne procese in druge metapodatke . Te informacije so bile poslane na strežnik za upravljanje in nadzor, agent pa je vzdrževal zanko svetilnika približno 60 sekund, v kateri je čakal na nova navodila, vključno z izvajanjem dodatnih skriptov ali vbrizgavanjem binarnih datotek v pomnilnik.
Okno izpostavljenosti, cilji in pripisovanje Severni Koreji
Zlonamerne različice Axiosa so bile na voljo na npm približno tri ure, v skrbno izbranem časovnem okviru. Ogroženi paketi so bili objavljeni tik pred polnočjo v nedeljo (čas, ki je maksimiziral reakcijski čas branilcev), incident pa je bil zajezen do zgodnjih ponedeljkovih juter , potem ko so varnostna podjetja opozorila oblasti na nenavadno vedenje.
V tem relativno kratkem obdobju je Huntress zaznal vsaj 135 sistemov, ki so se povezovali s strežnikom napadalca . Glede na to, da Axios beleži več kot 80–100 milijonov prenosov na teden (po različnih virih celo več kot 300 milijonov v nekaterih obdobjih), ta številka verjetno predstavlja le vrh ledene gore, omejen na sisteme, ki so prišli v stik z analitičnimi podjetji, ki so svoje podatke objavila.
Google je prek svoje ekipe za obveščanje o grožnjah napad pripisal domnevnemu severnokorejskemu akterju z oznako UNC1069 . Elastic Security Labs je to hipotezo potrdil z odkritjem velike podobnosti med RAT-om, ki se izvaja v sistemu macOS, in WAVESHAPER-jem, zadnjim vratom C++, ki ga je odkril Mandiant in je prav tako povezan z isto skupino groženj.
Googlovi analitiki so poudarili, da se skupine, povezane s Severno Korejo, že leta specializirajo za napade na dobavne verige in krajo kriptovalut . Vzorec je dosleden: ogrožanje razvojne infrastrukture, široko uporabljenih knjižnic ali zaupanja vredne programske opreme, nato pa preusmeritev proti tarčam, ki upravljajo z visoko vrednostjo premoženja, zasebnimi ključi ali poverilnicami.
Več poročil je poudarilo tudi, da sta moderiranje in zasnova napada nakazovala dobro usklajeno ekipo : tri vzporedne implementacije istega RAT-a (PowerShell, C++ in Python), dosleden protokol C2, skoraj enako vedenje v vseh različicah in jasna strategija samočiščenja, da se prepreči puščanje sledi. Elastic je poudaril, da ta doslednost kaže na enega samega razvijalca ali skupino, ki dela na podlagi skupnega oblikovalskega dokumenta, daleč od improvizacije.
Poleg zgolj tehničnih vidikov je ena najbolj zaskrbljujočih točk primera to, kako je bil ugrabljen npm račun glavnega vzdrževalca. Vodja Axiosa je kasneje sam pojasnil, da je imel dvofaktorsko avtentikacijo omogočeno na skoraj vseh svojih storitvah , pa je kljub temu odobril dostop, ne da bi se tega zavedal.
Glede na analizo po smrti, ki jo je delila ekipa, so napadalci izvedli zelo dovršeno operacijo socialnega inženiringa, podprto z orodji, ki jih poganja umetna inteligenca, da bi si pridobili zaupanje . Predstavljali so se kot ustanovitelj podjetja, kopirali njegovo vizualno identiteto, fotografijo in celo korporativno blagovno znamko. Ustvarili so pravi prostor Slack z logotipom podjetja, kanali z objavami, ki naj bi bile sinhronizirane z LinkedInom, in celo lažnimi profili zaposlenih in drugih vzdrževalcev odprtokodne programske opreme.
V tem okolju so prek Microsoft Teamsa načrtovali sestanek, na katerem je očitno sodelovala celotna skupina strokovnjakov . Med sestankom so simulirali tehnično težavo in nakazali, da je komponenta njihovega sistema zastarela. Vzdrževalec je, domnevajoč, da gre za legitimno zahtevo, povezano s samim orodjem za videokonference, prenesel in namestil predlagano datoteko.
Ta datoteka je bila pravzaprav trojanski konj za oddaljeni dostop, ki je napadalcem omogočil dostop do žrtvinih poverilnic in na koncu prevzem nadzora nad npm računom, ki je bil uporabljen za objavo Axiosa . Celoten postopek je bil tako dobro orkestriran, s toliko verodostojnimi podrobnostmi, da ga je žrtev opisala kot "popolnoma usklajenega, profesionalnega in popolnoma prepričljivega".
Ta človeški element incidenta jasno kaže, da so celo tehnični ukrepi, kot je 2FA, nezadostni, kadar se visokonivojski socialni inženiring kombinira z vizualnim ponarejanjem, ponareditvami ali podrobnim kloniranjem organizacij . Najšibkejši člen je spet človeška interakcija.
Vpliv na organizacije in razvijalce, ki uporabljajo Axios
S praktičnega vidika je glavni problem ugotoviti, kdo je bil dejansko prizadet. Vsaka organizacija, ki je namestila [email protected] ali [email protected] v časovnem oknu, v katerem sta bila na voljo, bi morala domnevati, da je lahko ogrožen stroj ali cevovod, ki je izvedel namestitev.
Priporočila podjetij, kot so StepSecurity, Aikido, Huntress in Elastic, so nedvoumna. V primeru suma je potreben proaktiven pristop, ne le "brisanje in ponovna namestitev modulov node_modules ". Preudaren ukrep je ponovna izgradnja prizadetih računalnikov ali okolij iz zaupanja vrednih slik in skrben pregled dnevnikov CI/CD, da se ugotovi, katera opravila ali cevovodi so morda izvedli ogrožene različice.
Poleg tega je ključnega pomena, da se rotirajo vse poverilnice in skrivnosti, do katerih je RAT morda dostopal iz teh vozlišč : žetoni npm, ključi ponudnika storitev v oblaku, skrivnosti cevovoda, poverilnice baze podatkov, ključi SSH itd. Če te poverilnice ostanejo v obtoku po takšnem napadu, se odprejo vrata za tiho lateralno gibanje.
Na tehnični ravni bi morale ekipe pregledati svoje datoteke zaklepanja (package-lock.json, pnpm-lock.yaml, yarn.lock) za reference na ogrožene različice Axiosa in plain-crypto-js . Če se ti elementi najdejo, je naslednji korak pregled prizadetih sistemov za morebitne artefakte RAT: /Library/Caches/com.apple.act.mond v sistemu macOS, %PROGRAMDATA%\wt.exe in %PROGRAMDATA%\system.bat v sistemu Windows ali /tmp/ld.py v sistemu Linux.
Vzporedno je priporočljivo, da se izrecno nastavijo varne različice sistema Axios, kot sta 1.14.0 in 0.30.3, ter da se uporabijo preglasitve ali razrešitve, da se prepreči razreševanje tranzitivnih odvisnosti v neželene različice . Blokiranje odhodnega prometa na domeno sfrclakcom je prav tako smiseln ukrep za zadrževanje, vsaj medtem ko se analizira celoten obseg napada.
Varnostne lekcije za dobavno verigo programske opreme
Incident Axios ni osamljen dogodek, temveč le še en člen v verigi napadov na dobavno verigo, ki vključuje primere, kot so SolarWinds, Kaseya, 3CX, Polyfill.io in ranljivosti, izkoriščene v Log4j. Osrednja ideja je vedno enaka: ogroziti široko uporabljeno, zaupanja vredno komponento, da bi povečali doseg , namesto da bi poskušali napadati stroj za strojem.
Ena najpogosteje ponavljanih lekcij strokovnjakov je, da zaupanje ne more temeljiti zgolj na priljubljenosti knjižnice ali ugledu vzdrževalca . Če je kanal izdaje (račun npm, cevovod CI/CD, infrastruktura gradnje) ogrožen, vse, kar je izdano prek njega, podeduje to tveganje. Ročni pregled kode prav tako ni zadosten, če se zlonamerna programska oprema skriva v tranzitivnih odvisnostih in se po izvedbi izbriše.
Poudarjeno je bilo tudi, da ima »privzeta hitrost« za posodobitve odvisnosti svojo ceno v smislu površine napada . Vedno samodejno sprejemanje najnovejše različice je neverjetno priročno, vendar odpira vrata za širjenje zlonamerne posodobitve v nekaj minutah. Nekatere organizacije že razmišljajo o politikah, kot je zahteva, da je nova različica pred sprejetjem v ekosistemu že določeno obdobje, ali zahteva, da se spremembe kritičnih paketov dodatno ročno pregledajo.
Kar zadeva razvojno infrastrukturo, je treba okolja CI/CD obravnavati kot zelo občutljiva sredstva . Vsak RAT, ki se izvede med namestitvijo odvisnosti, bo skoraj zagotovo iskal skrivnosti cevovoda in dostop do drugih okolij. Segmentacija teh vozlišč, njihovo natančnejše spremljanje in periodično menjavanje njihovih skrivnosti ni več "idealno" priporočilo, temveč nujnost.
Končno, odkrivanje tovrstnih napadov zahteva združevanje informacij iz več virov: nameščenih različic, datotek zaklepanja, indikatorjev ogroženosti operacijskega sistema in omrežne telemetrije . Orodja, ki ustvarjajo in upravljajo sezname materialov programske opreme (SBOM), pomagajo hitro slediti, kateri projekti uporabljajo katere pakete, kar je ključnega pomena, ko se sprožijo množična opozorila, kot je to.
Celotna epizoda z Axiosom ponazarja, v kolikšni meri se ekosistem odvisnosti, ne glede na to, kako zrel in utrjen se morda zdi, še vedno močno zanaša na zaupanje in nenehno budnost. Na videz neškodljiva knjižnica, ki jo vzdržuje ena sama oseba, ki postane žrtev dobro izvedenega napada socialnega inženiringa, lahko v nekaj urah postane globalni vektor za uvajanje medplatformskih RAT-ov proti podjetjem, samostojnim podjetnikom in organizacijam vseh velikosti . Krepitev nadzora nad objavljanjem računov, cevovodov in kritičnih odvisnosti ni več neobvezna najboljša praksa, temveč predpogoj za nadaljnji razvoj v okolju, kjer so napadalci vse bolj potrpežljivi, iznajdljivi in opremljeni z boljšimi orodji.

