Вашият Rust проект може да е изтеглил задна вратичка в продължение на 86 минути в четвъртък. Пет версии с общо 246 милиона изтегляния бяха изтеглени от регистъра в рамките на 16 секунди, оставяйки само една компрометирана версия като последна налична.

В 07:15 UTC на 20 август нова версия на Rust пакета, наречен arrayref, се появи в crates.io. Този пакет съществува от август 2015 г. Състои се от един файл с 327 реда код, заема 9 килобайта на диска и върши една проста задача: позволява извличане на фиксиран брой байтове от по-дълъг масив. За почти 11 години той никога не е имал нужда от нищо друго за тази цел.

Версия 0.3.10 обаче беше различна. Тя съдържаше един допълнителен ред в манифеста си, изискващ зависимост с име, което се различава само с един символ от proc-macro2 – пакет с близо 1,5 милиарда изтегляния. Зловредният код не беше в самата библиотека, а в build.rs (скрипта за компилация). Тъй като кодът вътре в подвеждащия пакет беше реално копие на оригиналния, проектът ви се компилираше и всичко работеше без видими проблеми.

Атакуващият не е имал нужда да подмамва разработчиците да инсталират каквото и да било. Самите предупреждения в Cargo за оттеглени (yanked) версии накараха разработчиците автоматично да преминат към последната налична версия, която се оказа компрометираната. Скриптовете за компилация в Rust се изпълняват от Cargo на вашата машина с вашите потребителски права. Това означава, че дори само стартирането на команди като cargo check или cargo test активира зловредния код.

Скриптът за компилация сглобява уеб адрес от пет части, кодирани в Base64, за да избегне откриване от скенери за сигурност. След това той изтегля един от четири злонамерени кода в зависимост от операционната система (Linux, Windows или macOS) и архитектурата на процесора. При Windows се изтегля PowerShell задна вратичка с размер около 35 килобайта, която изпраща данни за потребителя, системата и се опитва да отвори файловете със запазени пароли на браузъри като Chrome, Brave и Edge.