21 октября были раскрыты две критические уязвимости PHP — CVE-2026-109618 и CVE-2026-109619, обе с CVSS 9.2. Их эксплуатация позволяет выполнять код без аутентификации с правами веб-сервера.
Уязвимым можно считать PHP с версии 5.4. Что интересно, уязвимости были найдены с помощью нейросетей (Gemini 4 Argon + GPT-5.6 Sol), а размер патча составляет больше 10 тысяч строк кода. Читать далее
Время на прочтение4 мин
Охват и читатели0
Обзор

21 октября были раскрыты две критические уязвимости PHP — CVE-2026-109618 и CVE-2026-109619, обе с CVSS 9.2. Их эксплуатация позволяет выполнять код без аутентификации с правами веб-сервера.
Уязвимым можно считать PHP с версии 5.4. Что интересно, уязвимости были найдены с помощью ИИшек (Gemini 4 Argon + GPT-5.6 Sol), а размер патча составляет больше 10 тысяч строк кода.
Основная цель атакующего — вызвать фатальную ошибку, например Out-of-memory (OOM), в нужный момент при обработке PHP-интерпретатором входящего веб-запроса.
CVE связаны с тем, что PHP может ошибочно считать новый массив данных, который еще не успел проинициализироваться из-за ошибки OOM, проинициализированным. Это означает, что атакующий, заспамив память PHP специально подготовленными запросами, может добиться освобождения и выделения одного и того же участка памяти для разных массивов.
Как итог — у массива данных из-за ошибки OOM не успели проинициализироваться поля и указатели, в которых оказались данные из предыдущих запросов, управляемые злоумышленником. А при очистке памяти после ошибки PHP вызовет функции очистки массивов по адресам, управляемым злоумышленником. Именно поэтому эксплуатация этих двух уязвимостей требует серьезной подготовки и объемных HTTP-запросов.
Как именно происходит эксплуатацияВажно: из-за механизма рандомизации адресов ASLR атакующему необходимо добиться утечки памяти, чтобы узнать адрес функции, например,
system().
Поскольку источник уязвимости находится глубоко и связан с механизмами освобождения и выделения памяти в PHP, способов ее эксплуатации несколько.
Формы x-www-form-urlencoded
Объем выделяемой памяти в процессе PHP здесь достигается за счет большой глубины вложенности параметров формы (...[x]). PHP учитывает новый элемент массива еще до его заполнения, а копирование длинного имени при обработке HTTP-запроса может превысить memory_limit, вызывая out-of-memory.
При очистке массива PHP принимает подложенные байты за готовый элемент. Разместив поддельный массив в нужной области памяти и подставив в него адрес функции, атакующий может заставить PHP вызвать ее при очистке.
Отслеживание загрузки файлов
При multipart-загрузке с включенным при помощи параметра PHP_SESSION_UPLOAD_PROGRESS отслеживанием прогресса загрузки PHP записывает статус загрузки в сессию — хранилище данных посетителя между запросами. Множество пустых файловых полей с вложенными именами также вызывают выделение огромного объёма памяти и ошибку OOM.
После OOM память может освободиться, а указатель на неё — сохраниться. Следующий запрос через upload progress может обратиться к ней повторно — это use-after-free (UAF). Если запрос попал в тот же процесс, переживший сбой, память уже может содержать данные атакующего.
Важно: поскольку злоумышленник может влиять непосредственно на структуру данных PHP-сессии, в одном из запросов ему удается вызвать утечку памяти PHP через заголовок
Set-Cookie: PHPSESSID=, что позволяет довести эксплуатацию до выполнения команд.
Отчет о сбое в PHP 8.5.
При включенном флаге fatal_error_backtraces (включен по умолчанию) PHP сохраняет список функций, выполнявшихся в момент фатальной ошибки. После завершения запроса память списка освобождается, но указатель остается. Сообщение об ошибке в начале следующего запроса заставляет PHP обратиться к нему снова, вызывая еще один use-after-free.
Новые репорты и PoC для этих уязвимостей появляются каждый день, из-за чего создавать детекты их эксплуатации становится еще сложнее. Однако для успешной эксплуатации и выполнения вредоносного кода злоумышленнику необходимо узнать точные адреса функций (например, system).
Полный эксплойт, выполняющий вредоносный код, пока известен только для способа с параметром PHP_SESSION_UPLOAD_PROGRESS.
Сетевые артефактыУ пока еще единственной известной полноценной цепочки атаки присутствует очевидный артефакт — параметр PHP_SESSION_UPLOAD_PROGRESS в теле запроса. Об успешной эксплуатации может свидетельствовать необычно длинное значение PHPSESSID в ответе с URL-кодированными байтами памяти.
Несмотря на то что сам параметр PHP_SESSION_UPLOAD_PROGRESS может использоваться и при обычных запросах, на практике этот параметр в сетевых запросах мы не встречали.
Что известно об атакахВажно: единого обязательного сетевого маркера для всех вариантов эксплуатации нет.
Специалисты Amazon зафиксировали попытки атак еще 17 октября. После раскрытия уязвимостей число попыток атак в сети Cloudflare выросло до миллионов, по словам главы компании.
Как исправитьОбновить PHP до 8.2.35, 8.3.36, 8.4.27, 8.5.12 или более новой исправленной версии своей ветки.
До обновления снизить риск помогут следующие настройки PHP:
session.upload_progress.enabled=0 — перекрывает известные цепочки через upload progress;
fatal_error_backtraces=0 — перекрывает соответствующий путь на PHP 8.5;
ограничения размера и сложности запросов на веб-сервере или reverse proxy.
Настройки должны действовать до разбора запроса: задайте их в php.ini или конфигурации сервера.
Для CVE-2026-109618 разработчики PHP также предлагают установить memory_limit=-1 с внешними ограничениями памяти на уровне контейнера/cgroup. Это частичная мера: системный отказ выделения памяти все еще может привести к уязвимому пути.
Suricata-сигнатурыПолностью исправляет обе уязвимости только обновление PHP.
alert http any any -> any any (msg: "ATTACK [PTsecurity] Possible PHP RCE Exploitation attempt. PHP upload progress in multipart request (PHP2Shell, CVE-2026-109618, CVE-2026-109619)"; flow: established, to_server; http.content_type; content: "multipart/form-data"; startswith; nocase; http.request_body; content: "PHP_SESSION_UPLOAD_PROGRESS"; threshold: type limit, track by_src, count 1, seconds 300; reference: cve, 2026-109618; reference: cve, 2026-109619; reference: url, wiz.io/blog/php2shell-php-rce; classtype: attempted-admin; sid: 10018633; rev: 1;)
alert http any any -> any any (msg: "ATTACK [PTsecurity] Successful PHP RCE Exploitation. PHPSESSID memory leak (PHP2Shell, CVE-2026-109619)"; flow: established, to_client; http.header.raw; content: "Set-Cookie|3a|"; nocase; content: "PHPSESSID="; nocase; distance: 0; content: "%"; distance: 0; pcre: "/Set-Cookie\x3a[\x20\x09]*PHPSESSID\x3d(?:[^\x3b\x25\r\n\x20\x09]{0,64}\x25(?:[0189a-f][0-9a-f]|7f)){12}/im"; threshold: type limit, track by_dst, count 1, seconds 300; reference: cve, 2026-109619; reference: url, wiz.io/blog/php2shell-php-rce; classtype: successful-admin; sid: 10018632; rev: 3;)(Источник: https://t.me/ptescalator)
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | «Нокстюрн» начал выявлять критическую уязвимость PHP в день ее раскрытия | 0 | 13.31 | 23-10-2026 |
| 2 | «Нокстюрн» начал выявлять критическую уязвимость PHP в день ее раскрытия | 0 | 13.31 | 23-10-2026 |
| 3 | PHP2Shell: как обновить PHP через ispmanager или SSH и проверить работу сайта | -1 | 7.44 | 23-10-2026 |
| 4 | Ещё одна уязвимость в PHP, в редких конфигурациях позволяющая удалённо выполнить код | 0 | 9.23 | 23-10-2026 |
| 5 | Уязвимость PHP вызвала отключение сайтов по всему миру | -1 | 8.18 | 22-10-2026 |
| 6 | PHP2Shell: Критическая угроза для ядра php | 0 | 17.66 | 22-10-2026 |
| 7 | Две критические уязвимости PHP угрожают миллионам сайтов по всему миру | 0 | 8.75 | 21-10-2026 |
| 8 | Австралия и Новая Зеландия предупредили о критической уязвимости в языке PHP | 0 | 7.55 | 22-10-2026 |
| 9 | PHP has critical vulnerabilities impacting millions of websites, emergency patch out | 0 | 12.15 | 21-10-2026 |
| 10 | Муртазин: История с PHP показала необходимость противостоять ИИ с помощью ИИ | 0 | 7.37 | 22-10-2026 |