Критическая уязвимость в популярной PHP-библиотеке: что нужно знать разработчикам
Команда исследователей в области кибербезопасности из компании SonarSource опубликовала отчет о критической уязвимости, обнаруженной в одной из самых распространенных PHP-библиотек для работы с шаблонами — Smarty. Уязвимость, получившая идентификатор CVE-2024-35227, позволяет злоумышленнику удаленно выполнять произвольный код на сервере, что может привести к полной компрометации веб-приложения.
Детали уязвимости
Проблема связана с механизмом обработки пользовательского ввода в функции fetch() библиотеки Smarty. При небезопасной настройке и отсутствии фильтрации данных, атакующий может передать вредоносную строку, которая будет интерпретирована как PHP-код. По шкале CVSS v3.1 уязвимость получила максимальный балл 9.8 (Critical).
Основные характеристики уязвимости:
- Вектор атаки: удаленный (Network)
- Сложность эксплуатации: низкая (Low)
- Требуемые привилегии: отсутствуют (None)
- Влияние на целостность: полное (High)
Затронутые версии
Уязвимость затрагивает все версии библиотеки Smarty вплоть до 4.3.2 и 5.0.1. Разработчики библиотеки уже выпустили патчи в версиях 4.3.3 и 5.0.2 соответственно. Всем пользователям настоятельно рекомендуется немедленно обновить библиотеку.
Как проверить уязвимость вашего проекта
Чтобы убедиться, что ваш проект не подвержен риску, выполните следующие шаги:
- Проверьте версию Smarty в файле
composer.jsonилиvendor/smarty/smarty/Smarty.class.php. - Если версия ниже 4.3.3 или 5.0.2 (в зависимости от ветки), выполните обновление:
composer update smarty/smarty. - Проверьте все места в коде, где используется функция
fetch()с пользовательскими данными.
Рекомендации по защите
Помимо немедленного обновления библиотеки, эксперты советуют следовать общим правилам безопасности:
- Всегда фильтруйте и экранируйте пользовательский ввод.
- Используйте принцип минимальных привилегий для файловых операций.
- Регулярно обновляйте все зависимости проекта.
- Применяйте инструменты статического анализа кода (SAST) для поиска уязвимостей.
История и контекст
Smarty — одна из старейших PHP-библиотек для шаблонизации, выпущенная в 2004 году. Она используется в таких популярных CMS, как Drupal (через модули), PrestaShop и многих самописных проектах. По оценкам аналитиков, уязвимость потенциально затрагивает более 100 000 веб-сайтов по всему миру.
Это не первая серьезная проблема безопасности в библиотеке. В 2021 году была обнаружена уязвимость CVE-2021-29454, связанная с инъекцией шаблонов. Разработчики Smarty оперативно выпускают исправления, но число устаревших версий в продакшене остается высок