Крэйт 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 ён абыходзіць праз wscript, каб пазбегнуць аб'екта задання Cargo; крыніца каментар так кажа. Другі этап, згодна з веткай RustSec: інструмент аддаленага доступу, накіраваны на
1:52 браўзеры і крыптакашалькі. Паэтычна, бо сярод найбуйнейшых карыстальнікаў arrayref ёсць secp256k1 і Solana. git blame. Мадэль Cargo, пяцьдзесят пяць працэнтаў: залежнасці выконваюць код на вашай машыне падчас кампіляцыі, без пясочніцы, і папярэджанне аб выдаленні накіроўвала людзей да
git blame — падзел
2:07 атруты. Адзін акаўнт, трыццаць: адна ўліковая запіс перавыдае крэйт, якому чвэрць мільярда загрузак давяраюць. Лічба адзін, пятнаццаць: адзін націск клавішы ад самага надзейнага крэйта Rust, і ніхто не чытае дрэва. Радыус паражэння: 2285 загрузак за 86 хвілін. Менш за дзесяць працэнтаў трафіку, бо большасць lockfiles утрымлівалі 0.3.9. crates.io кажа, што доказаў выкарыстання няма.
Радыус паражэння: 2285 загрузак
2:27 Два чалавекі ў тэме RustSec не згодныя; адзін знаходзіць службу systemd. На Hacker News галоўная тэма не пра шкоднаснае ПЗ. Гэта старонка крэйта, дзе 0.3.10 цяпер ніколі не існавала. Вердыкт, пасляаварыйны разбор: NEEDS REVIEW. Восемдзесят шэсць хвілін на выдаленне, пост у блогу ў той жа дзень, заблакіраваны акаўнт: гэтая частка - SHIP IT. Але старонка крэйта паказвае, што нічога не адбылося, cargo audit маўчыць аб кэшаванай
Вердыкт + лінія панядзелка
2:48 копіі, і скрыпты зборкі ўсё яшчэ запускаюцца ад вашага імя. Панядзелак: запусціце каманду пошуку блога Rust і разглядайце папярэджанне аб выдаленні як пытанне, а не інструкцыю. Дасылайце мне інцыдэнт, пра які вам усё яшчэ не дазволена гаварыць, у каментарах або на daily diff dot dev. І гэта ўвесь "diff" на сёння. Я Ніка з 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



