CVE-2016-10033
PHP PHPMailer
2025-07-07
PHPMailer contains a command injection vulnerability because it fails to sanitize user-supplied input. Specifically, this issue affects the 'mail()' function of 'class.phpmailer.php' script. An attacker can exploit this issue to execute arbitrary code within the context of the application. Failed exploit attempts will result in a denial-of-service condition.
Технический анализ и план устранения
Суть уязвимости
Уязвимость CVE-2016-10033 представляет собой классический Command Injection (инъекция команд) в популярной библиотеке PHPMailer до версии 5.2.18.
Проблема кроется в недостаточной фильтрации пятого аргумента функции mail() в PHP. Этот аргумент ($params) используется для передачи дополнительных флагов в бинарный файл sendmail. Злоумышленник может передать специально сформированный адрес отправителя (поле From), содержащий дополнительные параметры, такие как -X. Это позволяет перехватить поток выполнения и записать произвольный файл (например, PHP-шелл) в веб-директорию сервера.
Пример вектора атаки через поле отправителя:
"attacker( -OQueueDirectory=/tmp -X/var/www/html/shell.php )@localhost"
Как исправить
Единственным надежным способом устранения является обновление библиотеки до безопасной версии.
- Если вы используете Composer (рекомендуется), обновите зависимость до версии 5.2.18 или выше:
composer update phpmailer/phpmailer
-
Если библиотека установлена вручную, скачайте актуальную версию из официального репозитория GitHub и замените файлы
class.phpmailer.phpиclass.smtp.php. -
После обновления убедитесь, что версия в заголовке файла соответствует актуальной:
grep "version" class.phpmailer.php
Временные меры
Если немедленное обновление невозможно, примените следующие защитные механизмы:
- Внедрите строгую валидацию email-адресов, приходящих от пользователя, перед передачей их в PHPMailer. Используйте встроенные фильтры PHP:
filter_var($email, FILTER_VALIDATE_EMAIL)
- Отключите использование функции
mail()в настройках PHPMailer, переключившись на прямую отправку через SMTP. Это исключает вызов уязвимого компонента:
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
-
Ограничьте права записи для пользователя, под которым работает веб-сервер (www-data/apache), чтобы предотвратить создание новых PHP-файлов в публичных директориях.
-
Настройте WAF (Web Application Firewall) для блокировки запросов, содержащих подозрительные символы в полях email (например, кавычки и дефисы в сочетании с параметрами
-Xили-O).