Balíček TanStack Query npm byl napaden kompromitovaným generátorem kódu OpenAPI na npm

Poslední aktualizace: 08/29/2026
  • Více verzí @7nohe/openapi-react-query-codegen na npm bylo napadeno., který obsahuje sofistikovaný malware, jenž zneužívá pracovní postupy založené na dotazech TanStack.
  • Útok použil únikový sandboxový skript binding.gyp a předinstalační skripty. spustit vícevrstvý JavaScriptový stealer během instalace npm, a to i bez explicitních zaváděcích procesů životního cyklu.
  • Datová zátěž shromáždila širokou škálu vývojářských a cloudových kvalifikací. (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes a další) a exfiltroval je do veřejných repozitářů GitHub.
  • Červ zneužil ukradené tokeny k infikování dalších balíčků npm, PyPI, RubyGems a repozitářů GitHub., což zdůrazňuje širší riziko dodavatelského řetězce spojené s oblíbeným používáním TanStack Query npm.

Balíček npm pro dotazy TanStack

Koncem srpna 2026 bezpečnostní výzkumníci odhalili cílený útok na dodavatelský řetězec propojený s ekosystémem TanStack Query NPM prostřednictvím populárního generátoru kódu OpenAPI. Incident se zaměřuje na balíček @7nohe/openapi-react-query-codegen, nástroj, který automaticky generuje typově bezpečné hooky pro TanStack Query přímo ze schémat OpenAPI a který na npm zaznamenal více než 150 000 stažení týdně.

Útočníci místo toho, aby se zaměřili na samotné knihovny jádra TanStack Query, napadli okolní nástroje, na které se mnoho týmů spoléhá při vytváření hooků TanStack Query , a vložili komplexní malware do několika verzí generátoru. Protože se tyto hooky zapojují přímo do produkčních kódových základen React a TypeScript, dopad sahá daleko za rámec jednoho balíčku a dotýká se jakéhokoli CI pipeline nebo vývojářského počítače, který nainstaloval napadené verze.

estado etable de javascript 2025
Související článek:
Stabilní stav moderního JavaScriptu

Jak útok zneužil generátor kódu TanStack Query na npm

Dotčená knihovna, @7nohe/openapi-react-query-codegen, se široce používá k vytváření vrstev hook dotazů TanStack z kontraktů OpenAPI, což týmům ušetřilo ruční psaní opakující se logiky načítání. Během zhruba 20 minut útočník odeslal do registru npm deset škodlivých verzí tohoto balíčku, přičemž všechny měly platné ověření původu vytvořené prostřednictvím akcí GitHub.

Tato osvědčení, která jsou obvykle silným signálem integrity, ztratila smysl, protože samotný pracovní postup GitHub Actions projektu byl ohrožen . Využitím zranitelnosti v tomto pracovním postupu získal útočník možnost dodávat trojské koně a zároveň generovat kryptografické důkazy o tom, že pocházejí z „oficiálního“ vývojového procesu. Zdá se, že stejným krokem byl převzat i odpovídající repozitář GitHub, což útočníkovi poskytlo plnou kontrolu nad procesem vydávání.

Kampaň odráží dřívější incidenty v dodavatelském řetězci spojené s novými produkty (npm), ale přidává jeden zvrat: konkrétně se zaměřuje na průnik nástrojů OpenAPI a využití TanStack QueryProtože generátor generuje kód Reactu, který závisí na @tanstack/react-query, každá organizace, která jej zapojí do svého automatizovaného generování klientů API, riskuje, že malware natáhne do agentů sestavení, spouštěčů CI nebo vývojářských notebooků.

Vyšetřovatelé také poznamenali, že branding malwaru – nazývající se „ Trinitite: Sponsored by Preview 2 Effects “ – odráží divadelní styl předchozích operací spojených s TeamPCP, ačkoli zůstává nejasné, zda se jedná o dílo napodobitelů, odštěpené skupiny nebo nesouvisejícího herce, který si estetiku vypůjčil.

Únik z sandboxu Binding.gyp: spuštění malwaru během instalace npm

Jednou z neobvyklejších technických voleb v tomto útoku typu TanStack Query-adjacent je zneužívání binding.gyp jako vektor provedení během instalace npmZa normálních okolností binding.gyp popisuje, jak kompilovat nativní doplňky Node.js. Když npm narazí na takový soubor, spustí node-gyp, což následně vyhodnocuje conditions pole pomocí Pythonu.

Škodlivé verze @7nohe/openapi-react-query-codegen zneužít toto chování vložením Únik z sandboxu v Pythonu conditions blokovatMísto toho, aby soubor obsahoval neškodnou konfiguraci sestavení, prochází interní hierarchií tříd Pythonu, aby dosáhl catch_warnings třída, otáčí se k __builtins__, dovoz osa nakonec volá os.system spustit JavaScriptovou datovou část pomocí Node.

Jakmile je zmatek odstraněn, podmínka se scvrkne na jediný příkaz: node 3FWCvzduYZg.js spuštěno automaticky během instalaceZbytek binding.gyp obsah je v podstatě kouřová clona: deklarovaný cílový název je bezvýznamný, typ je hexadecimálně kódovaný nonea nedochází k žádné skutečné nativní kompilaci.

Ne každé zkažené vydání se spoléhalo pouze na tento trik. Dva předběžné tagy používané konvenčně preinstall skripty místo toho, jeden volající lokální soubor nu.js a další stahování běhového prostředí Bun přes wget potrubím do bash než spustíte skript s drze pojmenovaným is_it_this_simple.jsPozdější verze se zdvojnásobily a kombinovaly binding.gyp zneužít s explicitním "preinstall": "node 3FWCvzduYZg.js" vstup do package.json aby se maximalizovala pravděpodobnost spuštění užitečného zatížení.

Vícevrstvý JavaScriptový datový náklad vytvořený pro obcházení sandboxů

V centru kompromitovaného generátoru dotazů TanStack se nachází 3FWCvzduYZg.js, jednořádkový soubor o velikosti zhruba 5.4 MB, umístěný v kořenovém adresáři balíčku npm. Tento skript je silně obfusovaný a používá více fází šifrování, což zpomaluje inspekci a frustruje nástroje pro statickou analýzu.

Nejvzdálenější vrstva je obří celočíselné pole dešifrované pomocí XOR s pevným klíčem, který odhaluje kód, jenž tiše stahuje běhové prostředí Bun do dočasného adresáře (pod názvy jako trinnyyyy-XXXXX v dočasné složce systému). Příkaz Bun se poté použije ke spuštění dalšího šifrovaného segmentu, který je uložen jako data chráněná protokolem AES-128-GCM a je vložen do skriptu.

Po úplném dešifrování a deobfuskaci analytici objevili vnitřní datový soubor JavaScriptu o velikosti přibližně 800 KB, který funguje jako program pro krádež přihlašovacích údajů, samošířící se červ a destruktivní nástroj . Tento vnitřní skript používá vlastní šifru s promíchanou tabulkou navrstvenou na známé transformace obfuscator.io, což opět signalizuje, že autoři se konkrétně zaměřili na odolávání automatizovanému reverznímu inženýrství.

Než malware způsobí jakékoli skutečné škody, provede série kontrol prostředí navržených tak, aby se vyhnuly bezpečnostním výzkumníkům a automatizovaným skenerůmTiše se ukončí, pokud detekuje ruské systémové lokalizace, běžné nástroje EDR od CrowdStrike, SentinelOne nebo Carbon Black, známé adresáře sandbox používané produkty pro skenování dodavatelského řetězce, falešné tajné prefixy (například AKIAFAKE nebo návnadové npm tokeny) nebo názvy organizací na GitHubu spojené s demonstracemi bezpečnostního výzkumu. Hledá také přítomnost nástroje StepSecurity harden-runner a pokud tuto konfiguraci zesílené CI nalezne, ustoupí.

Co se malware snaží ukrást uživatelům TanStack Query a dalším uživatelům

Jakmile jsou splněny podmínky spuštění, datová část začne systematicky shromažďovat širokou škálu přihlašovacích údajů běžně používaných v moderních pracovních postupech založených na JavaScriptu a TanStack Query . Důraz není kladen na samotný front-end framework, ale na cloudovou a vývojářskou infrastrukturu, se kterou klienti TanStack Query obvykle komunikují.

Přístup na GitHub je primárním cílem. Malware vyhledává jak klasické osobní přístupové tokeny, tak i novější jemně odstupňované tokeny v proměnných prostředí a umístěních souborového systému. Na běžcích akcí GitHubu se pokouší získat token OIDC pomocí standardního ACTIONS_ID_TOKEN_REQUEST_TOKEN a související URL adresu, s využitím stejného mechanismu, jaký legitimní pracovní postupy používají pro krátkodobé cloudové přihlašovací údaje.

Registry balíčků jsou dalším klíčovým zdrojem dat. Skript čte konfigurační soubory npm, jako například ~/.npmrc, skenování tokenů nositele a jejich ověřování v registru npm whoami Koncový bodPodobnou logiku používá pro Pythonovu funkci PyPI (hledání tokenů začínajících na pypi-AgEIcHlwaS5vcmcCJ) a RubyGems (hledají rubygems_ tokeny), což útočníkům poskytuje potenciální přístup k široké škále ekosystémů.

Sběr cloudových přihlašovacích údajů je ještě rozsáhlejší. Malware sonduje Proměnné prostředí a konfigurační soubory související s AWS, služba metadat instance EC2 a koncové body metadat ECS, Za použití sts:GetCallerIdentity volání pro ověření platnosti nalezených přihlašovacích údajů před jejich odcizením. Opakuje vzorec pro Azure (ID klientů, tajné klíče, spravované identity a dokonce i Azure Key Vault) a pro Google Cloud, kontrola JSON účtů služeb, servery metadat a Správce tajných kódů jakmile má použitelný token.

Kromě cloudových registrů a registrů balíčků skript prohledává lokální disky a hledá více než 150 různých vzorů globů, včetně soukromých klíčů SSH, konfigurací Dockeru, .env soubory, úložiště přihlašovacích údajů Git, adresáře krypto peněženek, klienty pro zasílání zpráv jako Signal nebo Telegram Desktop, konfigurace VPN a dokonce i konfigurační soubory propojené s nástroji umělé inteligence, jako je Claude. Tato šíře odráží pochopení toho, jak se aplikace podporované TanStack Query obvykle vyvíjejí a nasazují: často v prostředích, kde jeden stroj nebo úloha CI má širokou škálu přihlašovacích údajů pro repozitáře, registry a poskytovatele cloudu.

Únik přes repozitáře GitHubu a šíření podobným červům

Jakmile jsou data shromážděna, malware zvolí neobvyklý přístup k jejich exfiltraci. Místo odesílání na tradiční velitelsko-řídicí server používá repozitáře GitHub jako veřejné, šifrované schránky . To nejenže splývá s běžným provozem vývojářů, zejména v organizacích s velkým množstvím dotazů na TanStacku, které již s GitHubem neustále interagují, ale také to komplikuje jejich odstraňování.

Skript nejprve prohledá historii commitů na GitHubu a hledá zprávy odpovídající velmi specifickému vzoru, který kóduje zašifrovaný token uvnitř textu zprávy commitu. Poté tento token dešifruje, aby získal přihlašovací údaje GitHubu, které použije k vytvoření nového repozitáře pro každou oběť . To znamená, že ukradená data z jednoho počítače skončí uložena pod zcela jiným, již kompromitovaným účtem, což dále zkresluje atribuci.

Každé úložiště exfiltrace je pojmenováno kombinování náhodných jmen postav z projektu Touhou s číselnou příponou (například, cirno-marisa-74291) a jeho popis je nastaven na slogan malwaru „Trinitite: Sponzorováno společností Preview 2 Effects“. V rámci těchto repozitářů skript ukládá soubory JSON s názvem jako doubletrinnys-{counter}-{timestamp}.json uvnitř a results/ složka.

Rozvržení JSON je jednoduché, ale pečlivě šifrované: obsahuje envelope obsahující většinu ukradených přihlašovacích údajů a key pole s klíčem relace zašifrovaným pomocí veřejného RSA klíče útočníka. Tím je zajištěno, že i když jsou soubory technicky veřejné, obsah si může přečíst pouze někdo, kdo vlastní odpovídající soukromý klíč, takže běžní pozorovatelé a většina automatizovaných prohledávačů nemohli vidět, co bylo ukradeno.

Souběžně se malware chová jako červ. S platnými tokeny npm, PyPI nebo RubyGems v ruce vyjmenovává všechny balíčky vlastněné napadeným správcem a publikuje nové, infikované verzeVzorec infekce se řídí stejným schématem, jaké bylo použito při původním kompromitování generátoru kódu TanStack Query: vložení škodlivého kódu. binding.gyp, zastavující se 3FWCvzduYZg.jsa odesílání balíčku pomocí ukradeného publikačního tokenu. Zneužívá také ukradené tokeny GitHubu k procházení dostupných repozitářů a přidávání konfiguračních souborů s backdoory pod .vscode, .claude, .github/workflowsa podobné adresáře, všechny pod neškodnými zprávami commitu, jako je "chore: update dependencies".

Toto chování podobné červům dramaticky zvyšuje dosah nákazy. Jedna organizace používající TanStack Query a @7nohe/openapi-react-query-codegen ve svém řetězci CI by mohla neúmyslně zasít malware do desítek interních balíčků a repozitářů, pokud napadený vývojář nebo build agent publikuje nové verze, zatímco je infikovaný.

Indikátory kompromitace pro uživatele TanStack Query npm

Pro týmy, které se spoléhají na TanStack Query a související nástroje NPM, některé konkrétní Byly zveřejněny indikátory ohrožení (IOC), které pomáhají identifikovat expoziciNásledující verze @7nohe/openapi-react-query-codegen byly potvrzeny jako nosiče Trinitite a měly by být považovány za nedůvěryhodné:

  • 0.5.4 a 0.5.5
  • 1.6.3 a 1.6.4
  • 2.2.1 a 2.2.2
  • 3.0.3 a 3.0.4
  • Předběžná vydání 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be a 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

Jakýkoli výskyt velkého jednořádkového souboru JavaScript s názvem 3FWCvzduYZg.js v kořenovém adresáři balíčku npm je silným varovným signálem. Bylo zdokumentováno několik SHA-256 hashů daného souboru.a administrátoři je mohou porovnat s archivy nainstalovaných balíčků nebo archivy tarballů uloženými v mezipaměti v interních registrech, aby odhalili známé škodlivé kopie.

Na infikovaných systémech jsou dočasné adresáře pojmenované s příponou trinnyyyy- Předpona následovaná šesti náhodnými alfanumerickými znaky v dočasné složce operačního systému může také označovat předchozí spuštění. Tyto adresáře se používají, když stahování a příprava běhového prostředí Bun vyžadovaného vnitřním datovým zatížením.

Kromě specifického balíčku generátoru by organizace měly zkontrolovat data auditu npm, interní zrcadla balíčků a protokoly CI, aby… neočekávaný binding.gyp soubory nebo náhlý výskyt preinstall háky v balíčcích, které dříve nespoléhaly na nativní doplňky ani skripty životního cyklu. V kontextu TanStack Query to obvykle znamená důkladné prozkoumání jakýchkoli nástrojů pro generování kódu nebo integraci OpenAPI, které se zapojují do Reactu, Vue nebo jiných frontendů.

A konečně, aktivita na GitHubu stojí za zkoumání. Repozitáře s popisy odpovídajícími „Trinitite: Sponzorováno společností Preview 2 Effects“ nebo s… results/doubletrinnys-*.json soubory a zprávy commitu, jako například "meow meow meow", by měly být prozkoumány jako potenciální koncové body exfiltrace spojené s kompromitovaným používáním TanStack Query npm.

Co mohou týmy zaměřené na dotazy TanStack dělat právě teď

Pro většinu organizací je prvním krokem inventuru, kde a jak se používá TanStack Query a jeho obklopující nástroje NPMProtože kompromitovaný balíček generuje hooky speciálně pro @tanstack/react-query, obvykle se objevuje v projektech se silným typováním a automatizovanými kanály generování klientů OpenAPI, často propojenými přímo s CI.

Týmy by měly ověřit, zda se nevyskytuje některá z uvedených škodlivých verzí @7nohe/openapi-react-query-codegen byly vždy přítomny v package-lock.json, pnpm-lock.yamlnebo yarn.lock soubory nebo vtaženy do stromů závislostí prostřednictvím tranzitivních závislostí. I když balíček již není nainstalován, historické použití na build agentech může vyžadovat hlubší prozkoumání.

V případě podezření na kompromis by se mělo paralelní úsilí zaměřit na rotující tokeny a přihlašovací údaje získané malwaremTo zahrnuje osobní přístupové tokeny GitHubu, publikační tokeny NPM, klíče pro přístup do cloudu a jakékoli dlouhodobé tajné kódy uložené v proměnných prostředí nebo konfiguračních souborech v prostém textu na běžcích CI. Poskytovatelé cloudu obvykle protokolují sts:GetCallerIdentity a podobné hovory, které mohou pomoci zúžit okno expozice.

Nástroje pro zabezpečení dodavatelského řetězce, které se specializují na skenování malwaru pro balíčky NPM, mohou pomoci odhalit infekce, které prošly tradičními skenery zranitelností. Některé platformy již tuto kampaň klasifikují jako kritický malware s hodnocením závažnosti 100/100 a poskytují noční opakované skenování nebo kontroly na vyžádání pro repozitáře, které se spoléhají na TanStack Query a související závislosti.

Organizace, které se silně spoléhají na TanStack Query, se s ohledem do budoucna @tanstack/react-querynebo @tanstack/vue-query v produkčním prostředí může být vhodné posílit ochranné prvky kolem instalace balíčků. To může zahrnovat proxy registry, které blokují známé škodlivé verze, nástroje, které zachycují příkazy jako npm install or pnpm add a křížově porovnávat balíčky s informacemi o hrozbácha přísnější používání ověřování původu a podpisu – s výhradou, že kompromitované CI kanály mohou stále vytvářet „platné“ atestace, jak je zde vidět.

Vzhledem k tomu, že se frontendové stacky stále více standardizují na knihovnách, jako je TanStack Query, pro načítání dat a ukládání do mezipaměti, útočníci pravděpodobně budou i nadále zkoumat okolní ekosystém generátorů, CLI a pluginů publikovaných v npm . Tento incident podtrhuje, jak se zdánlivě úzký utilitní balíček – takový, který pouze generuje hooky TanStack Query ze souboru OpenAPI – může stát vysoce účinným vstupním bodem do systémů sestavení, monorepozitářů a cloudové infrastruktury, pokud není chráněn.

Objev tažení Trinititů proti @7nohe/openapi-react-query-codegen zdůrazňuje, jak Populární npm balíčky vázané na používání TanStack Query se mohou nenápadně proměnit ve vektory útoku na dodavatelský řetězec. když jsou jejich pracovní postupy pro vydávání ohroženy. Zneužíváním binding.gyp, obfuskovaných zavaděčů JavaScriptu a exfiltrace založené na GitHubu se útočníkům podařilo skrýt dalekosáhlý únik přihlašovacích údajů uvnitř nástroje, který mnoho týmů považovalo za rutinní záležitost. Pro organizace, které se spoléhají na TanStack Query napříč Reactem a dalšími frontendy, již zpřísnění hygieny NPM, monitorování podezřelých skriptů životního cyklu a posílení CI pipelines kolem OpenAPI a nástrojů pro generování dotazů a kódu již nejsou volitelnými doplňky, ale součástí základního modelu rizik.

Související příspěvky: