Till följd av en kompromiss i releaseprocessen baserat på GitHub Actions i projektet TanStack lyckades angripare publicera 84 skadliga versioner i NPM-repositoriet, som omfattar 42 NPM-paket från TanStack-stacken. Vissa av de komprometterade paketen hade över 10 miljoner nedladdningar per vecka.
Åtkomsten till publiceringen av versioner erhölls på grund av en felaktig konfiguration av pull_request_target "Pwn Request" i GitHub Actions (inställningen av masken i konfigurationerna ledde till att pull_request_target kördes för pull-förfrågningar från externa forkar), förorening av cachen för GitHub Actions genom en fork och möjligheten att extrahera OIDC-token från minnet av den körande runner-processen (Runner.Worker) genom att läsa innehållet i /proc//mem.
NPM-paketen med skadliga ändringar publicerades mellan den 11 maj klockan 22:20 och 22:26 (MSK), observerades efter 20 minuter och blockerades efter en och en halv timme. För varje drabbat NPM-paket publicerades två skadliga versioner, som integrerade kod för att aktivera masken mini-shai-hulud, vilken letade efter token och autentiseringsuppgifter i den aktuella miljön. Om en NPM-kopplingstöknings-token upptäcktes publicerade masken automatiskt nya skadliga versioner för de paket som utvecklades i den aktuella miljön, vilket påverkade beroendeträdet. På så vis drabbades över 400 NPM-paket som använde TanStack-paket som beroenden.
Masken var placerad i filen router_init.js och aktiverades vid manuell installation av det drabbade paketet av utvecklaren eller automatiskt i en kontinuerlig integrationsmiljö med hjälp av kommandona "npm install", "pnpm install" eller "yarn install". Efter aktivering letade masken igenom systemet efter NPM-token (~/.npmrc), AWS, GCP, Azure, HashiCorp och Kubernetes K8s, samt privata SSH-nycklar. De hittade uppgifterna skickades till angriparna via den decentraliserade P2P-meddelandetjänsten getsession.org.
Masken var utformad för att utföra destruktiva åtgärder vid återkallande av den fångade NPM-token — ett skript ~/.local/bin/gh-token-monitor.sh ställdes in för att köra periodiskt, vilket varje 60 sekunder kontrollerade tokenets aktivitet genom att anropa api.github.com/user och, om tokenet återkallades, utförde kommandot "rm -rf ~/".
Källa: opennet.ru
