CVE-2012-1823
PHP PHP
2022-03-25
sapi/cgi/cgi_main.c in PHP, when configured as a CGI script, does not properly handle query strings, which allows remote attackers to execute arbitrary code.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (также известная как PHP-CGI Argument Injection) позволяет удаленному злотеру выполнить произвольный код на сервере, если PHP используется в режиме CGI (например, php-cgi).
- Как это работает: Атакующий может внедрить параметры командной строки PHP (например,
-s,-d) прямо в строку запроса URL. - Пример эксплуатации: Отправка запроса вида
http://target/cgi-bin/php?-sможет привести к раскрытию исходного кода скрипта, а использование параметра-dпозволяет задать произвольные настройки PHP, что в конечном итоге может привести к выполнению команд оболочки.
Как исправить
Основной метод — обновление PHP до исправленной версии.
-
Для Debian/Ubuntu: ```bash # Для PHP 5.3.x (наиболее уязвимая ветка) sudo apt update sudo apt install php5-cgi # Убедитесь, что установлена версия не ниже 5.3.13 или 5.4.3
Для более новых версий (PHP 7.x, 8.x) - убедитесь, что система обновлена
sudo apt update && sudo apt upgrade ```
-
Для RHEL/CentOS/Fedora:
bash # Обновите все пакеты php sudo yum update php* # Или для систем с dnf sudo dnf upgrade php*Критические патчи: Уязвимость исправлена в версиях PHP 5.3.13 и PHP 5.4.3. Все более поздние версии (5.5, 5.6, 7.x, 8.x) не подвержены этой уязвимости. -
Для Windows: Установите последнюю версию PHP с официального сайта windows.php.net. Убедитесь, что используете версию новее 5.4.3.
Временное решение
Если немедленное обновление невозможно, примените одно из следующих решений:
-
Отключите обработчик PHP-CGI. Переключитесь на использование модуля Apache (
mod_php) или FastCGI (например,php-fpm), которые не подвержены этой уязвимости.- В Apache закомментируйте строки, связанные с
php-cgi, в конфигурации (например,AddHandler cgi-script .php).
- В Apache закомментируйте строки, связанные с
-
Настройте правила в веб-сервере (Apache/Nginx) для блокировки запросов, содержащих символы
-или%2d(дефис в URL-кодировке) в строке запроса после имени скрипта.- Пример для Apache (
.htaccessили конфиг виртуального хоста):apache RewriteEngine On RewriteCond %{QUERY_STRING} ^[^=]*[;\(\)\|\&\$\`\'\"]+.*$ [NC,OR] RewriteCond %{QUERY_STRING} (\=|\?|\&|;|\(|\)|\||\'|\"|\.)cgi-bin [NC,OR] # Блокировка запросов с дефисом в начале параметра (ключевое правило) RewriteCond %{QUERY_STRING} (^|\?|&)-[a-z] [NC] RewriteRule ^(.*)$ - [F,L]
- Пример для Apache (
-
Настройте WAF (Web Application Firewall). Добавьте правило, блокирующее запросы к
cgi-binили.php, если в строке запроса (QUERY_STRING) обнаружены последовательности, начинающиеся с дефиса (например,-d,-s). -
Ограничьте доступ. Если возможно, ограничьте доступ к CGI-скриптам (например, по IP-адресу) с помощью конфигурации веб-сервера.