CVE-2020-28949

PEAR Archive_Tar

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2022-08-25

Официальное описание

PEAR Archive_Tar allows an unserialization attack because phar: is blocked but PHAR: is not blocked. 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-28949 связана с недостаточной фильтрацией потоковых оберток (stream wrappers) в библиотеке PEAR Archive_Tar. Проблема заключается в том, что механизм защиты блокировал использование протокола phar:// для предотвращения атак типа PHP Object Injection через десериализацию метаданных, однако проверка была регистрозависимой.

Злоумышленник мог обойти фильтр, используя верхний регистр — PHAR://. Если приложение позволяет пользователю передавать путь к файлу, который затем обрабатывается Archive_Tar, атакующий может инициировать десериализацию произвольных объектов, что ведет к удаленному выполнению кода (RCE). Данная уязвимость критична для систем, использующих Archive_Tar, включая Drupal Core.

Как исправить

Основным способом устранения является обновление библиотеки PEAR Archive_Tar до версии 1.4.12 или выше, где проверка протоколов стала регистронезависимой.

Вариант 1: Обновление через менеджер пакетов PEAR

pear upgrade archive_tar

Вариант 2: Обновление в проектах на базе Composer (например, Drupal)

composer update drupal/core-recommended --with-dependencies

Или обновление конкретного пакета:

composer update pear/archive_tar

Вариант 3: Проверка текущей версии

pear list | grep Archive_Tar

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

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

  1. Настройка WAF (Web Application Firewall): добавьте правило для блокировки любых входящих данных, содержащих строку PHAR:// (в любом регистре) в параметрах запросов.
  2. Валидация путей: внедрите строгую проверку имен файлов на стороне приложения. Запретите использование любых схем протоколов (Stream Wrappers) в путях, передаваемых в методы Archive_Tar.
  3. Отключение функций: если функционал обработки архивов пользователями не является критическим, временно отключите соответствующие модули или функции в коде приложения.
  4. Обновление PHP: убедитесь, что используемая версия PHP имеет актуальные патчи, ограничивающие автоматическую десериализацию в phar-архивах (актуально для PHP 7.3.14+, 7.4.2+).