14. jūlijā plkst. 07:10 pēc UTC npm reģistrā parādījās @asyncapi/generator versija 3.3.1. Pakotnei bija derīga npm OIDC izcelsmes atzīme, jo to publicēja pati AsyncAPI projekta GitHub Actions plūsma. Uzbrucējam nevajadzēja nozagt nevienu npm marķieri. Viņš bija ieguvis rakstīšanas tiesības uz repozitorija next zaru un ļāva projekta īstajai CI/CD plūsmai izdarīt publicēšanu.
Tajā pašā rītā npm nokļuva piecas ļaunas versijas: @asyncapi/generator@3.3.1, @asyncapi/generator-helpers@1.1.1, @asyncapi/generator-components@0.7.1 un @asyncapi/specs versijas 6.11.2 un 6.11.2-alpha.1. Kods aktivizējas brīdī, kad Node.js ielādē moduli, nevis instalēšanas laikā, tāpēc datorā pietika ar parastu npm ci, lai palaistu pilinātāju. @asyncapi/specs vien saņem 2,66 miljonus lejupielāžu nedēļā un to tālāk velk @asyncapi/parser (970 tūkstoši nedēļā). Kombinētais skaits pārsniedz 2,9 miljonus lejupielāžu nedēļā.
Kā uzbrucējs iekļuva plūsmā
Uzbrukums sākās ar 37 pull request pieprasījumiem AsyncAPI generator repozitorijam. Gandrīz visi pievienoja viltus ziedojumu lapu un kalpoja par troksni. Viens pieprasījums izmantoja nepareizi konfigurētu GitHub Actions darbplūsmu, kas palaidās ar pull_request_target trigeri un darbā paņēma paša pieprasījuma kodu, nevis bāzes zaru. Šāda darbplūsma piekļūst repozitorija noslēpumiem. Tādu paņēmienu sauc par pwn request. Tieši tā uzbrucējs izvilka augsti privileģētu personīgo piekļuves marķieri (PAT).
Ar šo marķieri viņš varēja rakstīt tieši aizsargātajos zaros. Commit tika iesniegts ar vietturi Your Name <you@example.com> un GitHub lietotājvārdu invalid-email-address. Push uz next zaru pēc 12 sekundēm palaida darbplūsmu release-with-changesets.yml. Tā caur npm OIDC uzticamo publicētāju izlaida pakotnes ar derīgām SLSA izcelsmes atzīmēm. Ievainojamību jau aprīlī bija demonstrējusi pētniece Florence Njeri ar koncepta pierādījumu, tomēr labojums nepienāca.
Derīga izcelsmes atzīme apliecina, no kurienes pakotne nāca, nevis to, ka tās saturs ir drošs. Šoreiz tā nāca no īstās plūsmas ar ļaunu commit.
Ko dara Miasma RAT
Ielādētais modulis lejupielādē otrās pakāpes slodzi sync.js no IPFS un uzstāda Miasma RAT. Analītiķu izpakotais Node.js komplekts ir 3,08 MB liels un satur 744 moduļus. Vākšanas mērķi ir SSH atslēgas, npm, GitHub un PyPI marķieri, AWS akreditācijas dati, pārlūku paroles, macOS atslēgu saišķis, Docker akreditācijas dati un kubectl konfigurācija.
Vadību Miasma uztur pa sešiem kanāliem: HTTP, Nostr releji, IPFS, BitTorrent DHT, libp2p GossipSub tīkls un Ethereum viedlīgums kā slēptā pastkaste. Ir arī modulis, ko StepSecurity sauc par AI rīku saindētāju: tas mēģina iepludināt kodu Claude Code, GitHub Copilot un Cursor sesijās. Tāpēc inficētā datorā par apdraudētām jāuzskata arī AI kodēšanas sesijas.
Laika grafiks 14. jūlijā (UTC)
- 06:58: ļauns commit uz generator
nextzaru - 07:10: trīs generator pakotnes publicētas caur GitHub OIDC
- 07:56: sākas otrs uzbrukums
spec-json-schemasmaster zaram - 08:06: publicēta alpha versija
- 08:30: izlaista pēdējā specs pakotne
- no 11:12 līdz 11:18: visas piecas versijas noņemtas no npm
Ko darīt tagad
Pakotnes no npm ir noņemtas, tāpēc jauna instalēšana ir droša. Problēma paliek projektiem, kuru lock faili tapa divu līdz četru stundu logā 14. jūlijā. StepSecurity iesaka izdzēst un pārģenerēt package-lock.json, yarn.lock vai pnpm-lock.yaml, nomainīt visus akreditācijas datus (npm marķierus, GitHub PAT, SSH atslēgas, AWS datus, pārlūku paroles) un pārbaudīt būves žurnālus, vai nav savienojumu ar ipfs.io, C2 adresēm vai DHT mezgliem. Drošās versijas ir generator 3.3.0, generator-helpers 1.1.0, generator-components 0.7.0 un specs 6.11.1.
Kompromitēto pakotņu atklāšanā piedalījās StepSecurity, SafeDep, Socket un OX Security. Microsoft artefaktus izseko ar nosaukumiem MiasmStealer un Supychain.
Avoti
- StepSecurity: Compromised next branch pushes malicious AsyncAPI packages to npm
- The Hacker News: Compromised AsyncAPI npm Packages Deliver Multi-Stage Botnet Malware
- Chainguard: AsyncAPI supply chain compromise via GitHub Actions pwn request
- Microsoft Security Blog: Unpacking the AsyncAPI npm supply chain compromise
- BleepingComputer: AsyncAPI npm packages infected with credential-stealing malware
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.