Pachetul TanStack Query npm vizat de un generator de cod OpenAPI compromis pe npm

Ultima actualizare: 08/29/2026
  • Mai multe versiuni ale @7nohe/openapi-react-query-codegen de pe npm au fost compromise., încorporând o sarcină utilă sofisticată de malware care abuzează de fluxurile de lucru bazate pe TanStack Query.
  • Atacul a folosit o evadare sandbox binding.gyp și scripturi de preinstalare. pentru a executa un furt JavaScript multi-stratificat în timpul instalării npm, chiar și fără hook-uri explicite pentru ciclul de viață.
  • Sarcina utilă a colectat o gamă largă de acreditări de dezvoltatori și cloud (GitHub, npm, AWS, Azure, GCP, Vault, Kubernetes și altele) și le-a exfiltrat în depozite publice GitHub.
  • Viermele a abuzat de token-uri furate pentru a infecta pachete npm, PyPI, RubyGems și depozite GitHub suplimentare., evidențiind riscul mai amplu la nivelul lanțului de aprovizionare legat de utilizarea populară a TanStack Query npm.

Pachet TanStack Query npm

La sfârșitul lunii august 2026, cercetătorii în domeniul securității au descoperit o atac țintit asupra lanțului de aprovizionare legat de ecosistemul npm TanStack Query printr-un generator de cod OpenAPI popular. Incidentul se concentrează pe pachet @7nohe/openapi-react-query-codegen, un instrument care generează automat hook-uri tip-safe pentru TanStack Query direct din schemele OpenAPI și care a înregistrat peste 150,000 de descărcări săptămânale pe npm.

În loc să atace bibliotecile principale TanStack Query, atacatorii au compromis instrumentele din jur pe care multe echipe se bazează pentru a produce hook-uri TanStack Query , strecurând o sarcină complexă de malware în mai multe versiuni ale generatorului. Deoarece aceste hook-uri se conectează direct la bazele de cod React și TypeScript de producție, impactul se extinde mult dincolo de un singur pachet, atingând orice canal de CI sau mașină de dezvoltator care a instalat versiunile alterate.

stare stabilă de javascript 2025
Articol asociat:
Starea stabilă a JavaScript-ului modern

Cum a abuzat atacul un generator de cod TanStack Query pe npm

Biblioteca afectată, @7nohe/openapi-react-query-codegen, este utilizat pe scară largă pentru a schela straturile hook ale interogărilor TanStack din contractele OpenAPI, scutind echipele de scrierea manuală a logicii repetitive de fetch. Pe o perioadă de aproximativ 20 de minute, un atacator a introdus zece versiuni malițioase ale acestui pachet în registrul npm, toate purtând atestări valide de proveniență produse prin GitHub Actions.

Aceste atestări, în mod normal un semnal puternic de integritate, au devenit lipsite de sens deoarece fluxul de lucru GitHub Actions al proiectului în sine fusese compromis . Prin exploatarea unei vulnerabilități din fluxul de lucru respectiv, atacatorul a dobândit capacitatea de a livra versiuni troienizate, generând în același timp dovezi criptografice că acestea proveneau din canalul „oficial”. Depozitul GitHub corespunzător pare să fi fost preluat în aceeași mișcare, oferind atacatorului control deplin asupra procesului de lansare.

Campania reflectă incidente anterioare din lanțul de aprovizionare legate de NPM, dar adaugă o noutate: vizează în mod specific... intersecția dintre instrumentele OpenAPI și utilizarea TanStack QueryÎntrucât generatorul emite cod React care depinde de @tanstack/react-query, orice organizație care l-a integrat în generarea automată de clienți API riscă să fi introdus malware-ul în agenții de compilare, în rulourile CI sau în laptopurile dezvoltatorilor.

Anchetatorii au remarcat, de asemenea, că brandingul malware-ului - autointitulat „ Trinitite: Sponsorizat de Preview 2 Effects ” - reflectă stilul teatral al operațiunilor anterioare legate de TeamPCP, deși rămâne neclar dacă este opera unor imitatori, a unui grup disident sau a unui actor independent care împrumută estetica.

Evadare din sandbox-ul Binding.gyp: lansarea unui malware în timpul instalării npm

Una dintre cele mai neobișnuite alegeri tehnice din acest atac TanStack Query–adiacent este abuz de binding.gyp ca vector de execuție în timpul instalării npmÎn circumstanțe normale, binding.gyp descrie cum se compilează addon-urile native Node.js. Când npm întâlnește un astfel de fișier, acesta invocă node-gyp, care la rândul său evaluează conditions câmp folosind Python.

Versiunile rău intenționate ale @7nohe/openapi-react-query-codegen exploatează acest comportament prin încorporarea unui Evadare Python în sandbox conditions blocaÎn loc să conțină o configurație de compilare inofensivă, fișierul parcurge ierarhia internă de clase a Python pentru a ajunge la catch_warnings clasă, pivotează către __builtins__, importuri osși în final sună os.system pentru a executa o sarcină utilă JavaScript cu Node.

Odată ce obfuscarea este eliminată, condiția se reduce la o singură comandă: node 3FWCvzduYZg.js executat automat în timpul instalării. Restul binding.gyp conținutul este practic o perdea de fum: numele țintei declarate este lipsit de sens, tipul este codificat în hexadecimal noneși nu are loc nicio compilare nativă reală.

Nu fiecare lansare contaminată s-a bazat exclusiv pe acest truc. Două etichete de prelansare au folosit etichete convenționale preinstall scripturi în schimb, unul invocând un fișier local nu.js și încă una care descarcă runtime-ul Bun prin wget conectat la bash înainte de a începe un script numit în mod nerușinat is_it_this_simple.jsVersiunile ulterioare s-au dublat, combinând binding.gyp exploata cu un mod explicit "preinstall": "node 3FWCvzduYZg.js" intrare in package.json pentru a maximiza șansele ca sarcina utilă să ruleze.

O sarcină utilă JavaScript multistratificată, construită pentru a evita sandbox-urile

În centrul generatorului de interogări TanStack compromis se află 3FWCvzduYZg.js, un fișier cu o singură linie cu o greutate de aproximativ 5.4 MB, plasat în rădăcina pachetului npm. Acest script este puternic ofuscat, folosind mai multe etape de criptare pentru a încetini inspecția și a frustra instrumentele de analiză statică.

Stratul cel mai exterior este un matrice de întregi gigantici decriptați prin XOR cu o cheie fixă, care dezvăluie cod care descarcă în mod silențios runtime-ul Bun într-un director temporar (sub nume precum trinnyyyy-XXXXX (în folderul temporar al sistemului). Bun este apoi utilizat pentru a executa următorul segment criptat, care este stocat ca date protejate prin AES-128-GCM, încorporate în script.

După ce codul a fost complet decriptat și deofuscat, analiștii au descoperit o sarcină utilă internă de aproximativ 800 KB de JavaScript care funcționează ca un furt de credențiale, un vierme auto-răspânditor și un utilitar distructiv . Acest script intern aplică un cifru personalizat cu tabel amestecat, suprapus peste transformările obfuscator.io bine-cunoscute, semnalând din nou că autorii au urmărit în mod specific să reziste ingineriei inverse automate.

Înainte de a provoca daune reale, malware-ul efectuează o o serie de verificări ale mediului concepute pentru a evita cercetătorii în domeniul securității și scanerele automateSe închide silențios dacă detectează setări regionale de sistem rusești, instrumente EDR comune de la CrowdStrike, SentinelOne sau Carbon Black, directoare sandbox cunoscute utilizate de produsele de scanare a lanțului de aprovizionare, prefixe secrete false (cum ar fi AKIAFAKE sau jetoane npm capcană), sau nume de organizații GitHub asociate cu demonstrații de cercetare în domeniul securității. De asemenea, caută prezența instrumentului de întărire StepSecurity, retrăgându-se dacă vede configurația CI întărită.

Ce încearcă malware-ul să fure de la utilizatorii TanStack Query și nu numai

Odată ce condițiile de execuție sunt îndeplinite, sarcina utilă începe să colecteze sistematic o gamă largă de acreditări prezente în mod obișnuit în fluxurile de lucru moderne bazate pe JavaScript și TanStack Query . Accentul nu se pune pe framework-ul front-end în sine, ci pe infrastructura cloud și a dezvoltatorilor cu care comunică de obicei clienții TanStack Query.

Accesul la GitHub este o țintă principală. Malware-ul caută atât tokenuri de acces personal clasice, cât și tokenuri mai noi, mai detaliate în variabilele de mediu și locațiile sistemului de fișiere. Pe rulanții GitHub Actions, încearcă să obțină un token OIDC folosind standardul ACTIONS_ID_TOKEN_REQUEST_TOKEN și URL-ul asociat, utilizând același mecanism utilizat de fluxurile de lucru legitime pentru acreditările cloud de scurtă durată.

Registrele de pachete sunt o altă sursă cheie de date. Scriptul citește fișiere de configurare npm, cum ar fi ~/.npmrc, scanarea pentru token-uri purtătoare și validarea lor în raport cu registrul npm whoami punct finalAplică o logică similară pentru PyPI-ul din Python (căutarea de token-uri care încep cu pypi-AgEIcHlwaS5vcmcCJ) și RubyGems (căutând rubygems_ jetoane), oferind atacatorilor acces potențial la o amprentă extinsă la nivelul întregului ecosistem.

Recoltarea acreditărilor din cloud este și mai extinsă. Sondele de malware Variabile de mediu și fișiere de configurare legate de AWS, serviciul de metadate al instanței EC2 și punctele finale de metadate ECS, Folosind sts:GetCallerIdentity apeluri pentru a verifica dacă toate acreditările descoperite sunt valide înainte de a le exfiltra. Repetă modelul pentru Azure (ID-uri de client, secrete, identități gestionate și chiar Azure Key Vault) si pentru Google Cloud, verificarea JSON-ului contului de serviciu, a serverelor de metadate și a Secret Manager-ului odată ce are un jeton utilizabil.

Dincolo de registrele din cloud și de pachete, scriptul caută discurile locale pentru peste 150 de modele globulare diferite, inclusiv chei private SSH, configurații Docker, .env fișiere, depozite de acreditări Git, directoare de portofele cripto, clienți de mesagerie precum Signal sau Telegram Desktop, configurații VPN și chiar fișiere de configurare legate de instrumente de inteligență artificială, cum ar fi Claude. Această gamă largă reflectă o înțelegere a modului în care aplicațiile susținute de TanStack Query sunt de obicei dezvoltate și implementate: adesea în medii în care o singură mașină sau un job CI are o gamă largă de acreditări pentru depozite, registre și furnizori de cloud.

Exfiltrare prin depozite GitHub și propagare de tip vierme

Odată ce datele sunt colectate, malware-ul adoptă o abordare neobișnuită față de exfiltrare. În loc să posteze pe un server tradițional de comandă și control, folosește depozitele GitHub ca și cutii de colectare publice, criptate . Acest lucru nu numai că se amestecă cu traficul normal al dezvoltatorilor, în special în organizațiile cu o abundență de TanStack Query care interacționează deja constant cu GitHub, dar complică și procesul de eliminare a datelor.

Scriptul caută mai întâi în istoricul public al commit-urilor GitHub mesaje care corespund unui model foarte specific, care codifică un token criptat în textul mesajului commit. Apoi decriptează acel token pentru a recupera o credențială GitHub, pe care o folosește pentru a crea un nou depozit pentru fiecare victimă . Aceasta înseamnă că datele furate de pe o mașină ajung să fie stocate într-un cont complet diferit, deja compromis, ceea ce încurcă și mai mult atribuirea.

Fiecare depozit de exfiltrare este denumit prin combinarea numelor aleatorii ale personajelor din Touhou Project cu un sufix numeric (de exemplu, cirno-marisa-74291), iar descrierea sa este setată conform sloganului propriu al malware-ului, „Trinitite: Sponsorizat de Preview 2 Effects”. În cadrul acestor repozitorii, scriptul comite fișiere JSON denumite astfel doubletrinnys-{counter}-{timestamp}.json în interiorul unui results/ dosar.

Aspectul JSON este simplu, dar criptat cu atenție: conține un envelope conținând cea mai mare parte a acreditărilor furate și o key câmp cu cheia de sesiune criptată prin cheia RSA publică a atacatorului. Acest lucru asigură că, deși fișierele sunt publice din punct de vedere tehnic, doar cineva care deține cheia privată corespunzătoare poate citi conținutul, lăsând observatorii ocazionali și majoritatea crawlerelor automate incapabile să vadă ce a fost furat.

În paralel, malware-ul acționează ca un vierme. Având la dispoziție token-uri npm, PyPI sau RubyGems valide, acesta enumeră fiecare pachet deținut de administratorul compromis și publică versiuni noi, infectateModelul de infectare urmează aceeași schemă utilizată în compromisul original al generatorului de cod TanStack Query: injectarea unui fișier malițios. binding.gyp, intrând 3FWCvzduYZg.jsși împingând pachetul folosind token-ul de publicare furat. De asemenea, abuzează de token-uri GitHub furate pentru a parcurge depozitele accesibile, adăugând fișiere de configurare backdoored sub .vscode, .claude, .github/workflowsși directoare similare, toate sub mesaje de commit inofensive, cum ar fi "chore: update dependencies".

Acest comportament asemănător unui vierme amplifică dramatic raza de explozie. O singură organizație care folosește TanStack Query și @7nohe/openapi-react-query-codegen în lanțul său de CI ar putea însămânța în mod accidental programe malware în zeci de pachete și depozite interne dacă un dezvoltator sau un agent de compilare compromis publică noi versiuni în timp ce este infectat.

Indicatori de compromitere pentru utilizatorii TanStack Query npm

Pentru echipele care se bazează pe TanStack Query și instrumentele npm aferente, câteva aspecte concrete Au fost publicați indicatori de compromitere (IOC) pentru a ajuta la identificarea expuneriiUrmătoarele versiuni ale @7nohe/openapi-react-query-codegen s-a confirmat că conțin sarcina utilă Trinitite și ar trebui tratate ca nefiind de încredere:

  • 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
  • Prelansări 0.0.0-365d4eb738d3146583431948d3ba6e27a32556be și 0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

Orice aspect al unui fișier JavaScript mare, cu o singură linie, numit 3FWCvzduYZg.js în directorul rădăcină al unui pachet npm există un semnal de alarmă puternic. Au fost documentate mai multe hash-uri SHA-256 ale acelui fișier....iar administratorii le pot compara cu arhivele pachetelor instalate sau cu fișierele tar din cache din registrele interne pentru a identifica copiile cunoscute ca fiind proaste.

Pe sistemele infectate, directoarele temporare denumite cu un trinnyyyy- prefixul urmat de șase caractere alfanumerice aleatorii în folderul temporar al sistemului de operare poate indica, de asemenea, o execuție anterioară. Aceste directoare sunt utilizate atunci când descărcarea și pregătirea runtime-ului Bun necesar pentru sarcina utilă internă.

Dincolo de pachetul specific al generatorului, organizațiile ar trebui să examineze datele de audit npm, oglinzile interne ale pachetelor și jurnalele CI pentru neaşteptat binding.gyp fișiere sau apariția bruscă a preinstall cârlige în pachete care anterior nu se bazau pe addon-uri native sau scripturi de ciclu de viață. În contextul TanStack Query, aceasta înseamnă de obicei o analiză atentă a oricăror instrumente de generare de cod sau de integrare OpenAPI care se conectează la React, Vue sau alte frontend-uri.

În cele din urmă, activitatea de pe GitHub merită analizată. Repozitoriile cu descrieri care corespund cu „Trinitite: Sponsorizat de Preview 2 Effects” sau cu results/doubletrinnys-*.json fișiere și mesaje de validare precum "meow meow meow", ar trebui investigate, deoarece potențialele puncte finale de exfiltrare sunt legate de utilizarea compromisă a npm-ului TanStack Query.

Ce pot face echipele TanStack Query-heavy chiar acum

Pentru majoritatea organizațiilor, primul pas este să inventarul unde și cum sunt utilizate TanStack Query și instrumentele npm din jurul săuDeoarece pachetul compromis generează hook-uri special pentru @tanstack/react-query, tinde să apară în proiecte cu tipărire puternică și conducte automate de generare a clienților OpenAPI, adesea conectate direct la CI.

Echipele ar trebui să verifice dacă vreuna dintre versiunile rău intenționate enumerate ale @7nohe/openapi-react-query-codegen au fost mereu prezenți în package-lock.json, pnpm-lock.yaml, yarn.lock fișiere sau introduse în arbori de dependențe prin dependențe tranzitive. Chiar dacă pachetul nu mai este instalat, utilizarea istorică pe agenții de compilare poate necesita o investigație mai aprofundată.

În cazul în care se suspectează o compromitere, un efort paralel ar trebui să se concentreze asupra tokenuri și acreditări rotative colectate de malwareAceasta include token-uri de acces personal GitHub, token-uri de publicare npm, chei de acces în cloud și orice secrete de lungă durată stocate în variabile de mediu sau fișiere de configurare în text simplu pe rulourile CI. Furnizorii de cloud înregistrează în general jurnalul. sts:GetCallerIdentity și apeluri similare, care pot ajuta la restrângerea ferestrei de expunere.

Instrumentele de securitate a lanțului de aprovizionare specializate în scanarea programelor malware pentru pachetele npm pot ajuta la identificarea infecțiilor care au trecut cu vederea de scanerele tradiționale de vulnerabilități. Unele platforme clasifică deja această campanie drept o problemă malware critică, cu severitate de 100/100, și oferă rescanări nocturne sau verificări la cerere pentru depozitele care se bazează pe TanStack Query și dependențele aferente.

Privind în perspectivă, organizațiile care se bazează puternic pe TanStack Query, @tanstack/react-query, @tanstack/vue-query în producție ar putea dori să consolideze barierele de protecție din jurul instalării ambalajelor. Aceasta poate include registre proxy care blochează versiunile cunoscute ca fiind greșite, instrumente care interceptează comenzi precum npm install or pnpm add și verifică pachetele cu fluxurile de informații despre amenințăriși o utilizare mai strictă a verificării provenienței și semnăturii - cu avertismentul că pipelinele CI compromise pot produce în continuare atestări „valide”, așa cum se vede aici.

Pe măsură ce stivele frontend se standardizează din ce în ce mai mult pe biblioteci precum TanStack Query pentru preluarea și memorarea în cache a datelor, atacatorii vor continua probabil să sondeze ecosistemul înconjurător de generatoare, CLI-uri și plugin-uri publicate pe npm . Acest incident subliniază modul în care un pachet de utilitare aparent îngust - unul care emite pur și simplu hook-uri TanStack Query dintr-un fișier OpenAPI - poate deveni un punct de intrare cu impact ridicat în sistemele de compilare, monorepo-uri și infrastructura cloud atunci când este lăsat nesupravegheat.

Descoperirea campaniei Trinitite împotriva @7nohe/openapi-react-query-codegen evidențiază cum Pachetele npm populare legate de utilizarea TanStack Query se pot transforma discret în vectori de atac asupra lanțului de aprovizionare atunci când fluxurile lor de lucru pentru lansare sunt compromise. Prin abuzul binding.gyp, încărcătoare JavaScript ofuscate și exfiltrare bazată pe GitHub, atacatorii au reușit să ascundă un furt de credențiale de amploare într-un instrument pe care multe echipe îl tratau ca fiind o operațiune de rutină. Pentru organizațiile care se bazează pe TanStack Query în React și alte frontend-uri, consolidarea igienei npm, monitorizarea scripturilor suspecte din ciclul de viață și consolidarea conductelor de integrare continuă în jurul instrumentelor OpenAPI și de generare a codului de interogare nu mai sunt opțiuni suplimentare, ci fac parte din modelul de risc principal.

Postări asemănatoare: