Som følge af en kompromittering af procesoprettelsen af udgivelser baseret på GitHub Actions i TanStack-projektet lykkedes det angriberen at offentliggøre 84 ondsindede versioner i NPM-repositoriet, der dækker 42 NPM-pakker fra TanStack-stakken. Nogle af de kompromitterede pakker havde mere end 10 millioner downloads om ugen.
Adgang til udgivelsen af versioner blev opnået på grund af en forkert konfiguration af pull_request_target «Pwn Request» i GitHub Actions (angivelsen af en maske i indstillingerne førte til, at pull_request_target blev kørt for pull-anmodninger i tredjeparts forks), forurening af GitHub Actions-cache via fork og muligheden for at udtrække OIDC-tokenet fra hukommelsen af den kørende runner-proces (Runner.Worker) gennem læsning af indholdet /proc//mem.
NPM-pakker med ondsindede ændringer blev offentliggjort den 11. maj mellem 22:20 og 22:26 (MSK), opdaget efter 20 minutter og blokeret efter halvanden time. For hver af de berørte NPM-pakker blev der udgivet to ondsindede versioner, der integrerede koden til aktivering af ormen mini-shai-hulud, som søgte efter tokens og legitimationsoplysninger i det nuværende miljø. Hvis et token til NPM-kataloget blev opdaget, offentliggjorde ormen automatisk nye ondsindede udgivelser for de pakker, der blev udviklet i det nuværende miljø, hvilket påvirkede afhængighedstræet. På den måde blev mere end 400 NPM-pakker, der brugte TanStack-pakker som afhængigheder, kompromitteret.
Ormen blev placeret i filen router_init.js og aktiveredes, når den kompromitterede pakke blev installeret manuelt af udvikleren eller automatiseret i et kontinuerligt integrationsmiljø ved hjælp af kommandoerne «npm install», «pnpm install» eller «yarn install». Efter aktivering søgte ormen i systemet efter tokens til NPM (~/.npmrc), AWS, GCP, Azure, HashiCorp og KubernetesK8s samt SSH-nøglepar. De fundne data blev sendt til angriberen via den decentrale P2P-beskedplatform getsession.org.
I ormen var der indbygget destruktive handlinger i tilfælde af tilbagetrækning af det kompromitterede NPM-token — i systemet blev der indstillet en periodisk kørsel af scriptet ~/.local/bin/gh-token-monitor.sh, som hver 60. sekund kontrollerede tokenets aktivitet via anmodninger til api.github.com/user, og i tilfælde af tilbagetrækning af tokenet blev kommandoen «rm -rf ~/» udført.
Kilde: opennet.ru
