Уязвимости в tar-fs и 7-zip позволяют распаковывать файлы вне целевой директории

Исследователи в области кибербезопасности обнаружили серьёзные уязвимости в популярных инструментах для работы с архивами — NPM-пакете tar-fs и архиваторе 7-Zip. Проблемы безопасности позволяют злоумышленникам при определённых условиях записывать файлы за пределами целевого каталога распаковки, что открывает дорогу к потенциальному выполнению вредоносного кода и компрометации системы.

В tar-fs выявлена критическая уязвимость (CVE-2025-48387), которая позволяет при распаковке специально сформированного tar-архива размещать файлы вне ограниченного рабочего каталога. Это означает, что если пользователь запускает распаковку такого архива, то файлы могут быть записаны в любую директорию, доступную текущему пользователю, включая системные папки или домашнюю директорию.

На практике это может привести к перезаписи важных конфигурационных или пользовательских файлов. Например, атакующий может заменить файл ~/.bashrc или закрытый ключ SSH (~/.ssh/id_rsa), что позволяет получить контроль над системой или организовать перехват данных.

Особую обеспокоенность вызывает широкое распространение tar-fs: еженедельно он загружается более 23 миллионов раз и используется как зависимость в свыше тысячи проектов. Несмотря на то что патчи были выпущены ещё в мае (версии 3.0.9, 2.1.3 и 1.16.5), публичная информация об уязвимости появилась только спустя три месяца. Это увеличивает вероятность того, что проблема могла быть использована злоумышленниками до публикации исправлений.

Уязвимость основана на некорректной обработке символических и жёстких ссылок в архиве. Злоумышленник может создать цепочку ссылок, обходящую ограничения пути: первая символическая ссылка указывает на текущий каталог (например, "noop/noop/noop" указывает на "."), а вторая — использует конструкцию "../", позволяющую выйти за пределы базового пути. В результате распаковка файла может происходить в произвольное место файловой системы. Жёсткие ссылки при этом дают возможность перезаписать конкретные файлы, заранее известные злоумышленнику.

Аналогичная проблема (CVE-2025-55188) обнаружена и в архиваторе 7-Zip — одном из самых популярных инструментов для работы с архивами на Windows и других платформах. Уязвимость позволяет при распаковке использовать символические ссылки с относительными путями ("../"), выходящими за пределы указанной пользователем директории. Это делает возможным запись файлов в произвольные части файловой системы, если архив содержит соответствующую структуру.

Уязвимость затрагивает целый ряд форматов архивов, поддерживающих символические ссылки: .zip, .tar, .7z, .rar и другие. Проблема была устранена в версии 7-Zip 25.01, и всем пользователям рекомендуется как можно скорее обновиться.

Важно понимать, что эти уязвимости возникают не просто из-за "плохой обработки путей", а из-за отсутствия строгой валидации и нормализации путей при распаковке. Когда архив содержит ссылки или пути, выходящие за пределы текущего каталога, распаковщик должен строго проверять, не нарушает ли это безопасность пользователя. Однако многие архиваторы либо не делают таких проверок вовсе, либо делают их неполноценно.

В отличие от GUI-архиваторов, таких как WinRAR или 7-Zip с графическим интерфейсом, консольные или библиотечные инструменты часто применяются в автоматических процессах, где пользователь не контролирует вручную, куда именно происходит распаковка. В таких сценариях даже одна ошибка в обработке пути может привести к серьёзным последствиям.

Некоторые разработчики считают, что ответственность за безопасность лежит на вызывающем коде: мол, если вы передали путь функции для перемещения файла, то должны сами позаботиться о его корректности. Однако практика показывает, что именно библиотека или инструмент, работающий с архивами, должен брать на себя функцию валидации путей. Архиватор обязан убедиться, что файл при распаковке не может "вырваться" за пределы указанной директории.

Эксплуатация таких уязвимостей может быть тривиальной: злоумышленник может просто отправить специально подготовленный архив, и при его распаковке файлы окажутся не там, где ожидалось. Это особенно опасно в ситуациях, когда архивы автоматически обрабатываются сервером или CI/CD-пайплайном.

Безопасная реализация архиваторов должна включать:

- Жёсткую нормализацию путей внутри архива.
- Игнорирование или удаление символических ссылок, содержащих "../".
- Проверку на выход за пределы целевого каталога после распаковки.
- Возможность отключения обработки символических или жёстких ссылок.
- Уведомление пользователя о подозрительных структурах в архиве.

Также важно напомнить, что даже доверенные архивы могут стать вектором атаки, если были перехвачены или модифицированы. Поэтому автоматическая обработка архивов без предварительной валидации всегда несёт риски.

Для разработчиков, применяющих библиотеки наподобие tar-fs или 7-Zip в своих проектах, важно убедиться, что используется последняя версия с исправлениями. Также рекомендуется внедрять меры защиты на уровне приложений, например, использовать песочницы (sandboxing), ограничивать права доступа и проверять содержимое архивов перед распаковкой.

Безопасность программного обеспечения начинается с внимательного отношения к деталям. Даже такая, казалось бы, рутинная задача, как распаковка архива, может обернуться серьёзной угрозой, если не учитывать возможные уязвимости в инструментах.

Прокрутить вверх