CVE-2026-5222: нормализация адресов реестров позволяла перехватить токен Cargo

25.05.2026

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

Откуда взялась ошибка

Правила нормализации унаследованы от протокола git. Адрес вида https://example.com/index считался тем же, что и https://example.com/index.git, и учётные данные передавались между ними.

Для git это верно: такое поведение нужно. Для разреженного индекса, который хостится на любом обычном сервере, — нет. Такой сервер различает эти два адреса, и считать их одним — ошибка.

Условия атаки

Их нужно четыре одновременно:

  • разреженный индекс расположен по адресу без суффикса .git;
  • проект зависит от крейтов и из этого реестра, и из других;
  • у атакующего есть права на публикацию в своём реестре;
  • у атакующего есть возможность загрузить файлы в вариант с суффиксом .git.

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

Исправление

В Rust 1.96 суффикс .git отбрасывается только для протокола git. Смягчений для более старых версий нет.

Практическая рекомендация из объявления: стоит проверить, не раздаёте ли вы сами разреженный индекс на хостинге, где тот же домен обслуживает другие пути. Связка «реестр плюс путь с .git на том же домене» — ровно то, что использовал атакующий.

Оригинал

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

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