- npm-is on ohustatud mitu @7nohe/openapi-react-query-codegeni versiooni, manustades keeruka pahavara koormuse, mis kuritarvitab TanStack Query-põhiseid töövooge.
- Rünnakus kasutati binding.gyp liivakasti põgenemiskäsku ja eelinstallitud skripte. mitmekihilise JavaScripti varastaja käivitamiseks npm-i installimise ajal, isegi ilma selgesõnaliste elutsükli konksudeta.
- Kasulik koormus kogus laia valikut arendaja ja pilveteenuse mandaate (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes ja palju muud) ning filtreeris need avalikesse GitHubi repositooriumidesse.
- Uss kuritarvitas varastatud tokeneid, et nakatada täiendavaid npm-, PyPI- ja RubyGems-pakette ning GitHubi repositooriume., tuues esile laiema tarneahela riski, mis on seotud populaarse TanStack Query npm kasutamisega.
2026. aasta augusti lõpus avastasid turvauurijad a TanStack Query npm ökosüsteemiga seotud suunatud tarneahelarünnak populaarse OpenAPI koodigeneraatori kaudu. Juhtum keskendub paketile @7nohe/openapi-react-query-codegen, tööriist, mis genereerib automaatselt tüübikindlaid konksusid TanStack Query jaoks otse OpenAPI skeemidest ja mida on npm-is alla laaditud üle 150 000 korra nädalas.
Selle asemel, et ise TanStack Query põhiteeke rünnata, rikkusid ründajad ümbritsevaid tööriistu, millele paljud meeskonnad TanStack Query konksude loomiseks toetuvad , libistades keeruka pahavara generaatori mitmesse versiooni. Kuna need konksud ühenduvad otse Reacti ja TypeScripti tootmiskoodibaasidega, ulatub mõju kaugemale ühest paketist, puudutades iga CI-torustikku või arendaja masinat, mis installis saastunud versioonid.
Kuidas rünnak kuritarvitas TanStack Query koodigeneraatorit npm-is
Mõjutatud raamatukogu @7nohe/openapi-react-query-codegen, kasutatakse laialdaselt TanStack Query konksukihtide loomiseks OpenAPI lepingutest, säästes meeskondi korduva käsitsi kirjutatava toomise loogika raskustest. Umbes 20 minuti jooksul saatis ründaja npm-i registrisse selle paketi kümme pahatahtlikku versiooni, millel kõigil olid kehtivad GitHub Actionsi kaudu loodud päritolutõendid.
Need kinnitused, mis tavaliselt on tugev terviklikkuse signaal, muutusid mõttetuks, kuna projekti GitHub Actionsi töövoog ise oli ohustatud . Selle töövoo haavatavust ära kasutades sai ründaja võimaluse saata troojalastega nakatunud versioone, genereerides samal ajal krüptograafilisi tõendeid selle kohta, et need pärinesid „ametlikust” torujuhtmest. Paistab, et vastav GitHubi hoidla võeti sama käigus üle, andes ründajale täieliku kontrolli avaldamisprotsessi üle.
Kampaania peegeldab varasemaid npm-iga seotud tarneahela intsidente, kuid lisab omapärase pöörde: see on suunatud konkreetselt OpenAPI tööriistade ja TanStack Query kasutamise ristumiskohtKuna generaator väljastab Reacti koodi, mis sõltub @tanstack/react-query, iga organisatsioon, mis selle oma automatiseeritud API kliendi genereerimisse integreeris, riskib pahavara tõmmamisega ehitusagentidesse, CI-käivitajatesse või arendajate sülearvutitesse.
Uurijad märkisid ka, et pahavara bränding – nimetades end „ Trinitite: Sponsored by Preview 2 Effects ” – meenutab varasemate TeamPCP-ga seotud operatsioonide teatraalset stiili, kuigi jääb selgusetuks, kas tegemist on kopeerijate, killustunud rühmituse või esteetikat laenava mitteseotud näitleja tööga.
Binding.gyp liivakasti põgenemine: pahavara käivitamine npm installimise ajal
Üks ebatavalisemaid tehnilisi valikuid selles TanStacki päringuga külgnevas rünnakus on kuritarvitamine binding.gyp täitmisvektorina npm-i installimise ajalTavapärastes oludes binding.gyp kirjeldab, kuidas kompileerida natiivseid Node.js lisandmooduleid. Kui npm sellise failiga kokku puutub, käivitab see node-gyp, mis omakorda hindab conditions väli Pythoni abil.
Pahatahtlikud versioonid @7nohe/openapi-react-query-codegen ära kasutada seda käitumist, manustades a Pythoni liivakasti põgenemine conditions blokeerimaKahjutu ehituskonfiguratsiooni asemel läbib fail Pythoni sisemist klassihierarhiat, et jõuda catch_warnings klass, pöördub __builtins__, import osja lõpuks helistab os.system JavaScripti kasuliku koormuse käivitamiseks Node.
Kui segadus on kõrvaldatud, taandub tingimus ühele käsule: node 3FWCvzduYZg.js käivitatakse installimise ajal automaatselt. Ülejäänud binding.gyp sisu on sisuliselt suitsukate: deklareeritud sihtkoha nimi on tähenduseta, tüüp on kodeeritud kuueteistkümnendsüsteemis noneja tõelist natiivset kompileerimist ei toimu.
Mitte iga rikutud väljalase ei tuginenud ainult sellele nipile. Kaks tavapäraselt kasutatud eelväljalaske silti preinstall skriptide asemel, üks kohaliku faili kutsumine nu.js ja teine laadib Buni käitusaja alla kaudu wget torujuhtme kaudu bash enne häbitult nimetatud skripti alustamist is_it_this_simple.jsHilisemad versioonid kahekordistasid, ühendades binding.gyp ära kasutada selgesõnalise "preinstall": "node 3FWCvzduYZg.js" sisenemine package.json et maksimeerida kasuliku koormuse käivitamise võimalusi.
Liivakastidest kõrvalehoidmiseks loodud mitmekihiline JavaScripti kasulik koormus
Ohustatud TanStacki päringugeneraatori keskmes asub 3FWCvzduYZg.js, üherealine fail, mis kaalub umbes 5.4 MB, mis asub npm-paketi juurkataloogis. See skript on tugevalt hägustatud, kasutades kontrolli aeglustamiseks ja staatiliste analüüside tööriistade nurjamiseks mitut krüptimisetappi.
Kõige välimine kiht on Hiiglaslik täisarvude massiiv, mis dekrüpteeritakse XOR-i abil fikseeritud võtmega, mis paljastab koodi, mis laadib Buni käituskeskkonna vaikselt alla ajutisse kataloogi (näiteks selliste nimede all nagu trinnyyyy-XXXXX süsteemi ajutises kaustas). Seejärel kasutatakse Buni järgmise krüptitud segmendi käivitamiseks, mis salvestatakse skripti sisse põimitud AES-128-GCM-kaitstud andmetena.
Pärast täielikku dekrüpteerimist ja deobfuskeerimist leidsid analüütikud umbes 800 KB suuruse sisemise JavaScripti faili, mis toimib volituste varastaja, ise leviva ussi ja hävitava utiliidina . See sisemine skript rakendab tuntud obfuscator.io teisendustele peale kihilise kohandatud segatud tabeli šifri, mis annab taas märku, et autorid püüdsid spetsiaalselt seista vastu automatiseeritud pöördprojekteerimisele.
Enne tegeliku kahju tekitamist teeb pahavara järgmist: keskkonnakontrollide seeria, mis on loodud turvauurijate ja automatiseeritud skannerite vältimiseksSee väljub vaikselt, kui tuvastab Venemaa süsteemilokaliteedid, CrowdStrike'i, SentinelOne'i või Carbon Blacki levinud EDR-tööriistad, tarneahela skannimistoodete poolt kasutatavad teadaolevad liivakastikataloogid, võltsitud salajased eesliited (näiteks AKIAFAKE või peibutusnpm-tokenid) või turva-uuringute demodega seotud GitHubi organisatsioonide nimed. Samuti otsib see StepSecurity harden-runner tööriista olemasolu ja loobub, kui näeb seda tugevdatud CI-konfiguratsiooni.
Mida pahavara üritab TanStack Query kasutajatelt ja kaugemaltki varastada
Kui täitmistingimused on täidetud, hakkab kasulik koormus süstemaatiliselt koguma laia valikut volitusi, mis esinevad tavaliselt tänapäevastes JavaScripti ja TanStack Query-põhistes töövoogudes . Tähelepanu keskmes ei ole esiotsa raamistik ise, vaid pilve- ja arendajainfrastruktuur, millega TanStack Query kliendid tavaliselt suhtlevad.
GitHubi ligipääs on peamine sihtmärk. Pahavara otsib nii klassikalisi isiklikke juurdepääsulubasid kui ka uuemaid detailsemaid lubasid keskkonnamuutujates ja failisüsteemi asukohtades. GitHub Actionsi käivitajate puhul proovib see hankida OIDC-tokenit standardse ACTIONS_ID_TOKEN_REQUEST_TOKEN ja seotud URL-i, kasutades sama mehhanismi, mida õigustatud töövood kasutavad lühiajaliste pilveteenuste volituste jaoks.
Pakettregistrid on veel üks oluline andmeallikas. Skript loeb npm konfiguratsioonifailid, näiteks ~/.npmrc, skannides kandja tokeneid ja valideerides neid npm registri suhtes whoami tulemusnäitajaSee rakendab sarnast loogikat Pythoni PyPI jaoks (otsitakse märke, mis algavad tähega pypi-AgEIcHlwaS5vcmcCJ) ja RubyGems (otsib rubygems_ tokenid), andes ründajatele potentsiaalse juurdepääsu laiale ökosüsteemideülesele jalajäljele.
Pilvepõhine volituste kogumine on veelgi ulatuslikum. Pahavara uurib AWS-iga seotud keskkonnamuutujad ja konfiguratsioonifailid, EC2 eksemplari metaandmete teenus ja ECS-i metaandmete lõpp-punktid, Kasutamine sts:GetCallerIdentity kutsub üles kontrollima, kas kõik avastatud volitused on enne nende väljafiltreerimist kehtivad. See kordab mustrit Azure (kliendi ID-d, saladused, hallatavad identiteedid ja isegi Azure'i võtmehoidla) ja eest Google Cloud, kontrollib teenusekonto JSON-i, metaandmete servereid ja salajasi haldureid kui sellel on kasutatav märk.
Lisaks pilve- ja paketiregistritele otsib skript ka kohalikelt ketastelt üle 150 erineva gloobuse mustri, sealhulgas SSH privaatvõtmed, Dockeri konfiguratsioonid, .env failid, Giti volituste salvestused, krüptorahakottide kataloogid, sõnumsidekliendid nagu Signal või Telegram Desktop, VPN-i konfiguratsioonid ja isegi tehisintellekti tööriistadega (nt Claude) lingitud konfiguratsioonifailid. See lai valik peegeldab arusaama sellest, kuidas TanStacki päringupõhiseid rakendusi tavaliselt arendatakse ja juurutatakse: sageli keskkondades, kus ühel masinal või CI-tööl on laialdased volitused repositooriumide, registrite ja pilveteenuse pakkujate jaoks.
Eksfiltratsioon GitHubi repositooriumide ja ussilaadse paljundamise kaudu
Kui andmed on kogutud, kasutab pahavara andmete väljaviimiseks ebatavalist lähenemisviisi. Traditsioonilisele käsklus- ja kontrollserverile postitamise asemel kasutab see GitHubi repositooriume avalike, krüpteeritud edastuskastidena . See mitte ainult ei sulandu tavalise arendajate liiklusega, eriti TanStack Query-mahukates organisatsioonides, mis niigi pidevalt GitHubiga suhtlevad, vaid muudab ka eemaldamise keerulisemaks.
Skript otsib esmalt GitHubi avalikust commit-ajaloost sõnumeid, mis vastavad väga spetsiifilisele mustrile, mis kodeerib commit-sõnumi tekstis krüpteeritud tokeni. Seejärel dekrüpteerib see tokeni, et taastada GitHubi mandaat, mida kasutatakse iga ohvri jaoks uue hoidla loomiseks . See tähendab, et ühest masinast varastatud andmed salvestatakse täiesti teise, juba ohustatud konto alla, mis veelgi segab omistamist.
Iga väljafiltreerimise hoidla on nimetatud juhuslike Touhou projekti tegelaskujude nimede kombineerimine numbrilise järelliitega (näiteks, cirno-marisa-74291) ja selle kirjelduseks on seatud pahavara enda tunnuslause „Trinitite: Sponsored by Preview 2 Effects“. Nendes hoidlates lisab skript JSON-faile nimega doubletrinnys-{counter}-{timestamp}.json sees a results/ kausta.
JSON-paigutus on lihtne, kuid hoolikalt krüpteeritud: see sisaldab envelope mis sisaldas suurema osa varastatud volitustest ja a key väljale, mille seansivõti on krüpteeritud ründaja avaliku RSA-võtmega. See tagab, et isegi kui failid on tehniliselt avalikud, ainult vastava privaatvõtme valdaja saab sisu lugeda, jättes juhuslikud vaatlejad ja enamik automatiseeritud roboteid nägemata, mis varastati.
Paralleelselt toimib pahavara ussina. Kehtivate npm-, PyPI- või RubyGems-tokenide olemasolul see loetleb kõik ohustatud hooldajale kuuluvad paketid ja avaldab uued nakatunud versioonidNakatumise muster järgib sama skeemi, mida kasutati algse TanStack Query koodigeneraatori ohustamisel: pahatahtliku programmi süstimine binding.gyp, sisse astudes 3FWCvzduYZg.jsja paketi edasisaatmist varastatud avaldamistokeni abil. Samuti kuritarvitab see varastatud GitHubi tokeneid ligipääsetavates repositooriumides liikumiseks, lisades tagaukse abil konfiguratsioonifaile .vscode, .claude, .github/workflowsja sarnased kataloogid, kõik süütute commit-sõnumite all, näiteks "chore: update dependencies".
See ussilaadne käitumine võimendab plahvatuse ulatust dramaatiliselt. Üks organisatsioon, mis kasutab oma CI-ahelas TanStack Queryt ja @7nohe/openapi-react-query-codegeni, võib kogemata pahavara kümnetesse sisemistesse pakettidesse ja repositooriumitesse külvata, kui nakatunud arendaja või ehitusagent avaldab nakatunud olekus uusi versioone.
TanStack Query npm kasutajate kompromiteerimise näitajad
Meeskondadele, kes toetuvad TanStack Queryle ja sellega seotud npm-tööriistadele, on vaja konkreetseid lahendusi. Kokkupuute tuvastamiseks on avaldatud ohuindikaatoreid (IOC-sid)Järgmised versioonid @7nohe/openapi-react-query-codegen kinnitati, et need sisaldavad Trinitite'i kasulikku koormust ja neid tuleks käsitleda ebausaldusväärsetena:
- 0.5.4 ja 0.5.5
- 1.6.3 ja 1.6.4
- 2.2.1 ja 2.2.2
- 3.0.3 ja 3.0.4
- Eelväljaanded 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be ja 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab
Suure üherealise JavaScript-faili ilmumine nimega 3FWCvzduYZg.js npm-paketi juurkataloogis on tugev punane lipp. Selle faili kohta on dokumenteeritud mitu SHA-256 räsi.ja administraatorid saavad neid võrrelda installitud pakettide arhiivide või sisemiste registrite vahemällu salvestatud tarballidega, et tuvastada teadaolevalt halbu koopiaid.
Nakatunud süsteemides on ajutised kataloogid, mille nimeks on trinnyyyy- OS-i ajutises kaustas olev eesliide, millele järgneb kuus juhuslikku tähtnumbrilist märki, võib samuti viidata varasemale käivitamisele. Neid katalooge kasutatakse siis, kui sisemise kasuliku koormuse jaoks vajaliku Bun-käitusaja allalaadimine ja ettevalmistamine.
Lisaks konkreetsele generaatoripaketile peaksid organisatsioonid üle vaatama npm-auditi andmed, sisemised paketipeeglid ja CI-logid, et leida ootamatu binding.gyp failid või äkiline ilmumine preinstall konksud pakettides, mis varem ei tuginenud natiivsetele lisandmoodulitele ega elutsükli skriptidele. TanStack Query kontekstis tähendab see tavaliselt mis tahes koodi genereerimise või OpenAPI integratsioonitööriistade lähemat uurimist, mis ühendub Reacti, Vue või muude esiotsadega.
Lõpuks tasub uurida GitHubi tegevust. Repositooriumid, mille kirjeldused vastavad fraasile „Trinitite: Sponsored by Preview 2 Effects” või millel on results/doubletrinnys-*.json failid ja commit-teated, näiteks "meow meow meow", tuleks uurida kui potentsiaalseid väljafiltreerimise lõpp-punkte, mis on seotud TanStack Query npm-i ohustatud kasutamisega.
Mida TanStacki päringuid kasutavad meeskonnad praegu teha saavad
Enamiku organisatsioonide jaoks on esimene samm Inventuur, kus ja kuidas TanStack Queryt ja sellega seotud npm-tööriistu kasutatakseKuna ohustatud pakett genereerib spetsiaalselt konksud @tanstack/react-query, kipub see ilmuma projektides, kus on tugev tüübimine ja automatiseeritud OpenAPI klientide genereerimise torujuhtmed, mis on sageli otse CI-sse ühendatud.
Meeskonnad peaksid kontrollima, kas mõni loetletud pahatahtlikest versioonidest @7nohe/openapi-react-query-codegen olid kunagi kohal package-lock.json, pnpm-lock.yamlvõi yarn.lock failidesse või tõmmatakse transitiivsete sõltuvuste kaudu sõltuvuspuudesse. Isegi kui pakett pole enam installitud, võib ajalooline kasutamine ehitusagentides vajada põhjalikumat uurimist.
Kompromissi kahtluse korral tuleks paralleelselt keskenduda pahavara poolt kogutud vahelduvad märgid ja volitusedSee hõlmab GitHubi isiklikke juurdepääsumärke, npm-i avaldamismärke, pilvepääsuvõtmeid ja kõiki pikaajalisi saladusi, mis on salvestatud keskkonnamuutujatesse või CI-jooksjate lihtteksti konfiguratsioonifailidesse. Pilveteenuse pakkujad logivad üldiselt sts:GetCallerIdentity ja sarnased kõned, mis aitavad kokkupuuteperioodi kitsendada.
Tarneahela turbetööriistad, mis on spetsialiseerunud npm-pakettide pahavara skannimisele, aitavad avastada nakkusi, mis on traditsioonilistest haavatavuste skanneritest mööda vaadanud. Mõned platvormid liigitavad selle kampaania juba kriitiliseks, 100/100-raskusastmega pahavaraprobleemiks ja pakuvad TanStack Queryle ja sellega seotud sõltuvustele tuginevate repositooriumide öiseid uuesti skannimisi või nõudmisel kontrolle.
Tulevikku vaadates organisatsioonid, mis toetuvad suuresti TanStack Queryle, @tanstack/react-queryvõi @tanstack/vue-query tootmises võivad pakendite paigaldamise ümber olevad kaitsepiirded olla tugevdatud. See võib hõlmata puhverserveri registrid, mis blokeerivad teadaolevalt halbu versioone, tööriistad, mis pealt kuulavad käske nagu npm install or pnpm add ja kontrollige pakette ohuteabe voogude aluselja päritolu ja allkirja kontrollimise rangem kasutamine – mööndusega, et ohustatud CI-torustikud saavad ikkagi toota „kehtivaid” kinnitusi, nagu siin näha.
Kuna esiotsa paketi andmetoomise ja vahemällu salvestamise teekide (nt TanStack Query) osas standardiseeruvad üha enam, uurivad ründajad tõenäoliselt jätkuvalt npm-ile avaldatud generaatorite, käsurealiide (CLI) ja pluginate ümbritsevat ökosüsteemi . See juhtum rõhutab, kuidas pealtnäha kitsas utiliidipakett – mis lihtsalt väljastab TanStack Query konksusid OpenAPI-failist – võib järelevalveta jätmise korral muutuda suure mõjuga sisenemispunktiks ehitussüsteemidesse, monorepodesse ja pilveinfrastruktuuri.
Trinitiitide kampaania avastamine @7nohe/openapi-react-query-codegen toob esile kuidas TanStack Query kasutamisega seotud populaarsed npm-paketid võivad vaikselt muutuda tarneahela rünnakuvektoriteks kui nende väljalaske töövooge rikutakse. Kuritarvitades binding.gyp, hägustatud JavaScripti laadurite ja GitHubi-põhise eksfiltratsiooni abil õnnestus ründajatel peita kaugeleulatuv volituste varastaja tööriista, mida paljud meeskonnad pidasid tavapäraseks torutööks. Organisatsioonide jaoks, mis tuginevad TanStack Queryle Reacti ja teiste esiotsasüsteemide puhul, pole npm-hügieeni karmistamine, kahtlaste elutsükli skriptide jälgimine ning OpenAPI ja päringukoodi genereerimise tööriistade ümber toimuva CI-torustike tugevdamine enam valikuline lisa, vaid osa põhiriski mudelist.