Rust crate изпълни зловреден софтуер по време на компилация. 86 минути.
Rust crate с четири макроса и 260 милиона изтегляния добавя една зависимост, а `cargo build` изпълнява чужд бинарен файл на вашата машина.
Rust crate с четири макроса и 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 crate с четири макроса и четвърт милиард изтегляния добавя една зависимост, а 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 токен, преди вашият код да се компилира. Без пясъчник, по дизайн: така crates намират C библиотеки. Трето: вътре е истинският proc-macro2, така че изграждането е успешно. Полезният товар: TLS клиент, който се доверява на всеки сертификат, изтегля бинарен файл, пуска го в /tmp/rust-setup и го стартира като отделен процес. На Windows той заобикаля wscript, за да избяга от job object на Cargo; източник коментар го казва. Вторият етап, според темата в RustSec: инструмент за отдалечен достъп, насочен към
1:52 браузъри и крипто портфейли. Поетично, тъй като най-големите потребители на arrayref включват secp256k1 и Solana. git blame. Моделът на Cargo, петдесет и пет процента: зависимостите изпълняват код на вашата машина по време на компилация, без пясъчник, и предупреждението за изтегляне насочи хората към
git blame — разделението
2:07 отровата. Един акаунт, тридесет: едно удостоверение препубликува crate, на който четвърт милиард изтегляния вярват. Цифрата едно, петнадесет: един натиск на клавиш от най-доверения crate на Rust, и никой не чете дървото. Радиус на въздействие: 2285 изтегляния за 86 минути. Под десет процента от трафика, защото повечето lockfile-ове съдържаха 0.3.9. crates.io казва, че няма доказателства за употреба.
Радиус на въздействие: 2285 изтегляния
2:27 Двама души в темата на RustSec не са съгласни; един намира systemd услуга. В Hacker News основната тема не е за зловредния софтуер. Това е страницата на crate, където 0.3.10 сега никога не е съществувал. Присъда, постмортем: NEEDS REVIEW. Осемдесет и шест минути за изтриване, блог пост в същия ден, акаунтът е заключен: тази част е SHIP IT. Но страницата на crate показва, че нищо не се е случило, cargo audit мълчи за кеширано
Присъда + линията от понеделник
2:48 копие, и скриптовете за изграждане все още се изпълняват като вас. Понеделник: изпълнете командата за търсене на Rust блога и третирайте предупреждението за изтегляне като въпрос, а не като инструкция. Изпратете ми инцидента, за който все още не ви е позволено да говорите, в коментарите, или на the daily diff dot dev. И това е различното за днес. Аз съм Нико от Axrisi. Сливайте отговорно.
Източници
- Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
- RUSTSEC-2026-0260 (arrayref)github.com
- RustSec issue #3161 (the original report, IOCs, victims)github.com
- SafeDep technical analysissafedep.io
- GitHub issue on the repo (0.3.11 spotted)github.com
- crates.iocrates.io
- Hacker News (554 points)news.ycombinator.com
- BleepingComputerwww.bleepingcomputer.com



