Paket TanStack Query npm ciljano putem kompromitiranog generatora OpenAPI koda na npm-u

Posljednje ažuriranje: 08/29/2026
  • Više verzija @7nohe/openapi-react-query-codegen na npm-u je bilo kompromitovano., ugrađujući sofisticirani zlonamjerni softver koji zloupotrebljava radne procese zasnovane na TanStack Queryju.
  • Napad je koristio binding.gyp sandbox escape i preinstall skripte. izvršiti višeslojni JavaScript kradljivac tokom npm instalacije, čak i bez eksplicitnih zakačaka životnog ciklusa.
  • Korisni sadržaj je prikupio širok spektar programerskih i cloud akreditacija (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes i drugi) i premjestio ih u javne GitHub repozitorije.
  • Crv je zloupotrijebio ukradene tokene kako bi zarazio dodatne npm, PyPI, RubyGems pakete i GitHub repozitorije., što naglašava širi rizik lanca snabdijevanja oko popularne upotrebe TanStack Query npm-a.

TanStack Query npm paket

Krajem augusta 2026. godine, istraživači sigurnosti otkrili su Ciljani napad na lanac snabdijevanja povezan s TanStack Query npm ekosistemom putem popularnog generatora koda OpenAPI. Incident se fokusira na paket @7nohe/openapi-react-query-codegen, alat koji automatski generira tipski sigurne hooks-ove za TanStack Query direktno iz OpenAPI shema, a koji je bilježio više od 150,000 sedmičnih preuzimanja na npm-u.

Umjesto da sami napadnu osnovne biblioteke TanStack Queryja, napadači su kompromitovali okolne alate na koje se mnogi timovi oslanjaju za proizvodnju TanStack Query hookova , ubacujući složeni malware payload u više izdanja generatora. Budući da se ovi hookovi direktno uključuju u produkcijske React i TypeScript kodne baze, utjecaj se proteže daleko izvan jednog paketa, dotičući bilo koji CI cjevovod ili računar programera koji je instalirao zaražene verzije.

estado estable de javascript 2025
Povezani članak:
Stabilno stanje modernog JavaScripta

Kako je napad zloupotrebio generator koda TanStack Query na npm-u

Pogođena biblioteka, @7nohe/openapi-react-query-codegen, se široko koristi za izradu slojeva hook-ova TanStack Query iz OpenAPI ugovora, čime su timovi oslobođeni potrebe za pisanjem repetitivne logike dohvaćanja ručno. Tokom otprilike 20 minuta, napadač je ubacio deset zlonamjernih verzija ovog paketa u npm registar, a sve su imale važeće potvrde o porijeklu generirane putem GitHub Actions.

Te ateste, koje su obično snažan signal integriteta, postale su besmislene jer je sam radni tok GitHub Actions projekta bio kompromitovan . Iskorištavanjem ranjivosti u tom radnom toku, napadač je stekao mogućnost isporuke zaraženih verzija virusa trojancima, a istovremeno je generirao kriptografske dokaze da dolaze iz "zvaničnog" cjevovoda. Čini se da je odgovarajući GitHub repozitorij preuzet u istom potezu, dajući napadaču potpunu kontrolu nad procesom objavljivanja.

Kampanja odražava ranije incidente u lancu snabdijevanja povezane s novim proizvodima za industriju (npm), ali dodaje jedan preokret: posebno je usmjerena na Presjek OpenAPI alata i korištenja TanStack QueryjaPošto generator emituje React kod koji zavisi od @tanstack/react-query, svaka organizacija koja ga je ugradila u svoje automatizirano generiranje API klijenata riskira da je zlonamjerni softver uvukla u agente za izgradnju, CI pokretače ili laptope programera.

Istražitelji su također primijetili da brendiranje zlonamjernog softvera – koji sebe naziva „ Trinitite: Sponzorirano od strane Preview 2 Effects “ – odražava teatralni stil prethodnih operacija povezanih s TeamPCP-om, iako ostaje nejasno da li je ovo djelo imitatora, odcijepljene grupe ili nepovezanog glumca koji je posudio estetiku.

Izbjegavanje sandboxa Binding.gyp: pokretanje zlonamjernog softvera tokom instalacije npm-a

Jedan od neobičnijih tehničkih izbora u ovom napadu TanStack Query-adjacent je zloupotreba binding.gyp kao vektor izvršenja tokom npm instalacijeU normalnim okolnostima, binding.gyp opisuje kako kompajlirati izvorne Node.js dodatke. Kada npm naiđe na takvu datoteku, poziva node-gyp, što zauzvrat procjenjuje conditions polje pomoću Pythona.

Zlonamjerne verzije @7nohe/openapi-react-query-codegen iskoristiti ovo ponašanje ugradnjom Python sandbox escape u conditions blokiratiUmjesto da sadrži bezopasnu konfiguraciju izgradnje, datoteka prolazi kroz Python-ovu internu hijerarhiju klasa kako bi došla do catch_warnings klasa, okreće se ka __builtins__uvoz osi konačno poziva os.system za izvršavanje JavaScript korisnog tereta pomoću Node.

Nakon što se ukloni obfuskacija, uslov se svodi na jednu komandu: node 3FWCvzduYZg.js izvršava se automatski tokom instalacije. Ostatak binding.gyp sadržaj je zapravo dimna zavjesa: deklarisano ime cilja je besmisleno, tip je heksadecimalno kodiran none, i ne dolazi do nikakvog stvarnog izvornog kompiliranja.

Nije svako pokvareno izdanje zavisilo isključivo od ovog trika. Dvije preliminarne oznake korištene su uobičajene preinstall skripte umjesto toga, jedan poziva lokalnu datoteku nu.js i još jedno preuzimanje Bun runtime okruženja putem wget preusmjereno na bash prije početka skripte bezobrazno nazvane is_it_this_simple.jsKasnije verzije su se udvostručile, kombinujući binding.gyp iskorištavanje s eksplicitnim "preinstall": "node 3FWCvzduYZg.js" ulazak u package.json kako bi se maksimizirale šanse za pokretanje korisnog tereta.

Višeslojni JavaScript korisni teret napravljen za izbjegavanje sandbox-ova

U središtu kompromitovanog TanStack generatora upita nalazi se 3FWCvzduYZg.js, datoteka od jednog reda veličine otprilike 5.4 MB, smješten u korijenu npm paketa. Ovaj skript je jako obfusiran, koristeći više faza šifriranja kako bi usporio inspekciju i frustrirao alate za statičku analizu.

Najudaljeniji sloj je Ogroman niz cijelih brojeva dešifrovan XOR metodom sa fiksnim ključem, koji otkriva kod koji tiho preuzima Bun runtime u privremeni direktorij (pod imenima poput trinnyyyy-XXXXX u privremenoj mapi sistema). Bun se zatim koristi za izvršavanje sljedećeg šifriranog segmenta, koji se pohranjuje kao podaci zaštićeni AES-128-GCM-om ugrađeni u skriptu.

Nakon što je u potpunosti dešifriran i deobfusiran, analitičari su pronašli unutrašnji teret od oko 800 KB JavaScripta koji funkcionira kao kradljivac vjerodajnica, crv koji se sam širi i destruktivni uslužni program . Ovaj unutrašnji skript primjenjuje prilagođenu šifru s promiješanom tablicom postavljenu preko dobro poznatih obfuscator.io transformacija, što ponovo signalizira da su autori posebno ciljali na otpor automatiziranom obrnutom inženjeringu.

Prije nego što nanese bilo kakvu stvarnu štetu, zlonamjerni softver izvršava niz provjera okruženja osmišljenih da izbjegnu sigurnosne istraživače i automatizirane skenereTiho se zatvara ako otkrije ruske sistemske lokalizacije, uobičajene EDR alate iz CrowdStrike-a, SentinelOne-a ili Carbon Black-a, poznate sandbox direktorijume koje koriste proizvodi za skeniranje lanca snabdijevanja, lažne tajne prefikse (kao što su AKIAFAKE ili mamljive npm tokene), ili imena GitHub organizacija povezanih s demonstracijama sigurnosnih istraživanja. Također traži prisutnost alata StepSecurity harden-runner, odustajući ako vidi tu ojačanu CI konfiguraciju.

Šta zlonamjerni softver pokušava ukrasti od korisnika TanStack Queryja i šire

Nakon što se ispune uslovi izvršenja, korisni teret počinje sistematski prikupljati širok spektar akreditiva koji su obično prisutni u modernim radnim procesima zasnovanim na JavaScriptu i TanStack Query-ju . Fokus nije na samom front-end frameworku, već na cloud i developerskoj infrastrukturi s kojom TanStack Query klijenti obično komuniciraju.

Pristup GitHubu je primarna meta. Zlonamjerni softver pretražuje i klasične tokene za lični pristup i novije tokene preciznije granulacije u varijablama okruženja i lokacijama datotečnog sistema. Na GitHub Actions runnerima, pokušava se dobiti OIDC token koristeći standardni ACTIONS_ID_TOKEN_REQUEST_TOKEN i povezani URL, koristeći isti mehanizam koji legitimni tokovi rada koriste za kratkotrajne akreditive u oblaku.

Registri paketa su još jedan ključni izvor podataka. Skripta glasi npm konfiguracijske datoteke kao što su ~/.npmrc, skeniranje tokena nosioca i njihova validacija u odnosu na npm registar whoami krajnja tačkaPrimjenjuje sličnu logiku za Python-ov PyPI (traženje tokena koji počinju sa pypi-AgEIcHlwaS5vcmcCJ) i RubyGems (tražim rubygems_ tokeni), dajući napadačima potencijalni pristup širokom otisku koji obuhvata različite ekosisteme.

Prikupljanje podataka iz oblaka je još opsežnije. Probe zlonamjernog softvera Varijable okruženja i konfiguracijske datoteke povezane s AWS-om, usluga metapodataka instance EC2 i krajnje tačke metapodataka ECS-a, koristeći sts:GetCallerIdentity poziva kako bi se provjerila valjanost otkrivenih vjerodajnica prije njihovog izvlačenja. Ponavlja obrazac za Azure (ID-ovi klijenata, tajne, upravljani identiteti, pa čak i Azure Key Vault) i za Google Cloud, provjera JSON-a servisnog računa, serveri metapodataka i Upravitelj tajni kada dobije upotrebljiv token.

Osim registara u oblaku i paketima, skript pretražuje lokalne diskove za preko 150 različitih uzoraka kuglica, uključujući SSH privatne ključeve, Docker konfiguracije, .env datoteke, Git skladišta vjerodajnica, direktoriji kripto novčanika, klijenti za razmjenu poruka poput Signala ili Telegram Desktopa, VPN konfiguracije, pa čak i konfiguracijske datoteke povezane s AI alatima kao što je Claude. Ova širina odražava razumijevanje načina na koji se aplikacije podržane TanStack Queryjem obično razvijaju i implementiraju: često u okruženjima gdje jedna mašina ili CI posao ima širok raspon vjerodajnica za repozitorije, registre i pružatelje usluga u oblaku.

Eksfiltracija putem GitHub repozitorija i širenje nalik crvima

Nakon što prikupi podatke, zlonamjerni softver koristi neobičan pristup eksfiltraciji. Umjesto objavljivanja na tradicionalnom komandno-kontrolnom serveru, koristi GitHub repozitorije kao javne, šifrirane sandučiće za prikupljanje podataka . Ovo se ne samo uklapa u normalan promet programera, posebno u organizacijama koje koriste TanStack Query i koje već stalno komuniciraju s GitHubom, već i čini uklanjanje još komplikovanijim.

Skripta prvo pretražuje javnu historiju commita na GitHub-u za poruke koje odgovaraju vrlo specifičnom obrascu koji kodira šifrirani token unutar teksta poruke commita. Zatim dešifrira taj token kako bi povratio GitHub vjerodajnice, koje koristi za kreiranje novog repozitorija za svaku žrtvu . To znači da ukradeni podaci s jedne mašine završavaju pohranjeni pod potpuno drugim, već kompromitovanim računom, što dodatno zamagljuje atribuciju.

Svako spremište za eksfiltraciju je imenovano po kombinovanje nasumičnih imena likova iz Touhou Projecta sa numeričkim sufiksom (na primjer, cirno-marisa-74291), a njegov opis je postavljen na slogan samog zlonamjernog softvera, „Trinitite: Sponzorirano od strane Preview 2 Effects.“ Unutar ovih repozitorija, skripta pohranjuje JSON datoteke nazvane kao što je doubletrinnys-{counter}-{timestamp}.json unutar a results/ folder.

JSON raspored je jednostavan, ali pažljivo šifriran: sadrži envelope koji sadrži većinu ukradenih akreditiva i key polje sa ključem sesije šifriranim putem javnog RSA ključa napadača. Ovo osigurava da iako su datoteke tehnički javne, samo neko ko posjeduje odgovarajući privatni ključ može pročitati sadržaj, ostavljajući slučajne posmatrače i većinu automatizovanih pretraživača nesposobnim da vide šta je ukradeno.

Paralelno s tim, zlonamjerni softver djeluje kao crv. S važećim npm, PyPI ili RubyGems tokenima u ruci, on nabraja svaki paket u vlasništvu kompromitovanog održavatelja i objavljuje nove, zaražene verzijeObrazac infekcije prati istu shemu korištenu u originalnom kompromitovanju generatora koda TanStack Query: ubrizgavanje zlonamjernog koda binding.gyp, svraćajući 3FWCvzduYZg.js, i slanje paketa pomoću ukradenog tokena za objavljivanje. Također zloupotrebljava ukradene GitHub tokene za prolazak kroz dostupne repozitorije, dodajući konfiguracijske datoteke sa skrivenim vratima pod .vscode, .claude, .github/workflows, i slični direktoriji, svi pod bezopasnim porukama commit-a kao što je "chore: update dependencies".

Ovo ponašanje slično crvu dramatično povećava radijus eksplozije. Jedna organizacija koja koristi TanStack Query i @7nohe/openapi-react-query-codegen u svom CI lancu mogla bi nenamjerno posijati zlonamjerni softver u desetine internih paketa i repozitorija ako kompromitovani programer ili agent za izgradnju objavi nova izdanja dok je zaražen.

Indikatori kompromitacije za korisnike TanStack Query npm-a

Za timove koji se oslanjaju na TanStack Query i srodne npm alate, neki konkretni Objavljeni su indikatori kompromitovanja (IOC) kako bi se pomoglo u identifikaciji izloženostiSljedeće verzije @7nohe/openapi-react-query-codegen potvrđeno je da sadrže Trinitite teret i treba ih tretirati kao nepouzdane:

  • 0.5.4 i 0.5.5
  • 1.6.3 i 1.6.4
  • 2.2.1 i 2.2.2
  • 3.0.3 i 3.0.4
  • Predizdanja 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be i 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

Bilo koji izgled velike, jednolinijske JavaScript datoteke pod nazivom 3FWCvzduYZg.js u korijenskom direktoriju npm paketa je jaka crvena zastavica. Dokumentovano je više SHA-256 heševa te datoteke., a administratori ih mogu uporediti s arhivama instaliranih paketa ili keširanim tarball datotekama u internim registrima kako bi uočili poznate loše kopije.

Na zaraženim sistemima, privremeni direktoriji nazvani sa trinnyyyy- Prefiks praćen sa šest nasumičnih alfanumeričkih znakova u privremenoj mapi operativnog sistema također može ukazivati ​​na prethodno izvršavanje. Ovi direktoriji se koriste kada preuzimanje i priprema Bun okruženja za izvršavanje koje zahtijeva unutrašnji korisni teret.

Pored specifičnog paketa generatora, organizacije bi trebale pregledati podatke npm revizije, interne mirrore paketa i CI logove za neočekivano binding.gyp datoteke ili iznenadna pojava preinstall kuke u paketima koji se ranije nisu oslanjali na izvorne dodatke ili skripte životnog ciklusa. U kontekstu TanStack Queryja, to obično znači pažljivo proučavanje bilo kojeg alata za generiranje koda ili OpenAPI integraciju koji se uključuje u React, Vue ili druge frontendove.

Konačno, vrijedi provjeriti aktivnosti na GitHubu. Repozitoriji s opisima koji odgovaraju "Trinitite: Sponzorirano od strane Preview 2 Effects" ili sa results/doubletrinnys-*.json datoteke i poruke commit-a poput "meow meow meow", treba istražiti kao potencijalne krajnje tačke eksfiltracije povezane s kompromitovanim korištenjem TanStack Query npm-a.

Šta timovi koji koriste TanStack upite mogu uraditi upravo sada

Za većinu organizacija, prvi korak je da popis gdje i kako se koriste TanStack Query i njegovi prateći NPM alatiBudući da kompromitovani paket generira hooks posebno za @tanstack/react-query, obično se pojavljuje u projektima sa jakim tipiziranjem i automatiziranim OpenAPI cjevovodima za generiranje klijenata, često direktno povezanim u CI.

Timovi bi trebali provjeriti da li se neka od navedenih zlonamjernih verzija @7nohe/openapi-react-query-codegen bili su uvijek prisutni u package-lock.json, pnpm-lock.yaml, ili yarn.lock datoteke ili uvučene u stabla zavisnosti putem tranzitivnih zavisnosti. Čak i ako paket više nije instaliran, historijska upotreba na agentima za izgradnju može zahtijevati dublje istraživanje.

Tamo gdje se sumnja na kompromis, paralelni napori trebaju se usmjeriti na rotirajući tokeni i akreditivi koje prikuplja zlonamjerni softverTo uključuje lične tokene za pristup GitHub-u, npm tokene za objavljivanje, ključeve za pristup oblaku i sve dugotrajne tajne pohranjene u varijablama okruženja ili konfiguracijskim datotekama u običnom tekstu na CI runnerima. Pružatelji usluga u oblaku uglavnom logiraju sts:GetCallerIdentity i slični pozivi, što može pomoći u sužavanju perioda izloženosti.

Sigurnosni alati u lancu snabdijevanja koji su specijalizirani za skeniranje zlonamjernog softvera za npm pakete mogu pomoći u otkrivanju infekcija koje su promakle tradicionalnim skenerima ranjivosti. Neke platforme već klasificiraju ovu kampanju kao kritičan problem zlonamjernog softvera 100/100 ozbiljnosti i pružaju noćna ponovna skeniranja ili provjere na zahtjev za repozitorije koji se oslanjaju na TanStack Query i povezane zavisnosti.

Gledajući unaprijed, organizacije koje se u velikoj mjeri oslanjaju na TanStack Query, @tanstack/react-query, ili @tanstack/vue-query u produkciji bi možda trebalo ojačati zaštitne ograde oko instalacije paketa. To može uključivati proxy registri koji blokiraju poznate loše verzije, alati koji presreću naredbe poput npm install or pnpm add i unakrsno provjeriti pakete u odnosu na obavještajne podatke o prijetnjama, i strožiju upotrebu provjere porijekla i potpisa - uz upozorenje da kompromitovani CI cjevovodi i dalje mogu proizvesti „validne“ ateste, kao što se ovdje vidi.

Kako se frontend stekovi sve više standardiziraju na bibliotekama poput TanStack Queryja za dohvaćanje i keširanje podataka, napadači će vjerovatno nastaviti ispitivati ​​okolni ekosistem generatora, CLI-jeva i dodataka objavljenih na npm-u . Ovaj incident naglašava kako naizgled uzak uslužni paket - onaj koji jednostavno emituje TanStack Query hooks iz OpenAPI datoteke - može postati ulazna tačka visokog utjecaja u sisteme za izgradnju, monorepozitorije i cloud infrastrukturu kada se ostavi nezaštićen.

Otkriće Trinititske kampanje protiv @7nohe/openapi-react-query-codegen ističe kako Popularni npm paketi povezani s korištenjem TanStack Queryja mogu se tiho pretvoriti u vektore napada na lanac snabdijevanja. kada su njihovi tokovi rada za objavljivanje ugroženi. Zloupotrebom binding.gyp, obfusiranim JavaScript učitivačima i eksfiltracijom zasnovanom na GitHub-u, napadači su uspjeli sakriti dalekosežni kradljivac podataka unutar alata koji su mnogi timovi tretirali kao rutinsku operaciju. Za organizacije koje se oslanjaju na TanStack Query preko Reacta i drugih frontendova, pooštravanje npm higijene, praćenje sumnjivih skripti životnog ciklusa i jačanje CI cjevovoda oko OpenAPI-ja i alata za generiranje upita više nisu opcionalni dodaci, već dio osnovnog modela rizika.

Slični postovi: