Уязвимость в библиотеке PharStreamWrapper, затрагивающая Drupal, Joomla и Typo3

В библиотеке PharStreamWrapper, предоставляющей обработчики для защиты от проведения атак через подстановку файлов в формате «Phar», выявлена уязвимость (CVE-2019-11831), позволяющая обойти защиту от десериализации кода через подстановку символов «..» в пути. Например, атакующий может использовать для атаки URL вида «phar:///path/bad.phar/../good.phar» и библиотека выделит при проверке базовое имя «/path/good.phar», хотя при дальнейшей обработке подобного пути будет использован файл «/path/bad.phar».

Библиотека разработана создателями CMS TYPO3, но также применяется в проектах Drupal и Joomla, что делает их также подверженными уязвимости. Проблема устранена в выпусках PharStreamWrapper 2.1.1 и 3.1.1. Проект Drupal устранил проблему в обновлениях 7.67, 8.6.16 и 8.7.1. В Joomla проблема проявляется начиная с версии 3.9.3 и устранена в выпуске 3.9.6. Для устранения проблемы в TYPO3 требуется обновить библиотеку PharStreamWapper.

С практической стороны уязвимость в PharStreamWapper позволяет пользователю Drupal Core, имеющему полномочия администратора тем оформления (‘Administer theme’), загрузить вредоносный phar-файл и добиться выполнения размещённого в нём PHP-кода под видом легитимного phar-архива. Напомним, что суть атаки «Phar deserialization» в том, что при проверке загруженных файлов при помощи PHP-функции file_exists(), эта функция автоматически выполняет десериализацию метаданных из файлов Phar (PHP Archive) при обработке путей, начинающихся с «phar://». Передача phar-файла возможна под видом картинки, так как функция file_exists() определяет MIME-тип по содержимому, а не по расширению.

Источник: http://www.opennet.ru/opennews/art.shtml?num=50665