TanStack Query npm-pakke målrettet via kompromittert OpenAPI-kodegenerator på npm

Siste oppdatering: 08/29/2026
Forfatter: C SourceTrail
  • Flere versjoner av @7nohe/openapi-react-query-codegen på npm ble kompromittert, og bygger inn en sofistikert skadelig programvare som misbruker TanStack Query-baserte arbeidsflyter.
  • Angrepet brukte en binding.gyp sandkasse-escape og forhåndsinstallasjonsskript å kjøre en flerlags JavaScript-stealer under npm-installasjon, selv uten eksplisitte livssyklushooks.
  • Nyttelasten samlet inn et bredt spekter av utvikler- og skylegitimasjonsinformasjon (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes og mer) og eksfiltrerte dem til offentlige GitHub-repositorier.
  • Ormen misbrukte stjålne tokener til å infisere ytterligere npm-, PyPI-, RubyGems-pakker og GitHub-repoer, som fremhever den bredere forsyningskjederisikoen rundt populær bruk av TanStack Query npm.

TanStack Query npm-pakke

Sent i august 2026 avdekket sikkerhetsforskere en målrettet forsyningskjedeangrep knyttet til TanStack Query npm-økosystemet gjennom en populær OpenAPI-kodegenerator. Hendelsen dreier seg om pakken @7nohe/openapi-react-query-codegen, et verktøy som automatisk genererer typesikre kroker for TanStack Query direkte fra OpenAPI-skjemaer, og som har sett mer enn 150 000 ukentlige nedlastinger på npm.

I stedet for å gå etter TanStack Query-kjernebibliotekene selv, kompromitterte angriperne de omkringliggende verktøyene som mange team er avhengige av for å produsere TanStack Query-hooks , og la en kompleks nyttelast av skadelig programvare inn i flere versjoner av generatoren. Fordi disse hookene kobles direkte til produksjonskodebasene React og TypeScript, strekker virkningen seg langt utover én enkelt pakke, og berører enhver CI-pipeline eller utviklermaskin som installerte de forurensede versjonene.

estado estable de javascript 2025
Relatert artikkel:
Den stabile tilstanden til moderne JavaScript

Hvordan angrepet misbrukte en TanStack Query-kodegenerator på npm

Det berørte biblioteket, @7nohe/openapi-react-query-codegen, er mye brukt til å stillase TanStack Query hook-lag fra OpenAPI-kontrakter, noe som sparer team for håndskriving av repeterende hentelogikk. I løpet av en periode på omtrent 20 minutter sendte en angriper ti ondsinnede versjoner av denne pakken til npm-registeret, som alle hadde gyldige proveniensbekreftelser produsert via GitHub Actions.

Disse attesteringene, vanligvis et sterkt signal om integritet, ble gjort meningsløse fordi selve prosjektets GitHub Actions-arbeidsflyt var blitt kompromittert . Ved å utnytte en sårbarhet i denne arbeidsflyten fikk trusselaktøren muligheten til å sende trojaniserte bygg samtidig som den genererte kryptografiske bevis på at de kom fra den "offisielle" pipelinen. Det tilhørende GitHub-depotet ser ut til å ha blitt overtatt i samme trekk, noe som ga angriperen full kontroll over utgivelsesprosessen.

Kampanjen speiler tidligere hendelser i forsyningskjeden knyttet til npm, men legger til en vri: den retter seg spesifikt mot skjæringspunktet mellom OpenAPI-verktøy og bruk av TanStack QuerySiden generatoren sender ut React-kode som er avhengig av @tanstack/react-query, enhver organisasjon som koblet den til sin automatiserte API-klientgenerering, risikerer å ha trukket skadevaren inn i build-agenter, CI-kjørere eller utviklerbærbare datamaskiner.

Etterforskerne bemerket også at merkevaren til skadevaren – som kaller seg « Trinitite: Sponsored by Preview 2 Effects » – gjenspeiler den teatralske stilen til tidligere TeamPCP-tilknyttede operasjoner, selv om det fortsatt er uklart om dette er arbeidet til etterlignere, en utbrytergruppe eller en urelatert aktør som låner estetikken.

Binding.gyp sandbox escape: oppstart av skadelig programvare under npm-installasjon

Et av de mer uvanlige tekniske valgene i dette TanStack Query-tilstøtende angrepet er misbruk av binding.gyp som en utførelsesvektor under npm-installasjonUnder normale omstendigheter, binding.gyp beskriver hvordan man kompilerer native Node.js-tillegg. Når npm møter en slik fil, påkaller den node-gyp, som igjen evaluerer conditions feltet ved hjelp av Python.

De ondsinnede versjonene av @7nohe/openapi-react-query-codegen utnytte denne oppførselen ved å legge inn en Python sandkasse-flukt i conditions blokkereI stedet for å inneholde harmløs byggekonfigurasjon, går filen gjennom Pythons interne klassehierarki for å nå catch_warnings klasse, dreier seg om til __builtins__, import os, og ringer til slutt os.system å kjøre en JavaScript-nyttelast med Node.

Når forvirringen er fjernet, koker tilstanden ned til én enkelt kommando: node 3FWCvzduYZg.js utføres automatisk under installasjonenResten av binding.gyp innholdet er i praksis et røykteppe: det deklarerte målnavnet er meningsløst, typen er heksadesimalkodet none, og ingen ekte native kompilering skjer.

Ikke alle forurensede utgivelser var utelukkende avhengige av dette trikset. To forhåndslanseringskoder brukte konvensjonelle preinstall skript i stedet, en som kaller en lokal fil nu.js og en annen som laster ned Bun-kjøretiden via wget rørlagt til bash før du starter et manus med et skamløst navn is_it_this_simple.jsSenere versjoner doblet seg, og kombinerte binding.gyp utnytte med en eksplisitt "preinstall": "node 3FWCvzduYZg.js" oppføring i package.json for å maksimere sjansene for at nyttelasten ville kjøre.

En flerlags JavaScript-nyttelast bygget for å unngå sandkasser

I sentrum av den kompromitterte TanStack Query-generatoren sitter 3FWCvzduYZg.js, en fil på én linje som veier omtrent 5.4 MB, plassert i roten av npm-pakken. Dette skriptet er sterkt obfuskert, og bruker flere krypteringstrinn for å bremse inspeksjon og for å frustrere statiske analyseverktøy.

Det ytterste laget er et gigantisk heltallsmatrise dekryptert via XOR med en fast nøkkel, som avslører kode som i stillhet laster ned Bun-kjøretiden til en midlertidig katalog (under navn som ). trinnyyyy-XXXXX i systemets midlertidige mappe). Bun brukes deretter til å kjøre det neste krypterte segmentet, som lagres som AES-128-GCM-beskyttede data innebygd i skriptet.

Etter fullstendig dekryptering og deobfuskering fant analytikerne en indre nyttelast på rundt 800 KB med JavaScript som fungerer som en legitimasjonstyver, selvspredende orm og destruktivt verktøy . Dette indre skriptet bruker en tilpasset shuffled-table-chiffer lagt oppå velkjente obfuscator.io-transformasjoner, noe som igjen signaliserer at forfatterne spesifikt siktet mot å motstå automatisert reverse engineering.

Før den gjør noen reell skade, utfører skadevaren en en rekke miljøkontroller designet for å unngå sikkerhetsforskere og automatiserte skannereDen avsluttes stille hvis den oppdager russiske systemlokaliteter, vanlige EDR-verktøy fra CrowdStrike, SentinelOne eller Carbon Black, kjente sandkassekataloger som brukes av skanneprodukter for forsyningskjeden, falske hemmelige prefikser (som AKIAFAKE eller decoy npm-tokens), eller GitHub-organisasjonsnavn knyttet til demonstrasjoner av sikkerhetsforskning. Den ser også etter tilstedeværelsen av StepSecurity harden-runner-verktøyet, og trekker seg tilbake hvis den ser den herdede CI-konfigurasjonen.

Hva skadevaren prøver å stjele fra TanStack Query-brukere og andre

Når utførelsesbetingelsene er oppfylt, begynner nyttelasten systematisk å samle inn et bredt spekter av legitimasjonsinformasjon som vanligvis finnes i moderne JavaScript- og TanStack Query-baserte arbeidsflyter . Fokuset er ikke på selve front-end-rammeverket, men på skyen og utviklerinfrastrukturen som TanStack Query-klienter vanligvis kommuniserer med.

GitHub-tilgang er et primært mål. Skadevaren søker etter både klassiske personlige tilgangstokener og nyere, mer detaljerte tokener i miljøvariabler og filsystemplasseringer. På GitHub Actions-kjørere prøver den å hente et OIDC-token ved hjelp av standarden ACTIONS_ID_TOKEN_REQUEST_TOKEN og tilhørende URL, som utnytter den samme mekanismen som legitime arbeidsflyter bruker for kortvarige skylegitimasjonsopplysninger.

Pakkeregistre er en annen viktig datakilde. Skriptet leser npm-konfigurasjonsfiler som ~/.npmrc, skanner etter bærertokener og validerer dem mot npm-registeret whoami endepunktDen bruker lignende logikk for Pythons PyPI (søker etter tokens som begynner med pypi-AgEIcHlwaS5vcmcCJ) og RubyGems (leter etter rubygems_ tokens), noe som gir angriperne potensiell tilgang til et bredt kryssøkosystemavtrykk.

Innsamlingen av skylegitimasjon er enda mer omfattende. Etterforskningen av skadevare AWS-relaterte miljøvariabler og konfigurasjonsfiler, EC2-forekomstens metadatatjeneste og ECS-metadataendepunkter, Ved hjelp sts:GetCallerIdentity kall for å bekrefte at eventuelle oppdagede legitimasjonsopplysninger er gyldige før de eksfiltreres. Den gjentar mønsteret for Azure (klient-ID-er, hemmeligheter, administrerte identiteter og til og med Azure Key Vault) og for Google Cloud, JSON for sjekktjenestekonto, metadataservere og Secret Manager når den har en brukbar token.

Utover sky- og pakkeregistre, tråler skriptet lokale disker for over 150 forskjellige globmønstre, inkludert private SSH-nøkler, Docker-konfigurasjoner, .env filer, Git-legitimasjonslagre, kryptolommebokkataloger, meldingsklienter som Signal eller Telegram Desktop, VPN-konfigurasjoner og til og med konfigurasjonsfiler koblet til AI-verktøy som Claude. Denne bredden gjenspeiler en forståelse av hvordan TanStack Query-støttede apper vanligvis utvikles og distribueres: ofte i miljøer der en enkelt maskin eller CI-jobb har omfattende legitimasjonsinformasjon for databaser, registre og skyleverandører.

Eksfiltrering gjennom GitHub-repoer og ormlignende forplantning

Når dataene er samlet inn, bruker skadevaren en uvanlig tilnærming til eksfiltrering. I stedet for å legge ut data på en tradisjonell kommando- og kontrollserver, bruker den GitHub-repositorier som offentlige, krypterte drop-boxer . Dette blander seg ikke bare inn med vanlig utviklertrafikk, spesielt i TanStack Query-tunge organisasjoner som allerede samhandler med GitHub konstant, men gjør også fjerning mer komplisert.

Skriptet søker først i GitHubs offentlige commit-historikk etter meldinger som samsvarer med et veldig spesifikt mønster som koder for et kryptert token i commit-meldingsteksten. Deretter dekrypterer det dette tokenet for å gjenopprette en GitHub-legitimasjon, som det bruker til å opprette et nytt arkiv for hvert offer . Dette betyr at stjålne data fra én maskin ender opp lagret under en helt annen, allerede kompromittert konto, noe som ytterligere forvirrer attribusjonen.

Hvert eksfiltreringslager er navngitt av kombinere tilfeldige Touhou Project-karakternavn med et numerisk suffiks (for eksempel, cirno-marisa-74291), og beskrivelsen er satt til skadevarens eget slagord, «Trinitite: Sponsored by Preview 2 Effects». Innenfor disse repositoriene lagrer skriptet JSON-filer med navn som doubletrinnys-{counter}-{timestamp}.json inni a results/ mappe.

JSON-oppsettet er enkelt, men nøye kryptert: det inneholder en envelope som inneholder mesteparten av de stjålne legitimasjonene og en key feltet med øktnøkkelen kryptert via angriperens offentlige RSA-nøkkel. Dette sikrer at selv om filene teknisk sett er offentlige, bare noen som har den tilhørende private nøkkelen kan lese innholdet, slik at tilfeldige observatører og de fleste automatiserte robotsøkeprogrammer ikke kan se hva som ble stjålet.

Parallelt fungerer skadevaren som en orm. Med gyldige npm-, PyPI- eller RubyGems-tokens i hånden, lister opp alle pakker som eies av den kompromitterte vedlikeholderen og publiserer nye, infiserte versjonerInfeksjonsmønsteret følger samme skjema som ble brukt i den originale TanStack Query-kodegeneratoren: injisering av en ondsinnet binding.gyp, stikker innom 3FWCvzduYZg.js, og pusher pakken ved hjelp av det stjålne publiseringstokenet. Den misbruker også stjålne GitHub-tokener til å gå gjennom tilgjengelige repositorier, og legger til bakdørskonfigurasjonsfiler under .vscode, .claude, .github/workflowsog lignende kataloger, alle under uskyldige commit-meldinger som "chore: update dependencies".

Denne ormlignende oppførselen forsterker eksplosjonsradiusen dramatisk. En enkelt organisasjon som bruker TanStack Query og @7nohe/openapi-react-query-codegen i sin CI-kjede, kan utilsiktet spre skadelig programvare til dusinvis av interne pakker og arkiver hvis en kompromittert utvikler eller byggeagent publiserer nye utgivelser mens de er infisert.

Indikatorer for kompromittering for TanStack Query npm-brukere

For team som er avhengige av TanStack Query og relaterte npm-verktøy, noen konkrete indikatorer på kompromittering (IOC-er) er publisert for å bidra til å identifisere eksponeringFølgende versjoner av @7nohe/openapi-react-query-codegen ble bekreftet å inneholde Trinitite-nyttelasten og bør behandles som upålitelige:

  • 0.5.4 og 0.5.5
  • 1.6.3 og 1.6.4
  • 2.2.1 og 2.2.2
  • 3.0.3 og 3.0.4
  • Forhåndsutgivelser 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be og 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

Ethvert utseende av en stor JavaScript-fil med én linje med navnet 3FWCvzduYZg.js i rotkatalogen til en npm-pakke er det et sterkt rødt flagg. Flere SHA-256-hasher av den filen er dokumentert., og administratorer kan sammenligne dem med arkiver av installerte pakker eller hurtigbufrede tarballer i interne registre for å oppdage kjente skadede kopier.

På infiserte systemer, midlertidige kataloger navngitt med en trinnyyyy- Et prefiks etterfulgt av seks tilfeldige alfanumeriske tegn i den midlertidige mappen for operativsystemet kan også indikere tidligere utførelse. Disse katalogene brukes når nedlasting og oppstart av Bun-kjøretiden som kreves av den indre nyttelasten.

Utover den spesifikke generatorpakken, bør organisasjoner gjennomgå npm-revisjonsdata, interne pakkespeile og CI-logger for uventet binding.gyp filer eller plutselig opptreden av preinstall kroker i pakker som tidligere ikke var avhengige av innebygde tillegg eller livssyklusskript. I sammenheng med TanStack Query betyr det vanligvis å se nøye på eventuelle kodegenererings- eller OpenAPI-integrasjonsverktøy som kobles til React, Vue eller andre frontender.

Til slutt er GitHub-aktivitet verdt å granske. Arkiver med beskrivelser som samsvarer med «Trinitite: Sponsored by Preview 2 Effects», eller med results/doubletrinnys-*.json filer og commit-meldinger som "meow meow meow", bør undersøkes som potensielle eksfiltreringsendepunkter knyttet til kompromittert TanStack Query npm-bruk.

Hva TanStack Query-tunge team kan gjøre akkurat nå

For de fleste organisasjoner er det første steget å inventar hvor og hvordan TanStack Query og dets omkringliggende npm-verktøy brukesFordi den kompromitterte pakken genererer hooks spesielt for @tanstack/react-query, det har en tendens til å dukke opp i prosjekter med sterk typing og automatiserte OpenAPI-klientgenereringspipelines, ofte koblet direkte til CI.

Teamene bør bekrefte om noen av de listede skadelige versjonene av @7nohe/openapi-react-query-codegen var alltid til stede i package-lock.json, pnpm-lock.yamleller yarn.lock filer, eller hentes inn i avhengighetstrær via transitive avhengigheter. Selv om pakken ikke lenger er installert, kan historisk bruk på byggeagenter berettige dypere undersøkelse.

Der det er mistanke om kompromiss, bør en parallell innsats fokusere på roterende tokener og legitimasjon høstet av skadevarenDet inkluderer personlige GitHub-tilgangstokener, npm-publiseringstokener, skytilgangsnøkler og eventuelle langvarige hemmeligheter lagret i miljøvariabler eller konfigurasjonsfiler i klartekst på CI-løpere. Skyleverandører logger vanligvis sts:GetCallerIdentity og lignende samtaler, som kan bidra til å begrense eksponeringsvinduet.

Sikkerhetsverktøy for forsyningskjeden som spesialiserer seg på skanning av skadelig programvare for npm-pakker, kan bidra til å avdekke infeksjoner som har glippet forbi tradisjonelle sårbarhetsskannere. Noen plattformer klassifiserer allerede denne kampanjen som et kritisk skadelig problem med alvorlighetsgrad 100/100 og tilbyr nattlige nye skanninger eller kontroller på forespørsel for databaser som er avhengige av TanStack Query og relaterte avhengigheter.

Ser vi fremover, organisasjoner som lener seg sterkt på TanStack Query, @tanstack/react-queryeller @tanstack/vue-query i produksjonen kan det være lurt å forsterke rekkverk rundt pakkeinstallasjonen. Det kan inkludere proxy-registre som blokkerer kjente skadede versjoner, verktøy som fanger opp kommandoer som npm install or pnpm add og kryssjekke pakker mot trusselinformasjonsfeeder, og strengere bruk av proveniens- og signaturverifisering – med det forbeholdet at kompromitterte CI-pipelines fortsatt kan produsere "gyldige" attester, som vist her.

Etter hvert som frontend-stabler i økende grad standardiseres på biblioteker som TanStack Query for datahenting og -bufring, vil angripere sannsynligvis fortsette å undersøke det omkringliggende økosystemet av generatorer, CLI-er og plugins publisert til npm . Denne hendelsen understreker hvordan en tilsynelatende smal verktøypakke – en som bare sender ut TanStack Query-hooks fra en OpenAPI-fil – kan bli et svært effektivt inngangspunkt til byggesystemer, monorepos og skyinfrastruktur når den ikke overvåkes.

Oppdagelsen av Trinitittenes kampanje mot @7nohe/openapi-react-query-codegen fremhever hvordan Populære npm-pakker knyttet til bruk av TanStack Query kan stille bli til angrepsvektorer i forsyningskjeden når utgivelsesarbeidsflytene deres blir kompromittert. Ved å misbruke binding.gyp, obfuskerte JavaScript-lastere og GitHub-basert eksfiltrering, klarte angriperne å skjule en vidtrekkende legitimasjonstyver i et verktøy mange team behandlet som rutinemessig rørleggerarbeid. For organisasjoner som er avhengige av TanStack Query på tvers av React og andre frontender, er det ikke lenger valgfritt tillegg å stramme inn npm-hygiene, overvåke mistenkelige livssyklusskript og herde CI-pipelines rundt OpenAPI og spørrekodegenereringsverktøy, men en del av kjernerisikomodellen.

Relaterte innlegg: