Уязвимости в пакетном менеджере Cargo, применяемом для проектов на языке Rust

В пакетном менеджере Cargo, применяемом для управления пакетами и сборки проектов на языке Rust, выявлены две уязвимости, которые могут быть эксплуатированы при загрузке специально оформленных пакетов из сторонних репозиториев (утверждается, что пользователей официального репозитория crates.io проблема не затронула). Первая уязвимость (CVE-2022-36113) позволяет перезаписать первые два байта в любом файле, насколько это позволяют текущие права доступа. Вторая уязвимость (CVE-2022-36114) может быть использована для исчерпания свободного места на диске.

Уязвимости будут устранены в выпуске Rust 1.64, намеченном на 22 сентября. Уязвимостям присвоен низкий уровень опасности, так как похожий вред при использовании непроверенных пакетов из сторонних репозиториев может быть причинён при помощи штатной возможности запуска своих обработчиков из поставляемых в пакете сборочных скриптов или процедурных макросов. При этом вышеотмеченные проблемы отличаются тем, что их эксплуатация осуществляется на стадии раскрытия пакета после загрузки (без сборки).

В частности, после загрузки пакета cargo распаковывает его
содержимое в каталог ~/.cargo и сохраняет признак успешной распаковки в файл .cargo-ok. Суть первой уязвимости в том, что создатель пакета может разместить внутри символическую ссылку с именем .cargo-ok, что приведёт к записи текста «ok» в файл, на который указывает ссылка.

Вторая уязвимость вызвана отсутствием ограничения на размер извлекаемых из архива данных, что может использоваться для создания «zip-бомб» (в архиве могут быть размещены данные, позволяющие добиться максимальной для формата zip степени сжатия — около 28 млн раз, в этом случае, например, специально подготовленный zip-файл размером 10 МБ приведёт к распаковке около 281 ТБ данных).

Источник: http://www.opennet.ru/opennews/art.shtml?num=57787