drošība · 6 min · 22.08.2026

arrayref ar 245 miljoniem lejupielāžu 86 minūtes palaida ļaunatūru cargo build laikā

20. augustā plkst. 07:15 pēc UTC crates.io reģistrā parādījās arrayref 0.3.10. Laidiens nemainīja nevienu koda rindu. Tas pievienoja vienu atkarību ar nosaukumu proc-macro1, kuras būvēšanas skripts lejupielādēja un palaida bināru failu no attālināta servera. Katrs, kura projekts nākamajās 86 minūtēs pārrēķināja atkarības un izpildīja cargo build, palaida to savā datorā.

arrayref ir maza palīgpakotne darbam ar Rust masīvu izgriezumiem. Tai ir 245 385 500 lejupielādes kopumā un 53 905 601 pēdējās 90 dienās. Uz to tieši atsaucas 403 citas pakotnes. Drošības uzņēmums Wiz savos klientu datos arrayref atrada vairāk nekā 35 % no visām pārbaudītajām vidēm. Tur, kur vispār ir Rust, arrayref ir trijos gadījumos no četriem.

Ļaunprātīgais laidiens bija tukšs

Saindētā arrayref versija atšķīrās no iepriekšējās tikai ar Cargo.toml. Tur pievienojās proc-macro1, nosaukums, kas atgādina īsto proc-macro2 ar vairāk nekā 154 miljoniem lejupielāžu. Tā bija pirmā atkarība, ko arrayref ieguva desmit gadu laikā.

Darbu izdarīja proc-macro1 fails build.rs. Būvēšanas skripti Rust ekosistēmā izpildās kompilācijas laikā ar tām pašām tiesībām, kādas ir lietotājam. Šis skripts salika vadības servera adresi no base64 fragmentiem, izslēdza TLS sertifikātu pārbaudi, lejupielādēja platformai atbilstošu failu x86_64 Linux, Windows, macOS vai aarch64 macOS videi, ierakstīja to /tmp/rust-setup vai %TEMP%rust-setup.ps1 un palaida ar servera adresi kā argumentu.

Otrās pakāpes implants sūtīja HTTPS POST pieprasījumus uz galapunktu /49890878. Tas savāca datora nosaukumu, lietotājvārdu un operētājsistēmas versiju, uzskaitīja instalētās programmas un lasīja Chrome, Brave un Edge SQLite paroļu krātuves. Noturību implants ieguva caur Registry Run atslēgu Windows vidē, LaunchAgent macOS vidē vai systemd servisu Linux vidē. Atbalstītās komandas ir kill, minicfg, startup un runscript. Ja vadības serveris nokrīt, iestrādātais domēnu ģenerators reizi piecās dienās izrēķina desmit jaunus .com nosaukumus. Konfigurācija šifrēta ar AES-128-GCM. Atslēga ir teksts “i am botking”.

Yank kā ierocis

Tehniski interesantākā daļa nav pati ļaunatūra. Tajā pašā minūtē, kad publicēja 0.3.10, uzbrucējs ar īpašnieka kontu skriptētā virknē aptuveni ar četru sekunžu intervālu atsauca visas nesenās arrayref versijas no 0.3.5 līdz 0.3.9.

Atsaukšana jeb yank crates.io ir ikdienišķa uzturēšanas darbība. Atsaukta versija paliek pieejama projektiem, kuros tā jau ierakstīta Cargo.lock, bet jauna atkarību risināšana to vairs neizvēlas. TuxCare analīze apraksta, kā uzbrucējs to pagrieza pretējā virzienā. Projektam ar prasību ^0.3.5 pēc atsaukumu virknes palika tikai viens neatsaukts kandidāts. Tas bija 0.3.10.

Tas pats paņēmiens strādāja ar abām pārējām pakotnēm. Kopumā uzbrucējs pārrakstīja trīs atkarību manifestus un atsauca vecās versijas mazāk nekā pusstundas laikā, tāpēc automatizēti CI konveijeri ar cargo update būvējuma sākumā bija visriskantākie.

Mēs neuzskatām, ka arrayref autors rīkojas ļaunprātīgi, bet autora dators vai akreditācijas dati, visticamāk, ir kompromitēti.

raksta Rust drošības reaģēšanas komanda. Kā uzbrucējs kontam piekļuva, publiskajā aprakstā nav teikts.

Trīs pakotnes, viens konts

Visas trīs saindētās pakotnes pieder vienam īpašniekam. Tas ir konts droundy, kuru lieto David Roundy, reģistrēts crates.io 2009. gada oktobrī ar lietotāja numuru 2402. Blakus arrayref cieta internment 0.8.7 ar 14,4 miljoniem lejupielāžu un append-only-vec 0.1.9 ar 4,5 miljoniem. Trim pakotnēm kopā ir 264 miljoni lejupielāžu. Pēdējās 90 dienās internment lejupielādēts 3,5 miljonus reižu un append-only-vec 1,3 miljonus reižu.

  • arrayref 0.3.10: publicēts 07:15:00, dzēsts 08:41:40. Tiešsaistē 86 minūtes.
  • internment 0.8.7: publicēts 07:34:07, dzēsts 09:04:11. Tiešsaistē 90 minūtes.
  • append-only-vec 0.1.9: publicēts 07:37:49, dzēsts 09:25:24. Tiešsaistē 107 minūtes.

Likumīgās atsauktās versijas Rust komanda atjaunoja no 09:15 līdz 09:26 tajā pašā rītā. Papildus dzēstas sešas uzbrucēja paša izveidotās pakotnes: proc-macro1, proc-macro-en, aovine, arone, aronenao un tinymember.

Ziņojums crates.io drošības komandai pienāca tajā pašā stundā, kad publicēja pirmo saindēto laidienu. No arrayref 0.3.10 publicēšanas līdz dzēšanai pagāja stunda un 26 minūtes. The Hacker News apkopotajā hronoloģijā redzams, ka visi trīs saindētie laidieni nāca no vienas sesijas 23 minūšu laikā.

Kas norāda uz Ziemeļkoreju

Wiz saista šo gadījumu ar KTDR kampaņām pēc infrastruktūras, nevis pēc koda. Galapunkts /49890878 sakrīt ar to, kas parādās Microsoft aprakstītajā Mastra kampaņā. IP adresei 23.254.165.112 ir tas pats SSL sertifikāta izdevējs kā Mastra serveriem. Cietušo ziņotā trafika uz 23.254.167.216 sakrīt ar Google Cloud analīzi par UNC1069 uzbrukumu npm pakotnei axios. Abas kampaņas turējās Hostwinds LLC diapazonā 23.254.164.0/23. Detalizētu sadalījumu Wiz publicēja savā emuārā.

Ko darīt ar savu projektu

Pirmais solis ir lokālā cargo kešatmiņa. Ja tajā ir kāda no trim ļaunprātīgajām versijām, būvējums notika uzbrukuma logā. Pēc tam piespraudiet tīrās versijas ar precīzu vienādības zīmi: arrayref = "=0.3.9", internment = "=0.8.6", append-only-vec = "=0.1.8".

Ja mašīna kompilēja kaut ko 20. augustā starp 07:15 un 09:26 pēc UTC, uzskatiet to par kompromitētu. StepSecurity atgādinājumu sarakstā ir paroļu maiņa pārlūkos, crates.io un git marķieru atsaukšana, kešatmiņas iztīrīšana un vadības serveru bloķēšana izejošajā trafikā.

Šis pats mehānisms strādā jebkurā reģistrā, kur pakotne drīkst izpildīt kodu instalēšanas laikā. npm to sauc par install skriptiem, Python par setup.py, Rust par build.rs. Cargo joprojām nepiedāvā slēdzi, kas atļautu būvēt bez būvēšanas skriptiem. CVE numura šim gadījumam nav.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie