Атака на Rust внедрила вредоносный код в пакеты с аудиторией 245 млн

Атака на Rust внедрила вредоносный код в пакеты с аудиторией 245 млн

Мадина Ахметова Технологии

20 августа 2026 года злоумышленники атаковали цепочку поставок Rust через популярные пакеты в репозитории crates.io. Вредоносные версии трёх библиотек получили зависимость от поддельного пакета proc-macro1, который загружал и запускал удалённую полезную нагрузку прямо во время сборки проекта.

Инцидент затронул версии arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9. Все три релиза опубликовали 20 августа из одной учётной записи сопровождающего проекта. Команда безопасности Rust удалила их из crates.io в течение 86–107 минут после публикации.

Как развивалась атака

В 07:15 по всемирному координированному времени команда реагирования Rust получила сообщение о вредоносном пакете proc-macro1. Проверка подтвердила, что его скрипт сборки скачивал исполняемый файл с удалённого сервера.

Вскоре специалисты обнаружили связь с библиотекой arrayref. В версию 0.3.10 добавили зависимость от proc-macro1, а предыдущие версии arrayref с 0.3.5 по 0.3.9 одновременно пометили как отозванные. Такая схема могла подтолкнуть Cargo предложить разработчику установить новую версию после предупреждения о недоступности прежних.

Версию arrayref 0.3.10 удалили в 08:41:40. Релиз internment 0.8.7 находился в репозитории 90 минут и был удалён в 09:04:11. append-only-vec 0.1.9 оставался доступен 107 минут, до 09:25:24.

Одновременно специалисты удалили все версии пакетов proc-macro1, proc-macro-en, aovine, arone, aronenao и tinymember. По данным Rust Security Response Team, учётная запись автора arrayref, вероятно, была взломана. Доказательств того, что сам сопровождающий действовал намеренно, команда не обнаружила.

Вредоносный код запускался при сборке

Опасность атаки заключалась в том, что разработчику не требовалось вызывать функции заражённых библиотек. Скрипт build.rs выполнялся автоматически при операциях cargo build, cargo check и cargo test, если проект получал заражённую зависимость.

Пакет proc-macro1 имитировал легитимную библиотеку proc-macro2. Его исходный код в основном выглядел как копия настоящего проекта, поэтому сборка могла завершаться без очевидных ошибок. Дополнительный скрипт формировал адрес сервера из фрагментов, отключал проверку сертификата TLS и выбирал полезную нагрузку под операционную систему и архитектуру процессора.

В Linux и macOS файл сохранялся во временный каталог под именем rust-setup, после чего запускался в отдельном процессе. В Windows применялись сценарии PowerShell и VBScript, которые запускали компонент скрытно через wscript.exe. Такой подход позволял завершить сборку, не дожидаясь окончания работы дочернего процесса.

По анализу компании Wiz, вторая стадия вредоносной программы могла закрепляться в системе через ключ автозапуска Windows, LaunchAgent в macOS или пользовательскую службу systemd в Linux. Исследователи также зафиксировали функции для перенастройки командного сервера, установки механизма persistence и загрузки дополнительных сценариев.

Масштаб угрозы

На 21 августа библиотека arrayref имела около 245,4 млн загрузок за всё время и более 53,9 млн загрузок за предшествующие 90 дней. В реестре crates.io было зарегистрировано 403 пакета, которые зависели от неё.

Потенциальная цепочка распространения проходила через библиотеки tiny-skia, sctk-adwaita и winit. Эти компоненты используются в экосистеме Rust для графических приложений и интерфейсов. arrayref также встречалась в зависимостях криптографических пакетов, включая blake3, blake2b_simd и blake2s_simd.

При этом число загрузок arrayref не означает, что 245 млн установок получили вредоносную версию. Речь идёт о совокупной статистике пакета, тогда как заражёнными были только релизы, опубликованные 20 августа 2026 года. Rust Security Response Team сообщила об отсутствии признаков фактического использования вредоносных версий, однако рекомендовала разработчикам самостоятельно проверить локальные кэши и файлы блокировки.

Что рекомендуют разработчикам

Rust Project советует проверить каталог ~/.cargo/registry/cache на наличие файлов arrayref-0.3.10.crate, internment-0.8.7.crate, append-only-vec-0.1.9.crate и любых файлов, связанных с перечисленными поддельными пакетами.

Дополнительно необходимо изучить Cargo.lock, журналы сборки и сетевые соединения. Исследователи обнаружили инфраструктуру с IP-адресом 23.254.165.112, который использовался для загрузки payload через порт 9089 и связи с командным сервером через порт 443. Среди других индикаторов компрометации названы файлы /tmp/rust-setup, rust-setup.ps1 и rust-setup-launch.vbs.

При обнаружении заражённого пакета компьютер или сервер следует считать потенциально скомпрометированным. Специалисты рекомендуют изолировать систему, заменить доступные с неё пароли, токены и ключи, а также заново собрать выпущенные артефакты из проверенного окружения.

Для временной защиты разработчикам советуют зафиксировать arrayref на версии 0.3.9 или более ранней, если она уже присутствует в локальном кэше. На 21 августа исправленного релиза для самой библиотеки не было, а отдельный идентификатор CVE инциденту не присвоили.

Атака показала, что в экосистеме Rust доверие к исходному коду библиотеки не защищает от вредоносных скриптов сборки. Даже небольшое изменение манифеста зависимости может превратить обычное обновление пакета в выполнение кода с правами разработчика или CI-сервера.

Наша редакция участвует в партнёрской сети «Все СМИ».

Другие новости

Подписаться на Telegram-канал