Het npm-pakket dat uw bestanden wist wanneer u het probeert te stoppen
Crypto Scams

Het npm-pakket dat uw bestanden wist wanneer u het probeert te stoppen

Door dutchlbn

Een aanvaller vergiftigde 84 TanStack npm-versies verspreid over 42 pakketten, stal GitHub OIDC-tokens en cloud-sleutels en plaatste een doodsmansknop die je systeem opblaast.

De timing van de aanvaller was specifiek. Een fork, een verborgen commit, een zero-diff pull-aanvraag, en vervolgens bijna acht uur lang niets zichtbaars.

Op 11 mei, tussen 19:20 en 19:26 UTC, verschenen 84 kwaadaardige versies verspreid over 42 officiële @tanstack npm-pakketten in de registry. Volgens @IntCyberDigest op X haalt @tanstack/react-router alleen al meer dan 12 miljoen wekelijkse downloads. Dat maakte het tot het juiste doelwit.

De Credential Sweep Die Niemand Zag Aankomen

De payload, een ongeveer 2,3 MB groot geobfusceerd bestand genaamd router_init.js, voerde zich uit zodra een ontwikkelaar of CI-pijplijn npm install uitvoerde. AWS IMDS, GCP-metadata, Kubernetes-serviceaccount-tokens, Vault-tokens, SSH-privésleutels. Het ging ze allemaal na.

TanStack-onderhouder Tanner Linsley bevestigde dat het hele team 2FA had ingeschakeld. Volgens de postmortem gepubliceerd op tanstack.com maakte dat niets uit. De aanvalsketen had helemaal geen npm-inloggegevens nodig.

Exfiltratie verliep via het Session/Oxen-berichtennetwerk, specifiek filev2.getsession.org en seed1 tot en met seed3.getsession.org. End-to-end versleuteld. Geen door de aanvaller gecontroleerde command-and-control-server om via IP te blokkeren. Het npm-worm dat cryptosleutels steelt-draaiboek, aangepast en geüpgraded.

Hoe een Zero-Diff PR de Volledige Releasepijplijn Vergiftigde

De voorbereiding begon een dag eerder. Een fork van TanStack/router, hernoemd naar github.com/zblgg/configuration om fork-lijstzoekopdrachten te ontwijken, ontving op 10 mei om 23:29 UTC een kwaadaardige commit. Gefabriceerde identiteit: claude@users.noreply.github.com. Niet het Anthropic-product. Een verzonnen e-mailadres.

PR #7378 werd de volgende ochtend geopend. De pull_request_target-workflowtrigger, een al lang gedocumenteerd gevaarlijk patroon, voerde benchmarktaken uit met de code van de fork. Dat was genoeg.

De vergiftigde pnpm-winkelcache werd opgeslagen onder de exacte sleutel waar release.yml later naar zou zoeken. De aanvaller force-pushte de PR vervolgens terug naar een zero-file no-op en sloot hem. Cache bleef bestaan. Onderzoeker Adnan Khan documenteerde dit type aanval in 2024. De aanvaller nam de techniek bijna woordelijk over, inclusief toeschrijvingsopmerking.

Toen onderhouder Manuel later een niet-gerelateerde PR samenvoegde die een CSS.supports-fix naar main bracht, werd de releaseworkflow geactiveerd en werd de vergiftigde cache hersteld. GitHub-inloggegevens geoogst via dezelfde op GitHub gebaseerde methode voor diefstal van inloggegevens die eerder in campagnes werd gezien.

De Doodsmansknop

Onderzoeker carlini, postend op GitHub-issue #7383, wees op iets anders in de payload. Een script dat als systemd-service op Linux en als LaunchAgent op macOS was geïnstalleerd, dat elke 60 seconden api.github.com aanriep met de gestolen token. Als die token wordt ingetrokken, voert het script rm -rf uit. Je thuismap, weg.

“Wees voorzichtig met het intrekken van tokens,” schreef carlini in de draad. Lieten het daarbij.

Beveiligingsonderzoeker ahmadnassri merkte op in het tracking-issue dat socket.dev 84 individuele @tanstack PURL’s aan het volgen was, plus de worm die zich verspreidde naar 200 of meer andere pakketten.

De OIDC-truc Die Alles Er Schoon Liet Uitzien

De vergiftigde versies droegen geldige cryptografische herkomst. De publicatie verliep via de OIDC trusted-publisher-binding van GitHub Actions voor de releaseworkflow van TanStack/router. Voor npm zagen de pakketten er identiek uit aan alles wat Linsley zelf zou hebben verzonden.

Dit is het deel dat verdedigers van streek maakt. De payload had niemands npm-token nodig. Het creëerde een publicatie-capabele OIDC-token door direct runner-geheugen te lezen, het GitHub Actions Runner.Worker-proces te lokaliseren via /proc-items en het te dumpen. Hetzelfde Python-script dat werd gebruikt in de tj-actions/changed-files-compromis van maart 2025.

@IntCyberDigest beschreef het op X als de eerste gedocumenteerde npm-worm die met een geldig, ondertekend certificaat van authenticiteit wordt geleverd.

Detectie kwam van buiten. Onderzoeker ashishkurmi, werkend voor StepSecurity, meldde het publiekelijk binnen 20 minuten na de kwaadaardige publicatie. Carlini diende direct een melding in bij npm, momenten voordat het GitHub-issue online ging.

Bevestigde schone pakketten: @tanstack/query, @tanstack/table, @tanstack/form, @tanstack/virtual, @tanstack/store. Iedereen die een getroffen pakket op 11 mei heeft geïnstalleerd, moet onmiddellijk AWS-, GCP-, Kubernetes-, Vault-, GitHub-, npm- en SSH-referenties roteren.

Het team heeft sindsdien alle 84 versies verouderd verklaard en npm-beveiliging ingeschakeld om tarballs uit de registry te verwijderen.

dutchlbn

Over de auteur

dutchlbn

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *