Скоординированная атака на цепочку поставок поразила популярные Rust-крейты вредоносным ПО на этапе сборки
Ключевые выводы
- •Вредоносные версии Rust-крейтов arrayref, internment и append-only-vec были изменены так, чтобы зависеть от proc-macro1 — тайпсквота proc-macro2, выполнявшего вредоносный код во время сборок Cargo.
- •Кроссплатформенный имплант заражал системы Linux, macOS и Windows, собирая сведения о системе и данные браузинга Chromium, а также обеспечивая персистентность и связь с командным центром.
- •Команда Rust Security Response Team удалила заражённые релизы и заблокировала аккаунт мейнтейнера, придя к выводу, что, скорее всего, была скомпрометирована машина разработчика или его учётные данные для публикации, а не мейнтейнер действовал со злым умыслом.
- •arrayref накопил около 152 миллионов загрузок и встречается в деревьях зависимостей, включающих компоненты, связанные с Solana, что создаёт широкую поверхность атаки на машинах разработчиков и инфраструктуре CI/CD.
- •Поскольку Cargo пропускает отозванные (yanked) версии при вычислении новых деревьев зависимостей, но учитывает версии, уже зафиксированные в файлах Cargo.lock, фактическая подверженность риску зависит от закреплённого lock-файла каждого проекта.

20 августа 2026 года исследователи в области кибербезопасности обнаружили скоординированную атаку на цепочку поставок против трёх широко используемых Rust-крейтов, опубликованных на crates.io. Скомпрометированные пакеты — arrayref версии 0.3.10, internment 0.8.7 и append-only-vec 0.1.9 — были изменены так, чтобы включать вредоносную зависимость, выполнявшую удалённый код при стандартной компиляции. Команда Rust Security Response Team оперативно удалила затронутые релизы и заблокировала аккаунт мейнтейнера, отметив, что, скорее всего, была скомпрометирована машина легитимного разработчика или его учётные данные для публикации, а не мейнтейнер действовал со злым умыслом.
Зависимость-тайпсквот доставила полезную нагрузку
Атака использовала крейт-тайпсквот под названием proc-macro1, выдававший себя за легитимную библиотеку proc-macro2. Когда Cargo разрешал зависимость, автоматически запускался вредоносный скрипт сборки, который восстанавливал адреса командного центра (command-and-control) из обфусцированных Base64-данных, отключал проверку TLS и загружал платформоспецифичную полезную нагрузку с сервера, контролируемого злоумышленниками. Поскольку компрометация происходила на этапе сборки, простая компиляция проекта, транзитивно зависевшего от одного из вредоносных крейтов, могла инфицировать рабочую станцию разработчика или хост непрерывной интеграции, даже если код приложения никогда напрямую не вызывал какие-либо подозрительные функции.
Маскировка была нацелена на один из самых повсеместно используемых строительных блоков Rust — proc-macro2 лежит в основе обработки макросов для значительной доли опубликованных крейтов, — а реестры вроде crates.io, npm и PyPI распределяют имена пакетов по принципу «первым пришёл — первым обслужен», что давно сделало тайпсквоттинг излюбленным методом атак на цепочку поставок в различных языковых экосистемах.
Кроссплатформенное поведение бэкдора
Вредоносное ПО работало на Linux, macOS и Windows. На Linux и macOS оно помещало исполняемый файл во временные каталоги и запускало его в отцепленном (detached) режиме. На Windows применялись скрипты PowerShell и Visual Basic для обхода политик выполнения и запуска скрытых процессов. Затем бэкдор второй стадии собирал профиль инфицированной системы, извлекая имена пользователей, имена хостов, список установленных приложений и данные браузинга из браузеров на базе Chromium. Он обеспечивал персистентность на уровне пользователя через run-ключи реестра, пользовательские сервисы systemd или LaunchAgents в macOS, поддерживал связь с узлом командного центра (command-and-control) и выполнял удалённые команды для дальнейших действий и изменения конфигурации.
Специалисты компании Socket задокументировали инцидент в X:
Popular Rust crates compromised: Affected versions of arrayref, internment, and append-only-vec were modified to depend on proc-macro1, a malicious typosquat of proc-macro2. Its build script downloaded and executed malware during Cargo builds. Analysis:
— Socket (@SocketSecurity), August 20, 2026
Масштабы воздействия на экосистему и меры по устранению последствий
Инцидент имеет серьёзные последствия для экосистемы Rust и смежной блокчейн-инфраструктуры. Только arrayref к моменту компрометации накопил около 152 миллионов загрузок и входит в деревья зависимостей, включающие компоненты, связанные с Solana, и популярные фреймворки графических интерфейсов. Хотя нижестоящие проекты не были автоматически скомпрометированы, если они явно не разрешали и не собирали вредоносные версии, широкое транзитивное использование крейта создаёт обширную поверхность атаки, охватывающую среды разработки, CI/CD-конвейеры и инфраструктуру автоматизированных релизов, где нередко хранятся чувствительные токены и материалы для подписи.
Этот эпизод происходит на фоне более широкой волны компрометаций реестров пакетов. В августе 2025 года кампания, отслеживаемая под именем rk0x, использовала украденные учётные данные мейнтейнеров для публикации заражённых версий популярных Rust-крейтов, похищая учётные данные браузеров и криптовалютные кошельки, а npm и PyPI неоднократно становились объектами тайпсквоттинга и атак с захватом аккаунтов. Бэкдор в XZ Utils в марте 2024 года также показал, насколько единственная широко используемая библиотека с открытым исходным кодом может стать узким местом, затрагивающим огромное количество нижестоящих систем.
Исследователи выявили дополнительные промежуточные крейты, контролируемые злоумышленниками, — proc-macro-en, aovine, arone, aronenao и tinymember, — которые впоследствии были удалены из реестра. Злоумышленник также отозвал (yanked) предыдущие легитимные версии arrayref, потенциально направляя разрешение зависимостей в сторону вредоносного релиза до вмешательства администраторов. Согласно правилам разрешения зависимостей Cargo, отозванные версии пропускаются при вычислении новых деревьев зависимостей, однако версии, уже зафиксированные в Cargo.lock, продолжают собираться, поэтому фактическая подверженность риску определяется закреплёнными lock-файлами, а не только состоянием реестра.
Организациям рекомендуется провести аудит файлов Cargo.lock, инвентарей зависимостей и журналов сборки на предмет затронутых версий и связанных индикаторов. Любую систему, в которой выполнялась компиляция одного из вредоносных релизов, следует считать потенциально скомпрометированной: требуется ротация секретов, доступных среде сборки, форензический поиск известных сетевых и хостовых артефактов и пересборка программного обеспечения из проверенных чистых сред. Защитникам также следует отслеживать подключения к выявленной инфраструктуре командного центра и выходы детерминированного алгоритма генерации доменов, связанные с имплантом. Инструменты экосистемы поддерживают такую сортировку: cargo tree перечисляет транзитивные зависимости для проверки, а база данных рекомендаций RustSec, используемая через cargo audit, каталогизирует известные уязвимые версии крейтов.
Источник: Metaverse Post