Злоумышленники использовали аккаунт сопровождающего, связанный с популярным пакетом Rust arrayref, чтобы опубликовать вредоносную версию, запускающую вредоносную программу на устройствах разработчиков во время сборки проектов. В течение периода продолжительностью не более 23 минут операция также затронула пакеты append-only-vec и internment, став атакой на цепочку поставок программного обеспечения.
StepSecurity сообщила, что затронутыми версиями были arrayref 0.3.10, append-only-vec 0.1.9 и internment 0.8.7; все три пакета управлялись одним и тем же аккаунтом. Пакет arrayref широко распространён: за последние 90 дней он был загружен более 53 миллионов раз, а общее число загрузок превысило 245 миллионов. Он используется в проектах и инструментах, связанных с криптографией, графикой и графическими интерфейсами Rust, а также в компонентах экосистем Ethereum и Solana.
Как была осуществлена атака?
Злоумышленники добавили зависимость от пакета под названием proc-macro1, выдающего себя за известный пакет proc-macro2. Большая часть исходного кода пакетов осталась без изменений, что усложняет обнаружение манипуляций при проверке только программных различий.
Пакет proc-macro1 содержал файл build.rs, который автоматически выполняется во время сборки. Файл собирает компоненты вредоносной инфраструктуры из частей, закодированных в Base64, а затем выбирает полезную нагрузку для соответствующей операционной системы, включая Linux, Windows и macOS на архитектурах x86-64 и ARM64. В Unix полезная нагрузка записывается в /tmp/rust-setup и запускается как отдельный процесс, тогда как в Windows атака создаёт файл rust-setup.ps1 в папке TEMP и использует wscript.exe и скрипт в формате VBS, чтобы поддерживать процесс запущенным.
Что может украсть программа?
Согласно анализу Wiz, второй этап собирает информацию о хосте и учётные данные. Программа извлекает данные для входа из баз данных SQLite браузеров Google Chrome, Brave и Edge. Она также создаёт механизмы закрепления через Registry Run в Windows, LaunchAgent в macOS и systemd в Linux. Полезная нагрузка получает адрес в качестве аргумента; считается, что это адрес сервера управления и контроля.
Хронология и значение для разработчиков
Кампания началась в 01:17 по всемирному координированному времени 20 августа 2026 года с создания аккаунта GitHub, выдававшего себя за известного разработчика Rust David Tolnay, а затем аналогичного аккаунта на crates.io. В 01:55 была опубликована чистая версия proc-macro1, за которой в 07:11 последовала вредоносная версия 1.0.107. Через четыре минуты пакет arrayref 0.3.10 был опубликован через легитимный аккаунт droundy, связанный с David Roundy, а версии с 0.3.5 по 0.3.9 были удалены, что могло заставить инструменты установки выбрать вредоносную версию.
О происшествии сообщили в 07:54, после чего crates.io удалила пакет proc-macro1 в 08:03 и убрала arrayref 0.3.10 из индекса в 08:41. Также были удалены вредоносные версии других пакетов: aovine, arone, aronenao и tinymember.
Шаги реагирования
Тем, кто устанавливал затронутые версии в период воздействия, продолжавшийся около полутора часов, следует считать среду взломанной. Проверка должна включать поиск подозрительных версий в файлах Cargo.lock, проверку сброшенных файлов и анализ соединений с адресом 23.254.165[.]112 через порты 9089 и 443. При подтверждении взлома анализы рекомендуют сменить все учётные данные, токены CI, ключи подписи и другие секреты, а затем пересобрать среду из надёжных резервных копий. Проектам, которых атака не затронула, следует закрепить версию, безопасность которой известна, до прояснения ситуации с аккаунтами сопровождающих.