PHP выпустила экстренные обновления, устраняющие два критических уязвимости в самом языке, позволяющие злоумышленнику без учетной записи выполнять код на веб-сервере. Исправления доступны в версиях PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Команда PHP заявляет, что только обновление полностью защищает сервер.
Уязвимости, получившие общее название PHP2Shell, находятся в среде выполнения PHP, а не в каком-либо приложении. Поэтому сайт подвергается риску, даже если его собственный код безопасен. Наибольший риск существует на серверах, использующих mod_php от Apache, где рабочий эксплойт запускает атаку до выполнения любого кода приложения.
Обе уязвимости имеют рейтинг 9.2 по шкале CVSS v4.0 и идентификаторы CVE-2026-109618 и CVE-2026-109619. PHP опубликовала их примерно в запланированное время выпуска 14:00 UTC 21 октября, через день после утечки информации перед запланированным раскрытием 22 октября.
Исследователи из Wiz, Calif и OpenAI обнаружили и сообщили об уязвимостях, которые затрагивают почти все версии PHP, начиная с PHP 5.4.
Каждая установка PHP, обслуживающая веб-запросы, подвергается риску, включая PHP-FPM, Apache mod_php, php-cgi, FrankenPHP и LiteSpeed, согласно рекомендациям по безопасности PHP.
Поскольку уязвимости находятся в движке, а не в коде сайта, даже простая страница “Hello World” на уязвимой версии PHP может быть атакована.
В рекомендациях mod_php выделяется как наиболее рискованный, с продемонстрированным эксплойтом, при котором один неаутентифицированный запрос запускает атаку до выполнения какого-либо кода приложения. PHP-FPM ведет себя иначе, поскольку он завершает работу рабочего процесса при сбое запроса на ранней стадии настройки.
Для одной из двух уязвимостей собственный анализ PHP подтверждает, что FPM подвержен риску, но заявляет, что полного эксплойта для FPM не было показано; вторая уязвимость продемонстрировала возможность выполнения кода как на mod_php, так и на PHP-FPM, хотя путь к FPM зависит от операции внутри работающего приложения.
Злоумышленник также может читать память из рабочего процесса PHP, которая может содержать пароли, токены аутентификации, ключи API и сертификаты других запросов, не получив предварительно выполнения кода.
Исследователи продемонстрировали чтение памяти рабочего процесса в реальном времени на приложениях, которые они не контролировали, что делает его независимым от приложения, работающего поверх PHP.
Обновите среду выполнения PHP, обслуживающую веб-запросы, затем перезапустите Apache, PHP-FPM и любые долгоживущие рабочие процессы PHP. Обновление приложения, такого как WordPress или Laravel, не обновляет среду выполнения PHP под ним; это происходит из пакета сервера, хоста или образа контейнера.
PHP 8.1 и более старые версии больше не получают обновлений от проекта PHP, а PHP 8.2 достигнет конца жизненного цикла 31 декабря 2026 года. Для более старых ветвей команда безопасности PHP опубликовала бэкпорты исходного кода для PHP 7.4, 8.0 и 8.1, чтобы помочь тем, кто собирает из исходного кода или ждет поставщика.
Дистрибутивы Linux и поставщики долгосрочной поддержки получили исправления заранее, поэтому пакет дистрибутива может содержать исправление под старым номером версии; проверьте журнал изменений пакета на наличие CVE, как советует Debian, а не строку версии.
Только обновление является полным решением. Меры, описанные ниже, снижают подверженность конкретным путям атаки и не делают сервер безопасным, согласно рекомендациям.
Для CVE-2026-109618 установите memory_limit=-1, чтобы приложения не могли его переопределить, поддерживайте низкое значение post_max_size и применяйте ограничения размера запроса на уровне веб-сервера или прокси. Не используйте RLIMIT_AS или RLIMIT_DATA в качестве замены, поскольку PHP предупреждает, что они могут вызвать тот же уязвимый путь.
Для CVE-2026-109619 установите session.upload_progress.enabled=0 и перезапустите каждый рабочий процесс, а в PHP 8.5 также установите fatal_error_backtraces=0. Отключение отслеживания прогресса загрузки сеанса блокирует подтвержденные пути сеанса, но не другие варианты, и никакое изменение конфигурации не смягчает эту уязвимость полностью, кроме обновления.
Эта настройка — та, которая распространялась как временное решение до исправления, и выпуск подтверждает, что это никогда не было полным решением. Отслеживание прогресса загрузки сеанса включено по умолчанию и может достичь обработки сеанса до того, как PHP завершит настройку запроса, поэтому оно участвует в одном подтвержденном пути атаки для CVE-2026-109619, и поэтому его отключение ничего не дает для CVE-2026-109618.
“Единственное, что я могу сказать, это то, что единственное смягчение — это исправление/обновление PHP. Я, к сожалению, знаю слишком много”, — написал разработчик ядра PHP Джина Питер Баньярд перед выпуском, отвечая на сообщение человека, предположившего, что этой настройки может быть достаточно.
После обновления проверьте настройки памяти. Исправление добавляет новый жесткий предел памяти, и его достижение завершает процесс и останавливает выполнение обработчиков завершения работы, поэтому проверьте memory_limit и post_max_size в соответствии с потребностями вашего приложения.
Если вы уже установили исправление, но подозреваете предыдущее вторжение, исследователи предлагают обращать внимание на необычные multipart-запросы, за которыми следуют ошибки memory-limit или повторяющиеся ответы HTTP 500, на удивление большие куки-файлы ответов PHPSESSID и необъяснимые перезапуски рабочих процессов PHP.
До выпуска исправления Cloudflare заявила, что наблюдает ранние попытки эксплуатации уязвимостей. “Мы наблюдаем появление ранних атак и обновляем средства защиты по мере появления новых векторов”, — заявил технический директор Cloudflare Дейн Кнехт , назвав правила брандмауэра Cloudflare временной мерой и призвав администраторов установить исправления.
Ни один источник не подтвердил успешное вторжение. watchTowr, которая воспроизвела CVE-2026-109618, не сообщила об эксплуатации в дикой природе по состоянию на 11:26 UTC 21 октября, и ни одна из уязвимостей на тот момент не входила в каталог CISA “Известные уязвимые уязвимости”.
Некоторые организации временно отключили службы в качестве меры предосторожности, а не в ответ на какое-либо вторжение. BambooHR отключила свой сервис в США, Канаде и Ирландии, предупредив о перебоях с выплатой заработной платы, и заявила, что еще не имеет времени восстановления.
В Нидерландах MijnOverheid, DigiD, сайт нижней палаты парламента, национальный центр кибербезопасности и несколько образовательных систем были отключены, сообщил вещатель NOS; центр заявил, что не видел злоупотребления уязвимостью, но призвал всех установить исправления.
Утечка ускорила выпуск. 20 октября, как сообщал The Hacker News, в посте на Hacker News говорилось, что две уязвимости удаленного выполнения кода PHP с двумя идентификаторами CVE должны быть раскрыты 22 октября, на основе доверенного сообщения.
PHP опубликовала предварительное уведомление вечером того же дня и перенесла выпуск на 21 октября. Заявление об оценке CVSS 10.0 не принадлежало PHP; PHP оценивает обе уязвимости в 9.2.
Уязвимости были обнаружены Wiz Research, Calif и командой Codex Security от OpenAI, работавшими с командой безопасности PHP и командой Gemini от Google над исправлением. Базовый код существовал в PHP более десяти лет.
Исследователи говорят, что модели ИИ помогли превратить эти давние уязвимости в рабочие эксплойты, позволив одному исследователю сделать за неделю то, что, по их словам, иначе заняло бы у команды месяцы.
Calif, которая отследила происхождение ошибки до исследований PHP 2004 года, заявляет, что знание истории цели по-прежнему имело значение, и что текущие модели не могут надежно начинать с неясных, двадцатилетних примитивов самостоятельно.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Swati Khandelwal




