+− 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, без пісочниці, приваблення до видаленої версії

Перекладена стенограма

Перекладено з оригінальної англійської розповіді. Доступне аудіо та субтитри контролюються 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, одна літера від Девіда Толнау, який підтримує половину 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, без пісочниці, приваблення до видаленої версії

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

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

git blame — розкол

2:07 отруєної версії. Один обліковий запис, тридцять: один обліковий запис перевидає крейт, якому довіряє чверть мільярда завантажень. Цифра один, п'ятнадцять: один натиск клавіші від найнадійнішого крейту Rust, і ніхто не читає дерево. Радіус ураження: 2 285 завантажень за 86 хвилин. Менше десяти відсотків трафіку, оскільки більшість локфайлів містили 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 і трактуйте попередження про видалення як питання, а не інструкцію. Надішліть мені інцидент, про який вам все ще не дозволено говорити, у коментарях або на the daily diff dot dev. І це весь "диф" на сьогодні. Я Ніко з 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 · uk · 13 вер. 2026 р.

Одинадцять рядків JavaScript зламали інтернет. Одне скасування публікації.

22 березня 2016 року, 21:30 UTC: розробник скасовує публікацію всіх 273 своїх пакетів npm після того, як npm передає назву пакету «kik» компанії Kik, додатку для обміну повідомленнями, патентний повір

2:52 ↗
postmortem · uk · 25 вер. 2026 р.

Мільйонна частка секунди зупинила авіатрафік Великої Британії. Шість годин.

О 10:00 у вівторок, 8 вересня, один звичайний запит коду транспондера в Національній системі повітряного простору (NAS) NATS переривається повідомленням з вищим пріоритетом, доки він частково оновлює

3:06 ↗
postmortem · uk · 22 вер. 2026 р.

Перезавантаження відкинуло Telstra у 2006 рік. Дев'ять мільйонів телефонів.

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

3:15 ↗