- Napadač je kompromitovao npm račun glavnog održavatelja Axiosa i objavio verzije 1.14.1 i 0.30.4 sa fantomskom zavisnošću, plain-crypto-js, koja je implementirala višeplatformski RAT tokom instalacije.
- Zlonamjerni softver je kontaktirao C2 server (sfrclak[.]com) i preuzeo specifične korisne sadržaje za Windows, macOS i Linux, obavljajući izviđanje sistema, održavajući periodične beacone i, u nekim slučajevima, uspostavljajući perzistenciju.
- Napad, koji Google i drugi istraživači pripisuju sjevernokorejskom akteru UNC1069, kombinirao je vremenski okvir izloženosti od oko tri sata sa sofisticiranom kampanjom socijalnog inženjeringa protiv održavatelja kako bi se ukrali njihovi akreditivi.
- Organizacije koje su uspjele instalirati pogođene verzije moraju se obavezati na poduzimanje mjera, pretraživanje RAT artefakata, rotiranje akreditivnosti, zakačenje sigurnih verzija Axiosa i jačanje svojih kontrola lanca snabdijevanja, CI/CD i upravljanja ovisnostima.
Zajednica JavaScript programera upravo je iskusila jedan od onih strahova koji vas tjeraju da preispitate koliko vjerujete svojim zavisnostima, što pokazuju problemi s ranjivostima biblioteka . Axios, jedna od najčešće korištenih HTTP biblioteka u ekosistemu, manipulirana je na npm-u kako bi distribuirala trojanca za udaljeni pristup (RAT) putem naizgled legitimnih verzija. Incident je trajao samo nekoliko sati, ali je jasno pokazao da lanac snabdijevanja softverom visi na mnogo tanjoj niti nego što su mnogi mislili.
Ozbiljan problem nije samo to što su napadači uspjeli prokrijumčariti zlonamjerni softver u paket koji se preuzima desetine ili stotine miliona puta sedmično. Pravi problem je što su to učinili otimanjem npm računa glavnog održavatelja, objavljujući "službene" verzije koje su izgledale normalno i nisu dirale nijednu liniju izvornog koda Axiosa . Svo zlonamjerno ponašanje nalazilo se u fantomskoj zavisnosti posebno dizajniranoj za napad.
Kako je došlo do Axiosove posvećenosti NPM-u
Da bismo razumjeli razmjere incidenta, moramo početi s ulaznom tačkom. Napadač je uspio preuzeti kontrolu nad npm računom "jasonsaayman", glavnog održavatelja Axiosa, i promijenio povezanu email adresu u onu pod svojom kontrolom , hostovanu na Proton Mailu. Od tog trenutka, imali su slobodne ruke da objavljuju nove verzije paketa kao da su oni održavatelj.
Koristeći te pristupne podatke, postavio je dvije zlonamjerne verzije Axiosa: 1.14.1 i 0.30.4 , pokrivajući obje glavne grane projekta. Postavljanja su izvršena u razmaku od samo 39 minuta i, prema analizi StepSecurityja, izvršena su direktno iz npm-a korištenjem klasičnog dugovječnog tokena, potpuno zaobilazeći uobičajeni CI/CD cjevovod zasnovan na GitHub Actions.
Osamnaest sati prije konačnog napada, akter je već objavio "čistu" verziju vezanu za zlonamjernu zavisnost u npm registru . Ovaj preliminarni korak poslužio je za generiranje historije i sprječavanje pokretanja nekih automatiziranih provjera kada se u trenutku napada pojavio potpuno novi paket.
Ono što je upečatljivo je da napadači nisu modificirali izvorni kod Axiosa niti napravili bilo kakve vidljive promjene u GitHub repozitoriju . U stvari, verzije 1.14.1 i 0.30.4 nisu imale odgovarajuće commite ili tagove na GitHubu; postojale su samo na npm-u. Ključna razlika bila je u datoteci zavisnosti paketa, koja je objavljena u registru.
Axios, pod normalnim okolnostima, deklariše samo tri zavisnosti: follow-redirects, form-data i proxy-from-env . Međutim, u kompromitovanim verzijama pojavila se četvrta zavisnost, koja ranije nije postojala u projektu: plain-crypto-js, verzija 4.2.1. Ova fantomska biblioteka nije korištena nigdje u Axios kodnoj bazi, ali je uključivala skriptu nakon instalacije koja se automatski pokretala prilikom instaliranja paketa pomoću npm-a, pnpm-a ili sličnih alata.
plain-crypto-js: fantomska zavisnost koju je implementirao RAT
Ključ napada ležao je u toj dodatnoj zavisnosti. plain-crypto-js je objavljen na npm-u od strane korisnika pod imenom "nrwise", također s email adresom Proton Mail, a njegova jedina svrha bila je izvršavanje obfusiranog skripta nakon instalacije u Node.js (setup.js) . Taj skript je djelovao kao dropper, odnosno kao početni instaler za drugu fazu zlonamjernog softvera.
Prilikom instaliranja Axiosa u jednoj od njegovih zaraženih verzija, životni ciklus npm-a nakon instalacije automatski je pokrenuo plain-crypto-js kod bez ikakve posebne akcije potrebne od strane programera . Dropper se povezao sa serverom za komande i kontrolu (C2) aktivnim u domeni sfrclakcom, osluškujući port 8000, i preuzeo sadržaj specifičan za operativni sistem pogođenog računara; ovo ponašanje se može identificirati analizom mrežnog prometa.
Istraživači u StepSecurityju i drugim analitičkim timovima opisuju vrlo pažljivo ponašanje. Nakon izvršavanja zlonamjernog sadržaja, program za umetanje uklonio je vlastite tragove: izbrisao je postinstall skriptu, zamijenio datoteku package.json "čistom" verzijom i ostavio datoteku node_modules koja je, na prvi pogled, izgledala bezopasno . Na taj način, naknadna ručna inspekcija nije pronašla zlonamjerni kod direktno unutar Axiosa.
Jedini pouzdani trag za identifikaciju manipulacije bio je u lockfiles datotekama (package-lock.json, pnpm-lock.yaml, yarn.lock) i prisustvu specifičnih verzija: axios 1.14.1 ili 0.30.4 i plain-crypto-js 4.2.1, pored dvije verzije tog paketa sa međubrojevima (4.2.0, 4.2.2) povezanim u nekim analizama. Socket je, sa svoje strane, kasnije otkrio da se isti zlonamjerni softver distribuira i putem paketa @shadanai/openclaw (razne verzije 2026.3.xx) i @qqbrowser/openclaw-qbot (0.0.130), a sigurnosne tehnike poput honeypot-ova također mogu pomoći u identifikaciji sličnih kampanja.
Višeplatformski RAT: Windows, macOS i Linux u centru pažnje
Nakon izvršenja, skripta setup.js djelovala je kao orkestrator sposoban za detekciju operativnog sistema i praćenje putanje napada specifične za platformu . Kampanja je očito bila unaprijed pripremljena: prema StepSecurityju, napadači su imali tri odvojena paketa podataka unaprijed kompajlirana, po jedan za svaki sistem.
Na macOS sistemima, proces nakon instalacije pokrenuo je AppleScript koji je preuzeo trojanski binarni fajl sa servera sfrclakcom:8000 . Ovaj binarni fajl je sačuvan na putanji /Library/Caches/com.apple.act.mond, njegove dozvole su podešene da bi bio izvršni, i na kraju je pokrenut u pozadini pomoću /bin/zsh. Nakon što je RAT pokrenut, sam AppleScript je izbrisan kako bi se dodatno zakomplicirala forenzička analiza.
Na Windows mašinama, zlonamjerni softver je locirao PowerShell binarni fajl sistema, kopirao ga u %PROGRAMDATA%\wt.exe kako bi ga prikrio kao Windows terminal i generirao privremeni VBScript . Ovaj VBScript je zatim kontaktirao C2 server kako bi preuzeo dodatni PowerShell RAT skript, izvršio ga, a zatim izbrisao preuzetu datoteku. Nadalje, Windows varijanta je kreirala datoteku %PROGRAMDATA%\system.bat s rutinom preuzimanja koja je omogućavala zlonamjernom softveru da se preuzme pri svakoj prijavi i dodavala je ključ za izvršenje u Windows registar kako bi se osigurala trajnost.
Na Linuxu i drugim Unix-sličnim sistemima, osim macOS-a, dropper je koristio Node.js-ov execSync za pokretanje shell komande koja je preuzela Python skriptu sa sfrclakcom, sačuvala je kao /tmp/ld.py i izvršila je sa nohup naredbom kako bi ostala u radu u pozadini . Za razliku od Windowsa, ova varijanta nije pokazivala robustan mehanizam perzistencije, što sugerira brži pristup orijentisan na izvlačenje podataka ili povremeno raspoređivanje perzistencije putem narednih komandi.
SafeDep i Elastic Security Labs su analizirali podatke drugog nivoa i zaključili da RAT-ovi za macOS (C++ Mach-O binarni fajl) i Linux (Python skripta) dijele isti skup komandi, C2 protokol, format poruke i operativno ponašanje . Ova vrsta analize se obično oslanja na servise za skeniranje poput VirusTotala , koji olakšavaju korelaciju uzoraka i IOC-ova.
U svim slučajevima, svaki kompromitovani host je izvršio trenutno izviđanje sistema: korisničke direktorije, korijene diskova, aktivne procese i ostale metapodatke . Ove informacije su poslane na komandni i kontrolni server, a agent je održavao petlju beacon-a od oko 60 sekundi, čekajući nove instrukcije, uključujući izvršavanje dodatnih skripti ili ubrizgavanje binarnih datoteka u memoriju.
Period izloženosti, ciljevi i pripisivanje Sjevernoj Koreji
Zlonamjerne verzije Axiosa bile su dostupne na npm-u otprilike tri sata, tokom pažljivo odabranog vremenskog okvira. Kompromitovani paketi objavljeni su neposredno prije ponoći u nedjelju (vrijeme koje je maksimiziralo vrijeme reakcije branitelja), a incident je stavljen pod kontrolu do ranog ponedjeljka ujutro , nakon što su sigurnosne firme upozorile vlasti na anomalno ponašanje.
Tokom tog relativno kratkog perioda, Huntress je otkrio najmanje 135 sistema koji se povezuju sa serverom napadača . S obzirom na to da Axios bilježi više od 80-100 miliona preuzimanja sedmično (prema različitim izvorima, čak i više od 300 miliona u nekim periodima), taj broj vjerovatno predstavlja samo vrh ledenog brijega, ograničen na sisteme koji dođu do pažnje analitičkih firmi koje su svoje podatke učinile javnim.
Google je, putem svog tima za obavještajne podatke o prijetnjama, pripisao napad sumnjivom sjevernokorejskom akteru označenom kao UNC1069 . Elastic Security Labs je potvrdio ovu hipotezu pronašavši veliku sličnost između RAT-a isporučenog na macOS-u i WAVESHAPER-a, C++ backdoora koji je otkrio Mandiant i koji je također povezan s istom prijetnjom.
Analitičari kompanije Google naglasili su da se grupe povezane sa Sjevernom Korejom godinama specijaliziraju za napade na lanac snabdijevanja i operacije krađe kriptovaluta . Obrazac je dosljedan: ugrožavanje razvojne infrastrukture, široko korištenih biblioteka ili pouzdanog softvera kako bi se zatim bočno premjestilo prema metama koje upravljaju visokovrijednom imovinom, privatnim ključevima ili akreditivima.
Nekoliko izvještaja je također istaklo da moderiranje i dizajn napada sugeriraju dobro koordiniran tim : tri paralelne implementacije istog RAT-a (PowerShell, C++ i Python), konzistentan C2 protokol, gotovo identično ponašanje u svim varijantama i jasna strategija samočišćenja kako bi se izbjegli tragovi. Elastic je naglasio da ova konzistentnost ukazuje na jednog programera ili grupu koja radi na zajedničkom dizajnerskom dokumentu, daleko od improvizacije.
Pored čisto tehničkih aspekata, jedna od najuznemirujućih tačaka slučaja je kako je došlo do hakerske krađe npm računa glavnog održavatelja. Sam menadžer Axiosa kasnije je objasnio da je imao omogućenu dvofaktorsku autentifikaciju na gotovo svim svojim servisima , a ipak je na kraju odobrio pristup, a da toga nije bio svjestan.
Prema analizi koju je tim podijelio nakon incidenta, napadači su izveli vrlo složenu operaciju socijalnog inženjeringa, podržanu alatima zasnovanim na vještačkoj inteligenciji, kako bi stekli njihovo povjerenje . Lažno su se predstavljali kao osnivač kompanije, kopirajući njen vizuelni identitet, fotografiju, pa čak i korporativni brend. Kreirali su pravi Slack prostor sa logotipom kompanije, kanalima sa objavama navodno sinhronizovanim sa LinkedIn-om, pa čak i lažnim profilima zaposlenih i drugih održavalaca softvera otvorenog koda.
U tom okruženju, zakazali su sastanak putem Microsoft Teamsa na kojem je, čini se, učestvovala cijela grupa stručnjaka . Tokom sastanka, simulirali su tehnički problem i naznačili da je jedna komponenta njihovog sistema zastarjela. Tehničar za održavanje, pretpostavljajući da se radi o legitimnom zahtjevu vezanom za sam alat za video konferencije, preuzeo je i instalirao predloženu datoteku.
Ta datoteka je, u stvari, bila trojanac za udaljeni pristup koji je omogućio napadačima da pristupe podacima žrtve i na kraju preuzmu kontrolu nad npm računom koji se koristi za objavljivanje Axiosa . Cijeli proces je bio tako dobro orkestriran, s toliko uvjerljivih detalja, da ga je žrtva opisala kao "savršeno koordiniran, profesionalan i potpuno uvjerljiv".
Ovaj ljudski element incidenta jasno pokazuje da čak ni tehničke mjere poput 2FA nisu dovoljne kada se visokonivoski socijalni inženjering kombinuje sa vizuelnom imitacijom, deepfake-ovima ili detaljnim kloniranjem organizacija . Najslabija karika je, još jednom, ljudska interakcija.
Utjecaj na organizacije i programere koji koriste Axios
Sa praktične tačke gledišta, glavni problem je utvrditi ko je zapravo bio pogođen. Svaka organizacija koja je instalirala [email protected] ili [email protected] tokom perioda u kojem su bili dostupni trebala bi pretpostaviti da mašina ili cjevovod koji je izvršio instalaciju mogu biti kompromitovani.
Preporuke firmi poput StepSecurity, Aikido, Huntress i Elastic su nedvosmislene. U slučaju sumnje, neophodan je proaktivan pristup, a ne samo "brisanje i ponovna instalacija node_modules ". Razborit postupak je ponovna izgradnja pogođenih mašina ili okruženja iz pouzdanih slika i pažljiv pregled CI/CD logova kako bi se utvrdilo koji su poslovi ili cjevovodi možda izvršili kompromitovane verzije.
Nadalje, ključno je rotirati sve akreditacije i tajne kojima je RAT mogao pristupiti s tih čvorova : npm tokene, ključeve pružatelja usluga u oblaku, tajne podataka cjevovoda, akreditacije baze podataka, SSH ključeve itd. Ostavljanje ovih akreditacija u opticaju nakon takvog napada ostavlja otvorena vrata za tiho lateralno kretanje.
Na tehničkom nivou, timovi bi trebali pregledati svoje datoteke zaključavanja (package-lock.json, pnpm-lock.yaml, yarn.lock) za reference na kompromitovane verzije Axiosa i plain-crypto-js . Ako se pronađu ovi elementi, sljedeći korak je pregled pogođenih sistema za potencijalne RAT artefakte: /Library/Caches/com.apple.act.mond na macOS-u, %PROGRAMDATA%\wt.exe i %PROGRAMDATA%\system.bat na Windowsu ili /tmp/ld.py na Linuxu.
Paralelno s tim, preporučuje se eksplicitno postavljanje sigurnih verzija Axiosa, kao što su 1.14.0 i 0.30.3, te korištenje nadjačavanja ili rješavanja kako bi se spriječilo da tranzitivne zavisnosti pređu na neželjene verzije . Blokiranje odlaznog prometa prema domeni sfrclakcom također je razumna mjera suzbijanja, barem dok se analizira puni obim napada.
Lekcije o sigurnosti za lanac snabdijevanja softverom
Incident s Axiosom nije izolirani događaj, već još jedna karika u lancu napada na lanac snabdijevanja koji uključuje slučajeve poput SolarWindsa, Kaseye, 3CX-a, Polyfill.io i ranjivosti iskorištene u Log4j-u. Osnovna ideja je uvijek ista: kompromitirati široko korištenu, pouzdanu komponentu kako bi se maksimizirao doseg , umjesto pokušaja napada mašinu po mašinu.
Jedna od najčešće ponavljanih lekcija stručnjaka je da se povjerenje ne može oslanjati isključivo na popularnost biblioteke ili reputaciju održavatelja . Ako je kanal za objavljivanje (npm račun, CI/CD cjevovod, infrastruktura za izgradnju) kompromitovan, sve što je objavljeno kroz njega nasljeđuje taj rizik. Ručni pregled koda također nije dovoljan ako se zlonamjerni softver krije u tranzitivnim zavisnostima i briše se nakon izvršenja.
Također je istaknuto da "zadana brzina" za ažuriranja zavisnosti ima svoju cijenu u smislu površine napada . Uvijek automatsko usvajanje najnovije verzije je nevjerovatno praktično, ali otvara vrata za širenje zlonamjernog ažuriranja u roku od nekoliko minuta. Neke organizacije već razmatraju politike kao što je zahtjev da nova verzija bude u ekosistemu određeni period prije usvajanja ili zahtjev da se promjene kritičnih paketa podvrgnu dodatnom ručnom pregledu.
Što se tiče razvojne infrastrukture, CI/CD okruženja moraju se tretirati kao visoko osjetljiva imovina . Svaki RAT izvršen tokom instalacije zavisnosti gotovo sigurno će tražiti tajne procesnog procesa i pristup drugim okruženjima. Segmentacija ovih čvorova, njihovo pažljivije praćenje i periodična rotacija njihovih tajni više nije "idealna" preporuka već neophodnost.
Konačno, otkrivanje ovih vrsta napada zahtijeva kombinovanje informacija iz više izvora: instaliranih verzija, zaključanih datoteka, indikatora kompromitovanja operativnog sistema i mrežne telemetrije . Alati koji generišu i upravljaju softverskim bilovima materijala (SBOM) pomažu u brzom praćenju koji projekti koriste koje pakete, što je od vitalnog značaja kada se aktiviraju masovna upozorenja poput ovog.
Cijela ova epizoda s Axiosom ilustruje stepen u kojem ekosistem zavisnosti, koliko god zreo i konsolidovan izgledao, i dalje u velikoj mjeri zavisi od povjerenja i stalne budnosti. Naizgled bezopasna biblioteka, koju održava jedna osoba koja postane žrtva dobro izvedenog napada socijalnim inženjeringom, može, u roku od nekoliko sati, postati globalni vektor za primjenu višeplatformskih RAT-ova protiv kompanija, freelancera i organizacija svih veličina . Jačanje kontrola oko objavljivanja računa, cjevovoda i kritičnih zavisnosti više nije opcionalna najbolja praksa, već preduslov za kontinuirani razvoj u okruženju u kojem su napadači sve strpljiviji, snalažljiviji i opremljeniji boljim alatima.

