Trail of Bits Blog на русском
Подписаться
У менеджеров пакетов существует проблема целостности
Многие популярные менеджеры пакетов не обеспечивают адекватной защиты от внедрения вредоносного кода через скомпрометированные репозитории. Хотя криптографические хеши и подписи могут решить эту проблему, многочисленные менеджеры пакетов остаются уязвимыми. Менее половины из 25 протестированных менеджеров использовали файлы блокировки (lockfiles), которые по умолчанию проверяли наличие подделок, и только два проверяли целостность всех загруженных пакетов. Злоумышленники, вероятно, будут нацеливаться на репозитории пакетов, если компрометация разработчиков станет сложнее для эксплуатации. Криптографические решения сложны, и многие реализации не справляются из-за дизайнерских решений или ограниченных ресурсов. Включение криптографических хешей в файлы блокировки для проверки является распространенным подходом, но его реализация варьируется в зависимости от менеджера пакетов. Лишь немногие менеджеры, такие как Go, по умолчанию проверяли целостность пакетов, в то время как другим требовалась дополнительная настройка или отсутствовала встроенная проверка. Проверка подписей, которая избавляет от необходимости безопасного распространения хешей, также была реализована непоследовательно. Go был единственным менеджером, который по умолчанию проверял подписи, в то время как другим требовалась дополнительная настройка или отсутствовала поддержка подписей. Тестирование выявило значительные различия в криптографических дизайнах и уровнях безопасности. Для имитации атак со стороны вредоносных репозиториев был разработан тестовый стенд с использованием Docker и mitmproxy. Этот стенд динамически оценивал безопасность менеджеров пакетов против скомпрометированного сервера. HTTPS широко используется менеджерами пакетов, за исключением cpanminus, который использует незашифрованный HTTP. Хеш-функции предназначены для обеспечения целостности файлов, но проблема заключается в том, как правильный хеш передается менеджеру пакетов. Vcpkg использует предварительно вычисленные хеши содержимого, хранящиеся в его исходном коде, для проверки. Файлы блокировки являются более распространенным методом для менеджеров пакетов, чтобы узнать правильные хеши. Менеджеры пакетов, такие как Bun, npm и Cargo, используют файлы блокировки с хешами для автоматических проверок целостности. Некоторые менеджеры, такие как Pip и Conda, предлагают экспериментальную или опциональную поддержку файлов блокировки, в то время как другие, такие как Maven и Composer, не имеют выделенных файлов блокировки. Удивительно, но некоторые файлы блокировки содержат хеши, которые не предотвращают компрометацию, как, например, в Pub и pnpm, где несоответствия могут игнорироваться по умолчанию. Conan и CocoaPods используют хеши в качестве идентификаторов, а не для криптографической проверки целостности.