Проектът Rust изтри зловредни версии на три широко използвани пакета (crates) от crates.io, след като компрометиран акаунт на поддържащ разработчик публикува релизи, добавящи тайпоскуатирана зависимост, чийто скрипт за компилация изтегля и изпълнява отдалечен зловреден код по време на компилиране.
Засегнатите версии са arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9, всички публикувани от един и същ собственически акаунт на 20 август 2026 г. и премахнати в рамките на 86 до 107 минути.
Тъй като зловредният код се намира в скрипта за компилация на инжектираната зависимост, изграждането на проект, който я извлича, е било достатъчно за стартиране на зловредния код, без да е необходимо да се извиква каквото и да е от самите пакети.
На разработчиците се препоръчва да потърсят в ~/.cargo/registry/cache изтритите файлове от пакети и да фиксират arrayref на версия 0.3.9 или по-ранна, след като Екипът за реакция при инциденти със сигурността на Rust възстанови предишните версии, оттеглени злонамерено по време на атаката.
Няма коригирана версия, не е назначен CVE идентификатор, а предупрежденията на RustSec за трите пакета не съдържат доказателства, че някоя от зловредните версии е била реално използвана.
„Публикувана е нова версия на пакета arrayref с директна зависимост от proc-macro1, която би изпълнила зловреден скрипт за компилация. Тази компрометирана версия е публикувана на 2026-08-20 и е премахната приблизително 86 минути по-късно, като няма доказателства за действително използване“, се посочва в RUSTSEC-2026-0260.
Медията The Hacker News се свърза с Екипа за реакция при инциденти със сигурността на Rust за основанието на това заключение и за броя на изтеглянията на изтритите версии, но до момента на публикуване не е получен отговор.
Екипът за реакция при инциденти със сигурността на Rust съобщи, че е получил сигнал за зловредния пакет proc-macro1 в 07:15 UTC на 20 август и е потвърдил, че той съдържа скрипт за компилация, изтеглящ зловреден код. В изявлението се изказва благодарност на изследователския екип на Nextron Systems GmbH за първоначалното откриване и докладване.
„Не вярваме, че авторът на arrayref е действал злонамерено; по-вероятно компютърът или идентификационните му данни са били компрометирани, като се опитваме да се свържем с него“, заявиха от Екипа за реакция при инциденти със сигурността на Rust.
The Hacker News потвърди чрез API-то на crates.io на 21 август, че единственият посочен собственик на arrayref е потребител 2402, David Roundy, регистриран през октомври 2009 г. Начинът, по който акаунтът е бил компрометиран, не се разкрива.
Екипът за реакция при инциденти със сигурността на Rust изброи изтритите зловредни версии и времето, през което са били онлайн:
- arrayref@0.3.10: публикувана в 2026-08-20T07:15:00Z, изтрита в 08:41:40Z. Онлайн за 86 минути.
- internment@0.8.7: публикувана в 07:34:07Z, изтрита в 09:04:11Z. Онлайн за 90 минути.
- append-only-vec@0.1.9: публикувана в 07:37:49Z, изтрита в 09:25:24Z. Онлайн за 107 минути.
- Всички версии на proc-macro1, proc-macro-en, aovine, arone, aronenao и tinymember.
Всяка компрометирана версия съдържа един добавен ред в своя манифест – зависимост към proc-macro1, което е тайпоскуат на масово използвания пакет proc-macro2. Библиотечният код на proc-macro1 е идентично копие на proc-macro2, поради което компилацията е завършвала нормално.
Скриптът за компилация сглобява хоста за зловредния код и адреса за командване и управление (C2) от base64 фрагменти по време на компилация. След това инсталира персонализиран модул за проверка на сертификати, чиито три метода за проверка връщат успех безусловно, което деактивира TLS валидацията. Той избира един от четири зловредни кода в зависимост от операционната система и архитектурата на процесора.
Под Unix и macOS той записва байтовете в /tmp/rust-setup, маркира файла като изпълним и го стартира като отделен процес с C2 адреса като първи аргумент. Под Windows записва PowerShell скрипт в %TEMP% и го стартира скрит чрез VBScript стартер под wscript.exe, след което изоставя дъщерния процес – стъпка, коментирана в кода като „избягване от job обекта на Cargo“, за да не чака компилацията неговото завършване.
Разпространението е разчитало на това, че собственическият акаунт оттегля (yank) версии от 0.3.5 до 0.3.9 в същата минута, в която се публикува зловредната версия. По този начин компрометираната версия остава единствената, за която Cargo не предупреждава, според доклада в базата данни на RustSec от изследователя, открил проблема.
„Доставка: Версиите от 0.3.5 до 0.3.9 са оттеглени от собственическия акаунт, така че предупреждението на cargo „обмислете обновяване до версия, която не е оттеглена“ служи за примамка. Така се натъкнах на проблема“, споделя докладвалият потребител в GitHub с никнейм jhobern.
Медията The Hacker News установи чрез API на crates.io на 21 август, че arrayref има общо 245 385 500 изтегляния и 53 905 601 изтегляния за последните 90 дни до 20 август, като 403 отделни пакета в crates.io зависят от него. Беше потвърдена и всяка стъпка от веригата на зависимости: winit изисква sctk-adwaita ^0.10.1, която изисква tiny-skia ^0.11, която на свой ред изисква arrayref ^0.3.6.
Всяко изискване в тази верига е диапазон с каретка (^) върху 0.3.x, което позволява автоматично приемане на 0.3.10. Същата проверка установи, че blake3 е декларирал arrayref като зависимост до версия 1.8.6, но не и във версия 1.8.7, публикувана в 09:09 UTC на 20 август, а blake2b_simd и blake2s_simd също са премахнали зависимостта.