# Rust crate изпълни зловреден софтуер по време на компилация. 86 минути.

Published: 2026-09-15

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

Canonical: https://thedailydiff.dev/bg/video/2026-09-15-arrayref-proc-macro/

## Какво обхваща този видеоклип

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

## Глави

- 0:00 cargo build изпълнява чужд бинарен файл
- 0:20 Доказателствата: Rust Blog, SafeDep, Hacker News
- 0:33 Това е The Daily Diff, постмортем
- 0:40 Хронология: 02:11 стартиране → 07:15 публикувано → 08:41 изтрито
- 1:25 Механизъм: build.rs, без пясъчник, примамката с изтеглянето
- 2:05 git blame — разделението
- 2:25 Радиус на въздействие: 2285 изтегляния
- 2:45 Присъда + линията от понеделник

## Преведен препис

Преведено от оригиналния английски разказ. Наличните аудио и субтитри се контролират от 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)](https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/) — blog.rust-lang.org
- [RUSTSEC-2026-0260 (arrayref)](https://github.com/rustsec/advisory-db/blob/main/crates/arrayref/RUSTSEC-2026-0260.md) — github.com
- [RustSec issue #3161 (the original report, IOCs, victims)](https://github.com/rustsec/advisory-db/issues/3161) — github.com
- [SafeDep technical analysis](https://safedep.io/arrayref-proc-macro1-rust-build-time-malware/) — safedep.io
- [GitHub issue on the repo (0.3.11 spotted)](https://github.com/droundy/arrayref/issues/33) — github.com
- [crates.io](https://crates.io/crates/arrayref) — crates.io
- [Hacker News (554 points)](https://news.ycombinator.com/item?id=49374269) — news.ycombinator.com
- [BleepingComputer](https://www.bleepingcomputer.com/news/security/hackers-poison-arrayref-rust-crate-to-push-infostealer-malware/) — www.bleepingcomputer.com
