Обход проверки дубликатов в adm-zip через канонически эквивалентные имена — CVE-2026-116137
В библиотеке adm-zip до версии 0.6.1 включительно обнаружен обход проверки дублирующихся записей: специально сформированный ZIP-архив может пройти валидацию при чтении, но записать вредоносное содержимое при распаковке. Уязвимость средней критичности (CVSS 6.3) затрагивает приложения на Node.js, использующие adm-zip для обработки недоверенных архивов.
Подробности
Уязвимости подвержены версии пакета cthackers adm-zip по 0.6.1 включительно. Причина — недостаточная нормализация имён записей при проверке на дубликаты в методе readEntries(). Атакующий может включить в архив две записи с канонически эквивалентными именами, например './hello.txt' и 'hello.txt'. Для функции проверки это разные строки, поэтому дубликат не обнаруживается, однако при извлечении обе записи указывают на один и тот же путь в файловой системе. Эксплуатация строится на расхождении между этапом валидации и этапом записи: методы getEntry() или readAsText() могут вернуть или проверить безобидное содержимое, тогда как extractAllTo() запишет по тому же пути вредоносные данные. Таким образом обходятся проверки целостности, которые полагаются на предварительное чтение архива. На практике это позволяет злоумышленнику подменить файлы приложения, внедрить конфигурацию или полезную нагрузку в распакованный каталог — типичный сценарий для атак через загрузку и обработку пользовательских архивов (Zip Slip-подобный класс проблем).Что делать
Основная рекомендация — обновить adm-zip до версии, в которой устранена уязвимость (проверьте актуальный релиз в репозитории пакета). Если обновление невозможно в короткие сроки, примените компенсирующие меры: - не распаковывайте архивы из недоверенных источников без предварительной проверки; - выполняйте постобработку: после extractAllTo() проверяйте список извлечённых файлов на наличие дублирующихся путей и аномалий; - нормализуйте имена записей перед извлечением (приводите './file' и 'file' к единому виду), отклоняйте архивы с коллизиями; - изолируйте распаковку в песочнице или контейнере с ограниченными правами; - контролируйте целостность критичных файлов после распаковки. Также стоит проверить логи и артефакты обработки архивов за прошлые периоды на предмет подозрительных имён записей. Итог: CVE-2026-116137 — наглядный пример того, как расхождение между валидацией и фактической записью на диск открывает путь к обходу проверок целостности. Разработчикам на Node.js, использующим adm-zip для работы с внешними архивами, следует оперативно обновиться и усилить контроль распаковки.Источник: CVE Project (cvelistV5)
