CVE-2026-5223: симлинки в пакетах со стороннего реестра позволяли подменить исходный код другой зависимости

25.05.2026

Cargo неправильно обрабатывал символические ссылки внутри тарболов крейтов, загруженных со сторонних реестров. Специально сконструированный пакет мог извлечь файлы на уровень выше собственного каталога кеша, а из-за устройства кеша это позволяло перезаписать кеш другого крейта того же реестра.

Почему это подмена кода, а не только запись файла

Ключевая деталь — устройство каталога кеша. Крейты одного реестра лежат рядом, и кеш каждого — соседний каталог. Запись на уровень выше собственного каталога попадает в чужой.

То есть атакующий, публикующий в своём реестре, мог подсунуть свою версию чужой зависимости. Сборка проекта, зависящего от этой зависимости, после этого собирала бы уже чужой код.

Кого это затрагивает

Средняя серьёзность, и только для пользователей сторонних реестров. На crates.io уязвимость не работает: там запрещена загрузка крейтов, содержащих симлинки.

Отдельная оговорка, важная для оценки реального ущерба: сам Cargo никогда не создавал симлинки при упаковке и публикации. Значит, опасность исходит от реестра, который допускает их у себя.

Исправление

В Rust 1.96.0 Cargo отвергает любой симлинк при распаковке — независимо от реестра. Для более старых версий смягчения нет.

Тем, кто не может обновиться, рекомендуется проверить свой реестр на симлинки и, если реестр это умеет, запретить их при загрузке.

Что делать разработчику

Пользователям сторонних реестров — обновиться до 1.96.0. Владельцам приватных реестров — проверить, допускаются ли симлинки, и запретить их: это защищает всех пользователей реестра разом.

Стоит также осмотреть каталог ~/.cargo на следы подмены, если сборка велась со старой версией Cargo.

Оригинал

Security Advisory for Cargo (CVE-2026-5223) от 25 мая 2026 года

Упоминаний: 1 · Просмотров: 3