В августе 2026 года в экосистеме Rust зафиксирована скоординированная атака на цепочку поставок, затронувшая три широко используемые библиотеки: arrayref, internment и append-only-vec. Злоумышленники опубликовали вредоносные релизы этих крейтов, которые при сборке проекта незаметно выполняли посторонний код. Инцидент затронул разработчиков по всему миру, поскольку атака происходила на этапе компиляции, не требуя от программиста каких-либо действий кроме обычной сборки.
Описание
Первым тревожный сигнал зафиксировал автоматический сканер компании Socket 20 августа 2026 года. Машина обнаружила подозрительный пакет proc-macro1, имитировавший популярную библиотеку proc-macro2. Почти одновременно с этим были опубликованы вредоносные версии всех трёх легитимных крейтов. Позднее специалисты Nextron Systems самостоятельно сообщили о проблеме в команду реагирования Rust Security Response Team, а технические детали попали в открытый репозиторий RustSec.
Механизм атаки оказался простым и эффективным. Вредоносные версии arrayref, internment и append-only-vec в своих манифестах указывали зависимость от пакета proc-macro1. Когда система сборки Cargo разрешала зависимости, она загружала этот пакет и автоматически запускала его сборочный скрипт. Как выяснили аналитики Socket, вредоносный код был спрятан именно в этом скрипте, а сам proc-macro1 тщательно копировал внешний вид легитимного proc-macro2, включая исходный код, документацию и метаданные. Внешне библиотека выглядела безобидно, однако при каждой компиляции выполнялись действия злоумышленников.
Полезная нагрузка первого этапа действовала по отработанной схеме. Сначала загрузчик восстанавливал адрес командно-контрольного сервера, скрытый в закодированном виде. Затем определял операционную систему и архитектуру жертвы, отключал проверку сертификатов безопасности и скачивал с удалённого сервера второй этап вредоносного кода. На Linux и macOS вредоносный код создавал исполняемый файл во временной папке, запускал его и завершал свою работу. На Windows он создавал два вспомогательных файла, после чего через системный интерпретатор запускал скрытую команду PowerShell с обходом политики выполнения. Таким образом атака обеспечивала выполнение кода на всех трёх основных платформах.
Второй этап представлял собой полноценную программу удалённого управления, которая после запуска начинала собирать данные о системе: имя пользователя, имя компьютера, версию операционной системы, уровень привилегий и список установленных приложений. Особое внимание уделялось браузерам на базе Chromium: вредоносный код собирал посещённые сайты, сохранённые имена учётных записей и перечень установленных расширений. Затем программа закреплялась в автозагрузке. Для Windows она создавала запись в реестре, для Linux - службу пользователя в systemd, для macOS - агент запуска LaunchAgent.
После закрепления вредоносная программа связывалась с командно-контрольным сервером и ожидала команд. В её арсенале были смена конфигурации, повторная установка закрепления, загрузка и выполнение скриптов или отдельных команд, а также завершение работы. При недоступности основного сервера использовались десять автоматически генерируемых доменных имён, зависящих от даты. Причём адрес управляющего сервера не был вшит во второй этап: его передавал загрузчик при запуске. Это позволяло злоумышленникам менять инфраструктуру без переписывания вредоносного кода.
Аналитики Socket обратили внимание на слабость в системе аутентификации команд вредоносной программы. Во всех извлечённых образцах использовался один и тот же ключ шифрования, а реализация не обеспечивала эксклюзивность оператора. В сочетании с предсказуемым алгоритмом генерации доменов это открывает возможности для перехвата управления вредоносными ботами и идентификации пострадавших систем. При этом специалисты предупреждают, что защитникам не следует отправлять команды на чужие системы.
Помимо трёх скомпрометированных крейтов, злоумышленники опубликовали несколько дополнительных пакетов, которые, по всей видимости, использовались для тестирования инфраструктуры. Среди них proc-macro-en с тем же вредоносным сборочным скриптом, а также aovine, arone, aronenao и tinymember. Последний имитировал популярную библиотеку tiny-skia, однако содержал лишь тестовый код. Rust Security Response Team удалила все указанные пакеты с реестра crates.io и заблокировала аккаунт сопровождающего легитимных крейтов. В команде считают, что сам разработчик не замешан в атаке, а его учётные данные были скомпрометированы.
Основной удар пришёлся на процесс сборки программного обеспечения. Достаточно один раз собрать проект с вредоносной зависимостью, чтобы система оказалась заражена. В группе риска находятся рабочие станции разработчиков, сборочные фермы, системы непрерывной интеграции и развёртывания, а также среды автоматической сборки. На таких системах обычно хранятся ключи доступа к репозиториям, токены для публикации пакетов, облачные учётные данные и секреты развёртывания. По данным RustSec, предыдущая чистая версия arrayref была загружена около 152 миллионов раз, что делает её частью зависимостей множества проектов, включая популярные графические интерфейсы. Однако загрузки не означают заражение: опасность возникает только при фактическом использовании вредоносной версии.
Компаниям, использующим Rust, следует немедленно проверить файлы описания зависимостей Cargo.lock и журналы сборки на наличие версий arrayref 0.3.10, internment 0.8.7 и append-only-vec 0.1.9, а также всех перечисленных вредоносных пакетов. До выяснения обстоятельств рекомендуется закрепить легитимные версии: arrayref не выше 0.3.9, internment не выше 0.8.6 и append-only-vec не выше 0.1.8. Если сборка с вредоносной версией происходила, систему следует считать скомпрометированной. В таком случае необходимо проверить наличие подозрительных подключений к известным адресам злоумышленников, следов автозагрузки, созданных после сборки, а также временных исполняемых файлов. Ключи и пароли, доступные затронутой среде, нужно ротировать, а программное обеспечение пересобрать на чистой системе.
Этот инцидент в очередной раз показывает уязвимость цепочек поставок в открытом коде. Даже пользующиеся доверием библиотеки могут быть временно заменены на вредоносные, если злоумышленник получает доступ к учётной записи сопровождающего. Автоматическое выполнение сборочных скриптов зависимости превращает обычную компиляцию в потенциальную точку входа, поэтому контроль зависимостей, их постоянная проверка и быстрое реагирование на подобные сообщения остаются обязательными элементами защиты любого современного проекта.
Индикаторы компрометации
IPv4 Port Combination
- 23.254.165.112:443
- 23.254.165.112:9089
Domain
- aBEcOrkups.com
- ackeoTaWtl.com
- epOdIaTMaM.com
- feVVKIiEiU.com
- GAFWVCMAja.com
- pfHlVOqEeg.com
- phrpjTNckF.com
- PrOkXLgfjW.com
- rasGThauFD.com
- RNSsddnEgK.com
URL
- https://23.254.165.112:443/49890878
- https://23.254.165.112:9089/rust-crate_0.1.0
- https://23.254.165.112:9089/rust-crate_0.2.0
- https://23.254.165.112:9089/rust-crate_0.3.0
- https://23.254.165.112:9089/rust-crate_0.4.0
SHA256
- 408ef22050ffc5a67e005802809026b29f297a8019f8fda91a2afa8e877ba434
- 492f2ab86f8d8911adc79c10ec1541704f5311d207d9d799b0d2a57fcc6a4391
- 74d3447e7cf99c99ea01a16332ec27432dfb0f491e10e67cd118065a60483306
- c9561a3b00a0fa38b7772675d987f84bd429c55cd024fc08a98245c2d1632848
- cb7778eb6dda91028abf087eb7c3553f981a67e756769507d348e8c201805568
Compromised Legitimate Crates
- arrayref@0.3.10
- internment@0.8.7
- append-only-vec@0.1.9
Threat Actor-Controlled Crates
- proc-macro1
- proc-macro-en
- aovine
- arone
- aronenao
- tinymember