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

Временные меры

Если немедленное обновление невозможно, рекомендуется применить следующие защитные механизмы:

  1. Валидация входных данных: Внедрите строгую проверку всех загружаемых пользователями архивов. Запретите загрузку файлов с расширениями .tar, .tar.gz, .tgz, если они не являются критически необходимыми.

  2. Ограничение прав процесса: Запускайте PHP-скрипты от имени пользователя с минимальными привилегиями (Principle of Least Privilege), чтобы ограничить возможность записи в системные директории (например, запрет записи в /etc, /var/www или директории с исполняемыми файлами).

  3. Использование open_basedir: Настройте директиву open_basedir в конфигурации php.ini, чтобы ограничить доступ PHP-скриптов только разрешенными рабочими директориями.

open_basedir = "/var/www/html:/tmp"

  1. WAF (Web Application Firewall): Настройте правила WAF для блокировки подозрительных запросов, содержащих признаки Directory Traversal (например, последовательности ../).