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.

Временное решение

Если немедленное обновление невозможно, примените одно из следующих решений:

  1. Отключите обработчик PHP-CGI. Переключитесь на использование модуля Apache (mod_php) или FastCGI (например, php-fpm), которые не подвержены этой уязвимости.

    • В Apache закомментируйте строки, связанные с php-cgi, в конфигурации (например, AddHandler cgi-script .php).
  2. Настройте правила в веб-сервере (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]
  3. Настройте WAF (Web Application Firewall). Добавьте правило, блокирующее запросы к cgi-bin или .php, если в строке запроса (QUERY_STRING) обнаружены последовательности, начинающиеся с дефиса (например, -d, -s).

  4. Ограничьте доступ. Если возможно, ограничьте доступ к CGI-скриптам (например, по IP-адресу) с помощью конфигурации веб-сервера.