Атака на цепочку поставок Rust затронула широко используемые crates с потенциальным охватом экосистемы Solana
Ключевые выводы
- •Исследователи безопасности сообщили о вредоносных релизах arrayref@0.3.10, internment@0.8.7 и append-only-vec@0.1.9 в экосистеме Rust.
- •Скомпрометированные пакеты использовали зависимость-имитатор, похожую на proc-macro1, а её build script мог загружать и выполнять удалённую полезную нагрузку во время компиляции.
- •Поскольку Cargo автоматически запускает build scripts, разработчики и CI-среды могли оказаться под угрозой просто при компиляции затронутых версий.
- •Команда безопасности Rust удалила вредоносные релизы и заблокировала учётную запись сопровождающего, связанную с пакетами.
- •Затронутые crates встречаются в некоторых цепочках зависимостей, связанных с Solana, но отчёт не подтверждает компрометацию Solana или downstream-проектов.

Скоординированная атака на цепочку поставок затронула несколько широко используемых пакетов Rust, вызвав обеспокоенность у разработчиков и проектов, в чьи цепочки зависимостей входят компоненты, связанные с экосистемой Solana. Исследователи безопасности из SlowMist, Socket и StepSecurity сообщили, что вредоносные релизы затронули arrayref@0.3.10, internment@0.8.7 и append-only-vec@0.1.9.
Скомпрометированные релизы добавили зависимость-имитатор, похожую на легитимный пакет proc-macro1, чей build script загружал и выполнял удалённую полезную нагрузку во время сборок Cargo. В результате разработчики и системы непрерывной интеграции (CI) могли оказаться под угрозой просто при компиляции проекта, зависящего от одной из затронутых версий. Согласно информации, опубликованной @WuBlockchain on X, команда безопасности Rust удалила вредоносные релизы и заблокировала учётную запись затронутого сопровождающего.
Вредоносные пакеты были доставлены через цепочку зависимостей
Инцидент связан с экосистемой пакетов Rust, где разработчики часто полагаются на сторонние crates для предоставления функциональности в приложениях и программных проектах. В этом случае исследователи выявили вредоносные версии трёх crates: arrayref@0.3.10, internment@0.8.7 и append-only-vec@0.1.9.
Вредоносные релизы содержали зависимость, созданную так, чтобы напоминать легитимный пакет proc-macro1. Такой приём, известный как typosquatting, пытается сделать вредоносный пакет похожим на законную зависимость. Это повторяющаяся тактика в open-source-реестрах, включая npm и Python PyPI, где похожие имена неоднократно использовались для проведения вредоносного кода через обычные обновления зависимостей.
Атака стала особенно значимой, потому что вредоносная зависимость включала build script, способный загружать и выполнять удалённую полезную нагрузку при компиляции затронутого пакета. Следовательно, риск безопасности не обязательно ограничивался пользователями, которые вручную установили или запустили очевидно подозрительную программу: рабочая станция разработчика или CI-среда могли быть затронуты как часть обычного процесса компиляции программного обеспечения.
Процесс сборки создал потенциальный риск безопасности
Cargo — это менеджер пакетов и система сборки Rust, и разработчики регулярно используют его для получения зависимостей и компиляции проектов. Сообщённая атака использовала именно этот рабочий процесс. Поскольку Cargo автоматически запускает build script crate в рамках компиляции, такой скрипт выполняется с правами пользователя или учётной записи CI, выполняющей сборку.
Когда компилировалась затронутая зависимость, вредоносный build script мог загружать и выполнять удалённую полезную нагрузку. Это создавало потенциальный путь для злоумышленника к выполнению кода на машине разработчика или CI-хосте.
CI-системы особенно важны в современной разработке ПО, поскольку они автоматически собирают, тестируют и развёртывают код. Скомпрометированная среда сборки может создавать риски, выходящие за рамки одной рабочей станции разработчика, поскольку машины сборки и рабочие станции разработчиков часто хранят учётные данные, такие как API-токены, ключи развёртывания и материалы для подписи. По этой причине команды безопасности обычно рассматривают выполнение кода во время сборки как основание для смены любых секретов, присутствующих на затронутых системах.
Инцидент подчёркивает более широкую проблему безопасности, связанную с цепочками поставок программного обеспечения, где вредоносный код может попасть в проект косвенно через зависимости, которые разработчики могли не писать и не проверять сами.
Цепочки зависимостей, связанные с Solana, привлекли внимание
Crate arrayref широко используется во всей экосистеме Rust и встречается в цепочках зависимостей, связанных с компонентами Solana. Программное обеспечение валидаторов Solana и значительная часть сопутствующих инструментов написаны на Rust, поэтому такие универсальные crates, как arrayref, могут появляться в деревьях зависимостей, связанных с Solana, хотя сами crates не привязаны к блокчейну. Однако наличие затронутого crate в цепочке зависимостей не означает, что downstream-проекты, связанные с Solana, были скомпрометированы.
Это различие важно, поскольку open-source ПО часто опирается на несколько уровней зависимостей. Уязвимый или скомпрометированный пакет может присутствовать где-то в дереве зависимостей проекта без того, чтобы это обязательно привело к успешной компрометации конечного приложения или сети.
Поэтому исследователи безопасности различают факт воздействия вредоносной зависимости и наличие доказательств того, что вредоносный код действительно был выполнен в конкретном downstream-проекте или среде. Сообщённый инцидент подтверждает, что затронутые релизы содержали вредоносный код, но не подтверждает, что каждый проект, использующий связанные зависимости, был скомпрометирован.
Команда безопасности Rust удаляет вредоносные релизы
Команда безопасности Rust отреагировала, удалив вредоносные релизы и заблокировав учётную запись сопровождающего, связанную с этими пакетами. Согласно сообщённой информации, машина сопровождающего или его учётные данные для публикации, вероятно, были скомпрометированы.
Скомпрометированная учётная запись для публикации может представлять значительный риск в open-source-экосистемах, поскольку злоумышленники могут распространять вредоносное ПО под именем законного сопровождающего. Удаление затронутых версий ограничивает дальнейшее распространение через пакетную экосистему, а блокировка учётной записи предотвращает публикацию дополнительных релизов с использованием скомпрометированных учётных данных. Security advisories для скомпрометированных crates Rust отслеживаются через поддерживаемую сообществом базу RustSec advisory database, один из каналов, за которым разработчики могут следить наряду с реестром crates.io.
Инцидент также показывает важность мониторинга зависимостей и проверки неожиданных обновлений пакетов, особенно когда проекты опираются на большие и сложные деревья зависимостей.
Более широкие последствия для разработчиков Rust
Атаки на цепочку поставок стали серьёзной проблемой безопасности в разработке ПО, поскольку они нацелены на инфраструктуру и зависимости, используемые для сборки приложений, а не на прямую атаку конечного приложения. В данном случае вредоносный код был встроен в релизы пакетов и активировался во время процесса сборки. У такого сценария есть хорошо задокументированные прецеденты, включая бэкдор XZ Utils, раскрытый в марте 2024 года, когда злоумышленник использовал положение сопровождающего в базовой open-source библиотеке сжатия, а также компрометацию пакета @solana/web3.js в npm в декабре 2024 года, затронувшую JavaScript-библиотеку, широко используемую разработчиками Solana. Оба эпизода, как и этот, показывают, как доверие к учётной записи сопровождающего или идентичности пакета может стать поверхностью атаки.
Разработчики, использующие проекты Rust, могут снизить риск подобных инцидентов, отслеживая версии зависимостей, проверяя неожиданные изменения и используя средства безопасности, способные выявлять подозрительные пакеты или поведение зависимостей. В контексте этого инцидента это означает поиск в lockfile, таком как Cargo.lock, трёх затронутых версий, проверку CI и журналов сборки на предмет неожиданной исходящей сетевой активности и смену учётных данных на любой машине, где были скомпилированы затронутые релизы. Организациям, использующим автоматизированные CI-среды, также необходимо учитывать безопасность инфраструктуры сборки, поскольку вредоносные зависимости потенциально могут выполнить код до развёртывания приложения.
Реакция экосистемы Rust демонстрирует важность скоординированного мониторинга безопасности и быстрого удаления скомпрометированных пакетов. Хотя затронутые crates связаны с цепочками зависимостей, включающими компоненты, связанные с Solana, доступная информация не подтверждает, что сама Solana или конкретные downstream-проекты были скомпрометированы. Этот инцидент служит напоминанием о том, что широко используемые open-source зависимости могут стать потенциальным вектором атаки, если скомпрометированы учётные данные для публикации или среды сопровождающих.
Источник: Hokanews