Skip to content
securitynpmsupply-chain

Napad na axios: zašto savet iz četova proverava samo macOS

Dadaistički kolaž na tamnom stolu — Apple logo sa crvenom kvačicom, Windows i Linux logotipi sa crvenim znakovima pitanja, povezani crvenim koncem, okruženi iscepanim fragmentima koda i pokidanom karikom lanca

Nakon kompromitovanja axios-a 31. marta 2026. godine, kroz programerske četove i društvene mreže proširio se kompaktan set komandi: blokirati C2 domen preko /etc/hosts, očistiti DNS keš, proveriti da li postoji fajl u /Library/Caches. Savet deluje razumno, hiljade ljudi ga deli, i u njemu ima smisla. Ali pokriva tačno jednu od tri platforme na koje je malver usmeren, a na preostale dve stvara lažni osećaj sigurnosti: programer pokrene proveru, ne nađe ništa i zaključi da je čist.

Šta se preporučuje — i šta u tom savetu nedostaje

Tipičan set komandi koji se proširio kroz četove:

# blokirati C2 domen
echo '127.0.0.1 sfrclak.com' | sudo tee -a /etc/hosts

# očistiti DNS keš
sudo dscacheutil -flushcache

# proveriti da li fajl postoji — ako postoji, mašina je kompromitovana
ls /Library/Caches/com.apple.act.mond

Blokiranje domena preko /etc/hosts — smislena, ali parcijalna mera. C2 server ima poznatu IP adresu (142.11.206.73), i ako malver kontaktira server direktno, zaobilazeći DNS, blokiranje domena neće pomoći. Za potpunu zaštitu potrebno je blokirati IP na nivou firewall-a.

dscacheutil -flushcache — komanda koja postoji samo na macOS-u. Na Windows-u i Linux-u je besmislena, a programeri koji kopiraju savet na tim platformama jednostavno će dobiti grešku.

Provera fajla /Library/Caches/com.apple.act.mond — validan indikator kompromitovanja, ali isključivo za macOS. Na Windows-u malver ostavlja druge artefakte u drugim direktorijumima, na Linux-u — treće. Osoba koja pokrene ls /Library/Caches/com.apple.act.mond na Linux mašini neće naći fajl i izvući pogrešan zaključak.

Glavni problem je, međutim, drugi: u savetu nedostaje prvi korak — proveriti koja verzija axios-a je instalirana. Ako to nije 1.14.1 ili 0.30.4, dalje provere nisu potrebne. Ovaj korak je trivijalan (npm ls axios), ali ga iz nekog razloga preskaču, odmah prelazeći na traženje artefakata na disku.

Da bismo razumeli koje artefakte tražiti na svakoj platformi, treba razumeti kako je sam napad funkcionisao.

Šta se desilo

Napadač se pripremao najmanje 18 sati, gađao je dve velike grane istovremeno i ugradio samouništenje tragova u sam dropper. Hronologija događaja u UTC:

30. mart, 05:57 — na npm-u se pojavljuje paket [email protected] sa naloga nrwise (email: [email protected]). Verzija 4.2.0 je čista, bez malicioznog koda. To je mamac: paket se registruje unapred da bi u trenutku napada izgledao kao obična zavisnost.

30. mart, 23:59 — objavljuje se [email protected]. Ova verzija sadrži postinstall skriptu sa cross-platform RAT dropper-om.

31. mart, 00:05 — automatski sistem za detekciju malvera Socket Research reaguje šest minuta nakon objavljivanja [email protected].

31. mart, 00:21 — sa otetog naloga jasonsaayman, glavnog održavaoca axios-a, objavljuje se [email protected]. U package.json je dodata zavisnost na [email protected]. Objavljivanje ide direktno preko npm CLI-ja, zaobilazeći GitHub Actions CI/CD pipeline projekta.

31. mart, 01:00 — objavljuje se druga otrovana verzija, [email protected], na grani 0.x. Obe grane su kompromitovane za 39 minuta.

31. mart, 03:15 — npm povlači obe verzije axios-a.

31. mart, 04:26 — na paket je stavljen security hold, objavljeni su čisti stub-ovi.

Napadač je kompromitovao nalog jasonsaayman preko ukradenog dugoživećeg npm tokena, promenio email na [email protected] i objavio pakete ručno, zaobilazeći CI/CD.

Kako malver funkcioniše

Zavisnost plain-crypto-js se nigde ne importuje u axios izvornom kodu. Njen jedini zadatak je da izvrši postinstall skriptu setup.js prilikom instalacije paketa. Skripta koristi dvoslojnu obfuskaciju: obrnuti Base64 i XOR enkripciju sa ključem OrDeR_7077.

Nakon deobfuskacije, dropper detektuje platformu i preuzima odgovarajući payload sa C2 servera sfrclak.com:8000 (IP: 142.11.206.73). Saobraćaj se maskira kao zahtevi ka npm registru — POST tela sadrže stringove poput packages.npm.org/product0, product1, product2 za identifikaciju platforme.

Nakon izvršavanja, dropper briše sebe i zamenjuje svoj package.json čistom verzijom iz unapred pripremljenog fajla package.md, čime otežava forenzičku analizu.

macOS

Dropper pokreće AppleScript koji preuzima binarni fajl u /Library/Caches/com.apple.act.mond, maskirajući ga kao Apple sistemski demon. Binarni fajl je potpuno funkcionalan RAT: izvršavanje komandi, injekcija binarnih fajlova, pregled fajl sistema. Proces se odvaja od roditeljskog i radi u pozadini.

Windows

Mehanizam je složeniji i koristi tri komponente. Prvo, dropper kopira powershell.exe u %PROGRAMDATA%\wt.exe, maskirajući ga kao Windows Terminal — to je poznata tehnika zaobilaženja EDR sistema. Zatim se kreira VBScript fajl %TEMP%\6202033.vbs, koji se pokreće preko cscript //nologo u skrivenom prozoru. VBScript preuzima PowerShell payload u %TEMP%\6202033.ps1 i pokreće ga sa flagovima -WindowStyle Hidden -ExecutionPolicy Bypass.

Ključni detalj: VBS fajl se sam briše nakon izvršavanja (del "%TEMP%\6202033.vbs" /f). To znači da privremeni fajlovi u %TEMP% mogu nedostajati čak i na kompromitovanoj mašini. Persistentan artefakt ostaje wt.exe — kreira se jednom i preživljava restartovanja.

Linux

Dropper preuzima Python skriptu u /tmp/ld.py i pokreće je. Payload funkcioniše kao RAT slično macOS verziji.

Kako zaista proveriti

Korak 0: proveriti verziju axios-a

Pre nego što tražite fajlove na disku, utvrdite da li je kompromitovana verzija uopšte bila instalirana:

npm ls axios

Ako u izlazu nema verzija 1.14.1 ili 0.30.4 — vaš projekat nije pogođen. Ako koristite monorepo, proverite sve workspace-ove. Ako imate više projekata — proverite svaki.

macOS

# proveriti da li RAT binarni fajl postoji
ls -la /Library/Caches/com.apple.act.mond

# proveriti da li proces radi
ps aux | grep com.apple.act.mond | grep -v grep

# proveriti mrežne konekcije ka C2
lsof -i -nP | grep 142.11.206.73

Ako fajl postoji ili proces radi — mašina je kompromitovana.

Windows (PowerShell)

# proveriti persistentan artefakt (primarni indikator)
Test-Path "$env:ProgramData\wt.exe"

# proveriti privremene fajlove (mogu nedostajati — sami se brišu)
Get-ChildItem $env:TEMP -Filter '6202033.*' -Force -ErrorAction SilentlyContinue

# proveriti mrežne konekcije ka C2
Get-NetTCPConnection | Where-Object { $_.RemoteAddress -eq '142.11.206.73' }

Ako wt.exe postoji — mašina je kompromitovana. Odsustvo fajlova 6202033.* ne garantuje bezbednost: oni se sami brišu nakon izvršavanja.

Linux

# proveriti da li payload postoji
ls -la /tmp/ld.py

# proveriti pokrenute Python procese
ps aux | grep ld.py | grep -v grep

# proveriti mrežne konekcije ka C2
ss -tnp | grep 142.11.206.73

Mrežni nivo (sve platforme)

Bez obzira na OS, vredi proveriti da li je bilo konekcija ka C2 serveru:

# blokirati i domen i IP
# domen:
echo '127.0.0.1 sfrclak.com' | sudo tee -a /etc/hosts
# IP — na nivou firewall-a (iptables, pf, Windows Firewall)

Šta raditi ako ste kompromitovani

Ako je bilo koja od provera iznad dala pozitivan rezultat:

  1. Isključiti mašinu sa mreže — izvući kabl, isključiti Wi-Fi. Ne gasiti mašinu: podaci u RAM-u mogu biti potrebni za istragu.

  2. Rotirati sve tajne kojima je mašina imala pristup: API ključeve, tokene, lozinke baza podataka, SSH ključeve, AWS/GCP/Azure credentials. Malver je eksfiltrirao promenljive okruženja, pa sve što je bilo u environment variables ili .env fajlovima treba smatrati kompromitovanim.

  3. Vratiti verziju axios-a na bezbednu: 1.14.0 (za granu 1.x) ili 0.30.3 (za granu 0.x).

  4. Ukloniti persistentne artefakte: wt.exe na Windows-u, com.apple.act.mond na macOS-u.

  5. Proveriti cron / Task Scheduler za sumnjive unose — RAT je mogao podesiti automatsko pokretanje.

Zaključak

Nepotpuno bezbednosno uputstvo je gore od nepostojanja uputstva, jer stvara iluziju provere. Programer na Windows-u pokrene tri komande za macOS, ne nađe ništa i uveren je da nije pogođen. Pre nego što podelite bezbednosni savet, vredi ga pročitati do kraja i postaviti jedno pitanje: da li ovo radi na mojoj platformi?


Izvori: Socket Research, StepSecurity, Aikido, The Hacker News, Snyk, Wiz