На 20 август три пакета на един и същ автор в регистъра на Rust излизат с нова зависимост, чийто build скрипт тегли и пуска зловреден товар по време на компилация. Изтрити са за час и половина до два часа. Акаунтът на поддържащия е заключен - екипът на Rust смята, че компютърът или данните му за достъп са превзети.
- arrayref@0.3.10, internment@0.8.7 и append-only-vec@0.1.9 излизат с нова зависимост proc-macro1, чийто build скрипт тегли зловреден товар при компилация.
- Онлайн са между 86 и 107 минути и са изтрити от crates.io; акаунтът на автора е заключен, CVE номер няма.
- Проверката минава през ~/.cargo/registry/cache: там се вижда дали машината изобщо е строила отровеното.
Осемдесет и шест минути. Толкова е стоял отровеният arrayref в публичния регистър на Rust, преди да го изтрият. Звучи като добра новина.
Не е. Този пакет не чака да пуснеш програмата, за да свърши работа. Той се задейства, докато компилираш. Всеки, който е строил проект в четвъртък сутрин с новата версия, вече е пуснал чужд двоичен файл на машината си - и изтриването от регистъра не го отменя.
Компилацията е моментът
В Rust всеки пакет може да носи build скрипт - парче код, което се изпълнява преди същинското строене, за да подготви нещо. Легитимна работа. И пълен достъп до машината в момент, в който никой не гледа, защото всички гледат резултата от компилацията, не пътя дотам.
Затова името proc-macro1 не е случайно. Истинският пакет се казва proc-macro2 и стои под половината екосистема. Едно око, което минава през списък със зависимости в седем сутринта, вижда позната дума и продължава нататък.
Какво казват изследователите
По данни на Wiz товарът от втора степен работи на Linux, Windows и macOS, събира име на машина, потребител и списък с инсталирани програми, бърка в профилите на Chrome, Brave и Edge за запазени пароли и се обажда на команден сървър по HTTPS. Същата фирма казва, че намира arrayref в над 35 на сто от средите, които преглежда, и в три четвърти от тези, където изобщо се пише на Rust.
Wiz посочва и съвпадения със севернокорейски кампании: адресът, на който се обажда товарът, е същият като в кампанията Mastra, която Microsoft приписва на групата Sapphire Sleet. Това е твърдение на изследователи, не установен факт. Тежи, но е посока за следствие.
Провери кеша, не проекта
Тук няма какво да обновяваш. Отровените версии вече ги няма в регистъра и списъкът ти със зависимости днес сочи чисти. Въпросът е дали машината е компилирала в онези два часа, а отговорът стои в ~/.cargo/registry/cache - екипът на Rust дава готова команда, която търси точно тези файлове по име.
Намериш ли дори един от тях, машината е строила отровения код. Оттам нататък се сменя всичко, до което тя има достъп: ключове, токени, пароли в браузъра.
Реакцията беше бърза и това има стойност - за следващия, който би посегнал към пакета. За компилиралия в четвъртък сутрин тя не променя нищо.