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