Обнаружена уязвимость Zip Slip, позволяющая переписывать системные файлы

Исследователи из Snyk опубликовали доклад, описывающий уязвимость под названием Zip Slip. Ей подвержены библиотеки с открытым исходным кодом, организующие работу с архивацией файлов. Затронуты такие форматы архивов, как tar, jar, war, cpio, apk, rar и 7z.

Команда специалистов обнаружила ошибку в апреле 2018 года, а затем проводила расследование совместно с разработчиками уязвимых open source библиотек.

Как работает Zip Slip?

Согласно докладу Snyk, для работы уязвимости необходим специально созданный архив с особенными файлами внутри. Они должны содержать название с «подменой директории», например, ../../evil.sh. Такие файлы пробираются вверх по дереву каталогов, пока не достигнут корня. С помощью них злоумышленник может переписать или повредить ключевые файлы ОС путем удаленного запуска кода или встраивания вредоносного ПО.

Кроме специально созданного файла, для работы уязвимости необходим скрипт, который пропускает проверку подлинности на пути к файлу в архиве. Исследователи из Snyk приводят в пример код на Java:

   Enumeration entries = zip.getEntries();
   while (entries.hasMoreElements()) {
      ZipEntry e = entries.nextElement();
      File f = new File(destinationDir, e.getName());
      InputStream input = zip.getInputStream(e);
      IOUtils.copy(input, write(f));
   }

Кто в опасности?

Специалисты утверждают, что под угрозу атаки попали многие open source библиотеки с недостатком проверки подлинности пути к файлу. Полный список «жертв» опубликован на GitHub. Кроме того, среди подверженных проблеме проектов есть такие, как: Amazon, Linkedin, Twitter, Oracle и JetBrains.

Большинство уязвимых библиотек написаны для Java, так как для этого языка нет официально рекомендованного инструмента для работы с архивами. Вместо этого разработчики создают множество уязвимых к этой атаке альтернатив. Распространению бреши помогают ответы авторов на StackOverflow, которые делятся фрагментами уязвимого кода с другими программистами.

Подробнее о проблеме и способах нахождения уязвимости в различных проектах исследователи из Snyk написали в техническом документе. Также они опубликовали proof-of-concept архивы на GitHub и выложили демонстрационное видео уязвимости:

Эта уязвимость является не первой ошибкой в работе программ, связанных с архивацией файлов. В мае 2018 года в open source архиваторе 7zip была обнаружена уязвимость, позволяющая запустить произвольный код.

Источник: Bleeping Computer