CVE-2020-36193
PEAR Archive_Tar
2022-08-25
PEAR Archive_Tar Tar.php allows write operations with directory traversal due to inadequate checking of symbolic links. PEAR stands for PHP Extension and Application Repository and it is an open-source framework and distribution system for reusable PHP components with known usage in third-party products such as Drupal Core and Red Hat Linux.
Технический анализ и план устранения
Суть уязвимости
CVE-2020-36193 — это критическая уязвимость в библиотеке PEAR Archive_Tar (версии до 1.4.12), связанная с недостаточной проверкой путей при обработке символических ссылок (Symbolic Links) внутри tar-архивов.
Злоумышленник может создать специально сформированный архив, содержащий симлинки, которые указывают на произвольные директории в файловой системе сервера. При распаковке такого архива через компонент Tar.php происходит выход за пределы целевой директории (Directory Traversal). Это позволяет перезаписывать критически важные системные или конфигурационные файлы, что в конечном итоге может привести к удаленному выполнению произвольного кода (RCE), особенно в контексте CMS (например, Drupal), использующих данную библиотеку.
Как исправить
Основным способом устранения уязвимости является обновление библиотеки PEAR Archive_Tar до версии 1.4.12 или выше.
Вариант 1: Обновление через менеджер пакетов PEAR
Если библиотека установлена глобально через систему PEAR:
pear upgrade archive_tar
Вариант 2: Обновление через Composer (для Drupal и других PHP-проектов)
Если библиотека используется как зависимость в проекте:
composer update pear/archive_tar
Вариант 3: Обновление в составе Drupal (если применимо)
Если вы используете Drupal Core, необходимо обновиться до версий 9.1.3, 9.0.11, 8.9.13 или 7.78, в которые уже включено исправление:
composer update drupal/core-recommended --with-dependencies
Временные меры
Если немедленное обновление невозможно, рекомендуется применить следующие защитные механизмы:
-
Валидация входных данных: Внедрите строгую проверку всех загружаемых пользователями архивов. Запретите загрузку файлов с расширениями .tar, .tar.gz, .tgz, если они не являются критически необходимыми.
-
Ограничение прав процесса: Запускайте PHP-скрипты от имени пользователя с минимальными привилегиями (Principle of Least Privilege), чтобы ограничить возможность записи в системные директории (например, запрет записи в /etc, /var/www или директории с исполняемыми файлами).
-
Использование open_basedir: Настройте директиву
open_basedirв конфигурации php.ini, чтобы ограничить доступ PHP-скриптов только разрешенными рабочими директориями.
open_basedir = "/var/www/html:/tmp"
- WAF (Web Application Firewall): Настройте правила WAF для блокировки подозрительных запросов, содержащих признаки Directory Traversal (например, последовательности
../).