Rust crate: что это такое и откуда взялось

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

Механизм проникновения и социальная инженерия

Rust crate

Атака началась со взлома аккаунта известного мейнтейнера Дэвида Раунди (droundy). После получения доступа злоумышленники удалили стабильные версии крейта arrayref с 0.3.5 по 0.3.9. Это действие спровоцировало систему управления пакетами Cargo выдавать предупреждения пользователям, предлагая обновиться до единственной доступной версии — 0.3.10. Именно эта версия содержала скрытую зависимость от вредоносного пакета proc-macro1.

Название proc-macro1 было выбрано не случайно. Оно имитирует легитимную и широко используемую библиотеку proc-macro2, а также пародирует имя уважаемого разработчика Дэвида Толнея (dtolnay). Аккаунт создателя вредоноса назывался dtolney, что визуально почти неотличимо от оригинала. Метаданные пакета также были подделаны: в качестве автора указывался Дэвид Толней, но с чужим адресом электронной почты, а ссылка на репозиторий вела на несуществующую страницу с ошибкой 404.

Технические детали вредоносного кода

Сама библиотека arrayref в версии 0.3.10 функционально не изменилась. Ее исходный код остался прежним, но в файл манифеста Cargo.toml была добавлена строка зависимости от proc-macro1. Поскольку Cargo автоматически собирает все declared зависимости, этого было достаточно для запуска вредоносного сценария. Пакет proc-macro1 представлял собой полную копию легитимного proc-macro2, чтобы не вызывать ошибок компиляции и оставаться незаметным для разработчиков.

Опасность скрывалась в скрипте сборки build.rs. Он использовал библиотеки base64, rustls и ureq для загрузки внешнего исполняемого файла. Адрес сервера был зашифрован и разбит на части, чтобы избежать простого текстового поиска в коде. Скрипт игнорировал проверку SSL-сертификатов, принимая любые соединения, что позволяло загружать полезную нагрузку с IP-адреса 23.254.165.112.

Поведение полезной нагрузки в разных операционных системах

Вредоносное ПО адаптировалось под архитектуру и операционную систему жертвы. Для Linux и macOS скачивался бинарный файл, который сохранялся во временной директории /tmp/rust-setup и запускался в фоновом режиме. При этом стандартные потоки ввода-вывода перенаправлялись в null, чтобы скрыть активность от пользователя.

В среде Windows атака была более изощренной. Скрипт загружал PowerShell-скрипт и создавал VBScript-лаунчер. Запуск осуществлялся через wscript.exe в скрытом окне. Особое внимание злоумышленники уделили тому, чтобы процесс не блокировал завершение сборки проекта. Они использовали технику отсоединения процесса от родительского задания Cargo, позволяя вредоносному коду работать независимо после окончания компиляции.

Масштаб угрозы и затронутые проекты

Крейт arrayref является транзитивной зависимостью для многих популярных графических библиотек, включая tiny-skia, winit и egui. Это означает, что под угрозой оказались тысячи приложений с графическим интерфейсом. Общее количество загрузок arrayref превышает 244 миллиона, хотя точное число зараженных сборок установить сложно. Большинство пользователей, вероятно, использовали более старые, безопасные версии, которые были кэшированы локально или заблокированы инструментами управления зависимостями.

Компания SafeDep, опубликовавшая детальный анализ инцидента, предоставила хеши SHA256 для всех удаленных вредоносных артефактов. Это позволяет администраторам безопасности проверить свои системы на наличие следов компрометации. Индикаторами заражения являются сетевые соединения с указанным IP-адресом, а также наличие файлов rust-setup.ps1 или /tmp/rust-setup в системах разработчиков.

Рекомендации по защите

Инцидент демонстрирует уязвимость цепочек поставок программного обеспечения. Даже проверенные временем библиотеки могут стать вектором атаки при компрометации аккаунта maintainer’а. Разработчикам рекомендуется использовать инструменты аудита зависимостей, такие как cargo-audit, и внимательно следить за предупреждениями системы о удаленных версиях пакетов. Также важно проверять целостность репозиториев и обращать внимание на подозрительные изменения в именах зависимостей, особенно если они напоминают популярные библиотеки с небольшими опечатками.

Источник: https://safedep.io/arrayref-proc-macro1-rust-build-time-malware/

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх