+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Крейт Rust запустил вредоносное ПО во время компиляции. 86 минут.

Крейт Rust с четырьмя макросами и 260 миллионами загрузок добавляет одну зависимость, и `cargo build` запускает бинарник незнакомца на вашей машине.

Крейт Rust с четырьмя макросами и 260 миллионами загрузок добавляет одну зависимость, и `cargo build` запускает бинарник незнакомца на вашей машине. 20 августа 2026 года: arrayref 0.3.10 появляется на crates.io, зависящий от proc-macro1 — не proc-macro2, настоящего — чей скрипт сборки загружает полезную нагрузку, помещает ее в /tmp/rust-setup и запускает ее в фоновом режиме, пока ваш проект компилируется. Чистые версии удалены, поэтому собственное предупреждение Cargo направляет вас к зараженной версии. 86 минут спустя она удаляется.

Читать письменное издание (на английском) ↗

Что освещается в этом видео

  • cargo build запускает бинарник незнакомца
  • Доказательства: Rust Blog, SafeDep, Hacker News
  • Это The Daily Diff, посмертный анализ
  • Хронология: 02:11 подготовка → 07:15 опубликовано → 08:41 удалено
  • Механизм: build.rs, без песочницы, приманка yank

Переведенная стенограмма

Переведено с оригинального английского повествования. Доступные аудио и субтитры контролируются YouTube.

cargo build запускает бинарник незнакомца

0:00 Крейт Rust с четырьмя макросами и четвертью миллиарда загрузок добавляет одну зависимость, и cargo build запускает бинарник незнакомца на вашей машине. 20 августа 2026 года. arrayref 0.3.10 появляется на crates.io, зависящий от proc-macro1. Не proc-macro2, настоящий: отличается на одну цифру, и его скрипт сборки запускает полезную нагрузку, пока ваш проект компилируется. Команда безопасности Rust удаляет его 86 минут спустя.

Доказательства: Rust Blog, SafeDep, Hacker News

0:22 SafeDep публикует разбор. Hacker News: 554 балла. Как это происходит, почему Cargo это допускает, и кто виноват. Это The Daily Diff, посмертный анализ. Два часа ночи, UTC.

Это The Daily Diff, посмертный анализ

0:33 Аккаунт под названием d-tolney, на одну букву отличающийся от David Tolnay, который поддерживает половину Rust, публикует proc-macro1 1.0.106: настоящий

Хронология: 02:11 подготовка → 07:15 опубликовано → 08:41 удалено

0:41 proc-macro2, переименованный. В стадии подготовки. 07:11. Версия 1.0.107 добавляет скрипт сборки, плюс base64, TLS и HTTP-клиент. Для парсера токенов. 07:15. Аккаунт сопровождающего переиздает arrayref как 0.3.10 и отменяет все старые версии. Cargo печатает: рассмотрите возможность обновления до версии, которая не отменена. Единственная оставшаяся — зараженная.

1:02 Предупреждение — это приманка. В ту же минуту фирма по безопасности сообщает об этом Rust. 07:54, проблема в RustSec. 08:29, проблема в репозитории; злоумышленник отвечает 0.3.11 и второй вредоносной зависимостью. 08:41, удалено. Восемьдесят шесть минут. Почему? Первое: Cargo собирает каждую объявленную зависимость, вызванную или нет. Одной строки манифеста достаточно.

1:21 Второе: скрипт сборки запускается на вашей машине, от вашего имени, с вашими SSH-ключами и токеном cargo,

Механизм: build.rs, без песочницы, приманка yank

1:26 прежде чем ваш код скомпилируется. Без песочницы, по замыслу: так крейты находят C-библиотеки. Третье: внутри настоящий proc-macro2, поэтому сборка проходит успешно. Полезная нагрузка: TLS-клиент, который доверяет любому сертификату, получает бинарник, помещает его в /tmp/rust-setup и запускает его в фоновом режиме. В Windows он обходит job object Cargo через wscript; так говорится в комментарии к исходному коду. Вторая стадия, согласно ветке RustSec: инструмент удаленного доступа, нацеленный на

1:52 браузеры и криптокошельки. Поэтично, поскольку крупнейшие пользователи arrayref включают secp256k1 и Solana. git blame. Модель Cargo, пятьдесят пять процентов: зависимости запускают код на вашей машине во время компиляции, без песочницы, и предупреждение yank направляло людей к

git blame — разделение

2:07 яду. Один аккаунт, тридцать: одна учетная запись переиздает крейт, которому доверяет четверть миллиарда загрузок. Цифра один, пятнадцать: одно нажатие клавиши от самого доверенного крейта Rust, и никто не читает дерево. Радиус поражения: 2 285 загрузок за 86 минут. Менее десяти процентов трафика, потому что большинство lockfile содержали 0.3.9. crates.io говорит, что нет доказательств использования.

Радиус поражения: 2 285 загрузок

2:27 Два человека в ветке RustSec не согласны; один находит службу systemd. На Hacker News главная ветка не о вредоносном ПО. Это страница крейта, где 0.3.10 теперь никогда не существовало. Вердикт, посмертный анализ: NEEDS REVIEW. Восемьдесят шесть минут на удаление, блог-пост в тот же день, аккаунт заблокирован: эта часть — SHIP IT. Но страница крейта показывает, что ничего не произошло, cargo audit молчит о кэшированной

Вердикт + понедельничная линия

2:48 копии, а скрипты сборки по-прежнему запускаются от вашего имени. Понедельник: запустите команду поиска из блога Rust и относитесь к предупреждению yank как к вопросу, а не к инструкции. Присылайте мне инцидент, о котором вам до сих пор не разрешено говорить, в комментариях или на daily diff dot dev. И это весь diff на сегодня. Я Нико из Axrisi. Объединяйте ответственно.

Источники

  1. Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
  2. RUSTSEC-2026-0260 (arrayref)github.com
  3. RustSec issue #3161 (the original report, IOCs, victims)github.com
  4. SafeDep technical analysissafedep.io
  5. GitHub issue on the repo (0.3.11 spotted)github.com
  6. crates.iocrates.io
  7. Hacker News (554 points)news.ycombinator.com
  8. BleepingComputerwww.bleepingcomputer.com

Похожие видео

postmortem · ru · 25 сент. 2026 г.

Ошибка в одну миллисекунду остановила воздушное движение в Великобритании. На шесть часов.

Во вторник, 8 сентября, в 10:00 обычный запрос squawk-кода в Национальной системе воздушного пространства NATS (NAS) прерывается сообщением с более высоким приоритетом в процессе обновления значения.

3:06 ↗
postmortem · ru · 22 сент. 2026 г.

Перезагрузка отбросила Telstra в 2006 год. Девять миллионов телефонов.

Инженер в Мельбурне в 2:50 ночи снова включает шасси синхронизации, и к завтраку крупнейшая мобильная сеть Австралии соглашается, что сейчас ноябрь 2006 года. 8 июля 2026 года: GPS-карта в шасси NTP T

3:15 ↗