Foto: Freepik Premium
Sigurnosni istraživači opisali su novi zlonamjerni opskrbni napad koji cilja razvojne inženjere koji koriste OpenAI Codex preko naizgled legitimnog daljinskog web sučelja. Paket codexui-android oglašava se na GitHubu i npm-u kao remote web UI za OpenAI Codex, a navodno ima više od 29.000 tjednih preuzimanja. Paket je i dalje dostupan za preuzimanje iz repozitorija.
Posebnost ove kampanje, prema istraživačima, jest to što nije riječ o tipičnom napadu s typosquatom ili jednokratnim paketom. Zlonamjerni je kod ugrađen u funkcionalan npm paket koji je bio aktivno razvijan, dok je povezani GitHub repozitorij ostao čist. Aikido Securityjev istraživač Charlie Eriksen rekao je da je tijekom proteklog mjeseca svako pokretanje paketa potajno slalo autentifikacijske tokene za Codex napadaču kontroliranom poslužitelju.
Prema opisu istraživača, zlonamjerne su promjene unesene otprilike mjesec dana nakon objave paketa u registryju, vjerojatno kako bi se steklo povjerenje korisnika i proširio doseg. npm račun povezan s paketom nosi naziv friuns, odnosno Igor Levochkin. U paketu je kod koji iz datoteke ~/.codex/auth.json dohvaća sadržaj i šalje ga na udaljeni poslužitelj sentry.anyclaw[.]store, koji se predstavlja kao Sentry, legitimna platforma za nadzor aplikacija i praćenje pogrešaka.
Među podacima koji se pritom prikupljaju nalaze se access_token, refresh_token, id_token i ID računa. Eriksen je upozorio da refresh_token ne istječe te da napadač koji ga posjeduje može neprimjetno impersonirati korisnika neograničeno dugo. OpenAI u dokumentaciji podrške navodi da se pri spremanju u datoteku ~/.codex/auth.json prema njoj treba odnositi kao prema lozinki jer sadrži pristupne tokene i ne treba je spremati u ticket, dijeliti u chatu niti unositi u repozitorij.
Aikido navodi i da npm paket nije jedini kanal distribucije koji se koristi za ciljane napade na Codex razvojne inženjere. Tvrtka je uočila Android aplikaciju OpenClaw Codex Claude AI Agent, s nazivom paketa gptos.intelligence.assistant, koja pokreće npm paket unutar PRoot sandboxa i šalje Codex vjerodajnice na isti endpoint. Eriksen je objasnio da je APK veličine 26 MB i da na prvom pokretanju izdvaja Termux-ov Linux userland u privatnu pohranu aplikacije te pokreće Node.js unutar njega preko PRoota.
Navodi se i da verzija paketa nije fiksirana pa uređaj preuzima ono što je trenutačno objavljeno na npm-u. Prema istraživačima, exfiltracija je prisutna od codexui-android@0.1.82. Paket se izvršava unutar PRoot sandboxa aplikacije, gdje prijava u Codex unutar aplikacije upisuje auth.json, a nakon prijave paket čita tu datoteku iz sandboxa i šalje puni OAuth blob na sentry.anyclaw.store/startlog. Android aplikaciju objavio je entitet nazvan BrutalStrike, a ima više od 50.000 preuzimanja. Isti lanac eksfiltracije prijavljen je i u drugoj Android aplikaciji povezanoj s BrutalStrikeom, Codex, s nazivom paketa codex.app, koja je preuzeta više od 10.000 puta.
Aikido navodi i da su tri preostale aplikacije tog razvojne naloga bez te funkcionalnosti. Nakon što su kontaktirali autora paketa na GitHubu, istraživači kažu da je najprije objavio komentar da je izgubio pristup svom npm računu, a zatim ga uredio i napisao da trenutno interno istražuje incident te da je započeo uklanjanje pogođene funkcionalnosti i povezanih podataka. Autor je dodatno tvrdio da nikakvi vjerodajnički podaci nisu podijeljeni s trećim stranama, ali nije odgovorio zašto je kod uopće umetnut samo u npm build niti zašto mu trebaju Codex tokeni. X profil povezan s autorom uključuje domenu anyclaw[.]store.
WHOIS zapisi pokazuju da je domena registrirana 12. travnja 2026., svega dva dana nakon što je prva verzija npm paketa, verzija 0.1.72, postavljena na npmjs[.]com. Razvoj dolazi u trenutku kada napadači sve češće ciljaju stvarne alate i radne tokove za razvoj umjetne inteligencije kako bi ukrali vjerodajnice i dublje se infiltrirali u opskrbni lanac softvera. Aikido je krajem prošlog mjeseca također objavio da izbrisani Google API ključ može ostati aktivan do 23 minute, a medijan vremena opoziva iznosi oko 16 minuta.