Уязвимость Zip Slip, затрагивающая библиотеки для распаковки архивов
5 июня 2018 года
Раскрыты сведения об уязвимости Zip Slip, которая позволяет переписать или сохранить файлы за пределами базового каталога при распаковке архивов с использованием функций распаковки, предоставляемых различными библиотеками на Java, JavaScript, .NET и Go. В анонсе достаточно много PR и заметно преувеличена степень новизны проблемы и степени её опасности, в то время как уязвимость по сути повторяет проблемы, устранённые 10-20 лет назад в штатных утилитах распаковки архивов, перенося их на современные фреймворки.
Суть уязвимости в том, что можно подготовить модифицированный архив (tar, jar, war, cpio, apk, rar или 7z), в котором подставить в путь сохранённого в архиве файла символы "../../". При распаковке данного файла с использованием уязвимых библиотек из-за отсутствия проверки относительного пути файл будет сохранён в каталог вне базового каталога распаковки архива. В большинстве случаев уязвимость в библиотеках сводится к тому, что они допускают вывод путей с "../../" при выполнении перебора содержимого модифицированного архива. Сама уязвимость касается больше конечных приложений, в которых подобные пути не проверяются перед записью файлов.
Таким образом при открытии модифицированного архива в подобных приложениях можно переписать любой файл текущего пользователя в системе, насколько это позволяют права доступа. Для совершения атаки злоумышленник должен знать текущий каталог, относительно которого выполняется распаковка. Теоретически проблема представляет опасность для различных типовых web-сервисов и продуктов, которые принимают в качестве входных данных архивы и автоматически распаковывают их.
Среди библиотек и приложений, в которых подтверждена проблема, упоминаются Java-компоненты zip4j, zt-zip и Plexus-archiver (исправлено в 3.6.0), JavaScript-модули Unzipper (0.8.13) и Adm-zip (0.4.9), .NET-библиотеки DotNetZip.Semverd (библиотека распаковки из .NET Core не подвержена проблеме), SharpZipLib и SharpCompress (0.21.0), mholt/archiver на языке Go ( патч). Уязвимых библиотек на Python и Ruby не обнаружено так как в библиотеках Python аналогичные проблемы были устранены в 2014 году, а в библиотеках Ruby archive-tar-minitar, minitar и rubyzip в 2016 году. В Oracle java.util.zip и Apache commons-compress в реализации API уязвимостей нет, но были некорректные примеры в документации.
Среди продуктов, в которых использовались уязвимые библиотеки, отмечаются пакетный менеджер npm, платформа Google Cloud, продукты Oracle, Amazon CodePipeline, AWS Toolkit for Eclipse, IBM DataPower, Alibaba JStorm, Twitter Heron, Apache Storm, Apache Hadoop, Apache Ant, Apache Maven, Apache Hive, HP Fortify Cloud Scan Jenkins Plugin, OWASP DependencyCheck. Примечательно, что в 2015 году аналогичная проблема при обработке zip-файлов в SwiftKey применялась для получения root-доступа к смартфонам Samsung Galaxy S4, S4 Mini, S5 и S6.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.