Проблема позволяет распаковать архив за пределами базового каталога и переписать важные файлы.
Специалисты команды Synk обнародовали подробности о серьезной уязвимости Zip Slip, затрагивающей открытые библиотеки на Java, JavaScript, Python, Ruby, .NET, Go и Groovy, обрабатывающие архивированные файлы. Проблема заключается в реализации процесса распаковки архивов и позволяет распаковать архив за пределами базового каталога и переписать важные файлы, такие как системные библиотеки, конфигурационные файлы сервера и пр. Уязвимость затрагивает различные форматы, включая tar, jar, war, cpio, apk, rar и 7z.
Атакующий может проэксплуатировать уязвимость с помощью специально сформированного архива, в котором в путь сохраненного в архиве файла подставлены символы "../../". При распаковке данного файла с использованием уязвимых библиотек из-за отсутствия проверки относительного пути файл будет сохранен в папку вне базового каталога распаковки архива.
По словам исследователей, проблема в основном затрагивает библиотеки на Java из-за отсутствия официально рекомендованного инструмента для обработки архивированных файлов. В связи с этим, разработчики создают множество альтернативных решений, большинство из которых подвержены Zip Slip. Распространению уязвимости способствует и тот факт, что программисты делятся фрагментами уязвимого кода на Stack Overflow, то есть, многие разработчики могут непреднамеренно представить Zip Slip в своих приложениях, написанных на Java.
Среди решений, использующих уязвимые библиотеки, указаны пакетный менеджер 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. Полный список уязвимых проектов доступен на GitHub.
Специалисты также представили видео, демонстрирующее процесс эксплуатации уязвимости:
Сбалансированная диета для серого вещества