ИБ-специалисты обнаружили серьезную уязвимость в одной из популярнейших PHP-библиотек для создания файлов PDF, TCPDF. Наряду с mPDF и FPDF эта библиотека повсеместно применяется для конвертации HTML в PDF или создания PDF-файлов «на лету». Так, TCPDF можно найти в составе многих CMS, плагинов и тем для них, CRM и HRM, во множестве веб-приложений, связанных с PDF, и так далее.
Уязвимость позволяет атакующему выполнить произвольный код на уязвимом сайте или в веб-приложении, что в теории может позволить злоумышленнику установить контроль над системой.
В сущности, эта проблема является вариацией другой уязвимости, найденной специалистом компании Secarma Сэмом Томасом (Sam Thomas). Он обнаружил баг во время тестирования различных PHP-приложений на предмет уязвимости перед новой проблемой десериализации, о которой стало известно летом 2018 года. Тогда Томас обнародовал доклад, в основном посвященный эксплуатации проблемы в контексте WordPress и Typo3, но также эксперт заметил уязвимость в библиотеке TCPDF, входящей в состав CMS Contao.
На этой неделе исследование Томаса продолжил итальянский ИБ-исследователь, скрывающийся под псевдонимом Polict. В своем блоге он описал новую проблему сериализации (CVE-2018-17057), затрагивающую TCPDF, и очень похожую на найденный экспертом Secarma баг.
По словам исследователя, проблему можно эксплуатировать двумя способами. Все сводится к тому, что библиотеке нужно передать специально «подправленные» данные, содержащие вредоносный код. В первом случае требуется, чтобы уязвимый сайт позволял пользователю участвовать в создании файла PDF, то есть давал возможность редактировать имена и прочие детали. Во втором случае нужно, чтобы сайт также был уязвим перед атаками через XSS-уязвимости, то есть атакующий должен иметь возможность поместить вредоносный код в исходный HTML, который затем обработает TCPDF.
Polict пишет, что сообщил разработчикам о проблеме еще в августе 2018 года, и уже в сентябре была выпущена исправленная версия TCPDF 6.2.20. Однако пользователям следует обновиться не до этой версии, а как минимум до 6.2.22. Дело в том, что с релизом версии 6.2.20, исправляя баг, найденный Polict, разработчики случайно вновь открыли свою библиотеку для уязвимости, описанной Томасом. В версии 6.2.22 наконец были устранены обе эти проблемы.
Исследователь отмечает, что решился рассказать о проблеме только сейчас, спустя полгода после выхода патча, из-за высокой опасности, которую представляет уязвимость. Исследователь хотел дать операторам сайтов и приложений как можно больше времени на установку обновлений.