Вразливість PHP CGI Argument Injection

Під час досліджень команда DEVCORE виявила віддалене виконання коду в PHP. Через широке використання мови програмування у вебекосистемі та легкість експлуатації, DEVCORE класифікувала її серйозність як критичну і негайно повідомила офіційну команду PHP. Офіційна команда випустила патч 06.06.2024. Дивіться деталі розкриття в хронології.

Опис

Під час впровадження PHP команда не помітила функцію Best-Fit перетворення кодування в операційній системі Windows. Цей недогляд дозволяє неавтентифікованим зловмисникам обходити попередній захист CVE-2012-1823 за допомогою специфічних послідовностей символів. Завдяки атаці ін’єкції аргументів можна виконувати довільний код на віддалених серверах PHP.

Вплив

Ця вразливість впливає на всі версії PHP, встановлені на операційній системі Windows. Дивіться таблицю нижче для деталей:

  • PHP 8.3 < 8.3.8
  • PHP 8.2 < 8.2.20
  • PHP 8.1 < 8.1.29

Оскільки гілки PHP 8.0, PHP 7 і PHP 5 є застарілими та більше не підтримуються, адміністратори серверів можуть звернутися до наступного розділу для тимчасових рекомендацій щодо патчів у розділі “Міри з пом’якшення”.

Чи є я вразливим?

Для звичайного випадку комбінацій Apache HTTP Server та PHP адміністратори серверів можуть використовувати два методи, перелічені в цій статті, щоб визначити, чи є їхні сервери вразливими. Варто зазначити, що Сценарій – 2 також є стандартною конфігурацією для XAMPP для Windows, тому всі версії установок XAMPP на Windows за замовчуванням є вразливими.

Станом на час написання цього повідомлення було підтверджено, що при роботі Windows у наступних локалях (регіональних налаштуваннях) неавторизований зловмисник може безпосередньо виконати довільний код на віддаленому сервері:

  • Традиційна китайська (Code Page 950)
  • Спрощена китайська (Code Page 936)
  • Японська (Code Page 932)

Для Windows, що працює в інших локалях, таких як англійська, корейська та західноєвропейські мови, через широкий спектр сценаріїв використання PHP наразі неможливо повністю перелічити та усунути всі потенційні сценарії експлуатації. Тому користувачам рекомендується провести комплексну оцінку активів, перевірити свої сценарії використання та оновити PHP до останньої версії для забезпечення безпеки.

Сценарій 1: Виконання PHP у режимі CGI

При налаштуваннях директиви Action для відображення відповідних HTTP-запитів до виконуваного файлу PHP-CGI в Apache HTTP Server ця вразливість може бути безпосередньо експлуатована. Звичайні налаштування, які постраждали, включають, але не обмежуються:

AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"

Або

<FilesMatch "\.php$">
	SetHandler application/x-httpd-php-cgi
</FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"

Сценарій 2: Відкриття двійкового файлу PHP

Навіть якщо PHP не налаштовано в режимі CGI, просте відкриття виконуваного файлу PHP у каталозі CGI також підпадає під вплив цієї вразливості. Звичайні сценарії включають, але не обмежуються:

  1. Копіювання php.exe або php-cgi.exe до каталогу /cgi-bin/.
  2. Відкриття каталогу PHP через директиву ScriptAlias, наприклад:
ScriptAlias /php-cgi/ "C:/xampp/php/"

Міри з пом’якшення

Всім користувачам наполегливо рекомендується оновити PHP до останніх версій 8.3.8, 8.2.20 та 8.1.29. Для систем, які не можуть бути оновлені, можна використовувати наступні інструкції для тимчасового пом’якшення вразливості. Однак, оскільки PHP CGI є застарілою та проблемною архітектурою, все ж рекомендується оцінити можливість переходу на більш безпечну архітектуру, таку як Mod-PHP, FastCGI або PHP-FPM.

Інструкції

1. Для користувачів, які не можуть оновити PHP:

Наступні правила перезапису можуть бути використані для блокування атак. Проте, потрібно звернути увагу, що ці правила є лише тимчасовим заходом для традиційних китайської, спрощеної китайської та японської локалей. Все ж рекомендується оновитися до версії з виправленням або змінити архітектуру на практиці.

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

Для користувачів, які використовують XAMPP для Windows:

XAMPP ще не випустив відповідні оновлення для цієї вразливості на момент написання цієї статті. Якщо користувач впевнений, що функція PHP CGI йому не потрібна, впливу вразливості можна уникнути, змінивши наступну конфігурацію Apache HTTP Server:

  • C:/xampp/apache/conf/extra/httpd-xampp.conf

Для цього треба знайти відповідні рядки:

ScriptAlias /php-cgi/ "C:/xampp/php/"

Та закоментувати їх:

# ScriptAlias /php-cgi/ "C:/xampp/php/"

Хронологія

  • 2024/05/07 – DEVCORE повідомила про проблему через офіційну сторінку розкриття вразливостей PHP.
  • 2024/05/07 – Розробники PHP підтвердили вразливість та наголосили на необхідності негайного виправлення.
  • 2024/05/16 – Розробники PHP випустили першу версію виправлення та попросили надати відгуки.
  • 2024/05/18 – Розробники PHP випустили другу версію виправлення та попросили надати відгуки.
  • 2024/05/20 – PHP перейшов у фазу підготовки до випуску нової версії.
  • 2024/06/06 – PHP випустив нові версії 8.3.8, 8.2.20 та 8.1.29.

Джерело: Devco.re

Підписатися на новини