cargo install стал собирать с зафиксированными зависимостями
21.08.2026При установке инструмента из реестра Cargo теперь использует приложенный файл блокировок. Если файла нет, зависимости фиксируются по месту.
Что это закрывает
Файл блокировок фиксирует версии зависимостей на момент сборки. Без него Cargo выбирает самые новые подходящие версии — а значит, состав установленного инструмента определяется тем, что лежит в реестре в момент запуска.
Это канал атаки на цепочку поставок. Злоумышленник не обязан взламывать реестр: достаточно выпустить новую версию зависимости, и инструмент, который кто-то установил сегодня, соберётся с ней. Если зависимость опубликована в ту же минуту, злоупотребление не будет замечено даже при последующей проверке.
Почему раньше было иначе
Сборка в рабочем каталоге всегда использовала файл блокировок, а установка инструмента — игнорировала, если он не указан явно. Разница была исторической: установка рассматривалась как разовое действие, а не как сборка проекта.
Что это меняет на практике
Инструмент, установленный сегодня, собирается с теми же версиями зависимостей, что и в момент публикации файла блокировок. Состав можно проверить заранее и повторить сборку.
Второй эффект важнее: публикация новой версии зависимости перестаёт менять то, что вы устанавливаете. Это снимает целый класс неожиданных изменений без всякой явной защиты со стороны пользователя.
Оригинал
install cargo tools with locked dependencies; уточнение — rust-lang/cargo#17388
Упоминаний: 1 · Просмотров: 3