PHP взломали! Обороняемся

Wait 5 sec.

PHP2Shell: дыра в самом языке, из-за которой весь веб на время занервничал 21 октября команда PHP выпустила внеочередные исправления — событие само по себе редкое. Повод достойный: две критические уязвимости в ядре языка, CVE-2026-109618 и CVE-2026-109619, по 9.2 балла из 10. Исследователи назвали их PHP2Shell — «из PHP в шелл». Дыры позволяют удалённо выполнить код на сервере без логина, без пароля и без уязвимостей в вашем коде.Что случилосьОбе уязвимости — в самом интерпретаторе PHP, а не в приложениях. Сломан механизм обработки ошибок: когда запрос падает — например, из-за нехватки памяти — PHP не всегда корректно убирает за собой.Первая (109618): при исчерпании memory_limit во время разбора входящих данных PHP выпадает из контекста через longjmp(), оставляя внутренние структуры недоинициализированными. Процедура завершения запроса затем принимает этот мусор за живые данные. Мусор частично контролирует атакующий.Вторая (109619): после фатальной ошибки глобальные структуры воркера продолжают указывать на память, которая уже освобождена и отдана следующему запросу. Классический use-after-free между запросами — плюс бонусом утечка памяти процесса, где лежат чужие сессии, токены и ключи.Рабочая цепочка эксплойта требует, чтобы оба запроса попали в один и тот же воркер, и точность подстройки под раскладку памяти — но это вопрос попыток, а не принципиальная защита.МасштабPHP работает примерно на трёх четвертях веба. Затронуты все версии, начиная с 5.4 — то есть за последнее десятилетие не выпущено ни одной неуязвимой ветки. Уязвим любой сервер, который исполняет PHP и принимает HTTP-запросы: PHP-FPM, Apache mod_php (самый рискованный режим — эксплойт срабатывает до запуска кода приложения), php-cgi, FrankenPHP, LiteSpeed. Wiz Research показала готовый эксплойт против свежих контейнеров WordPress, Drupal и Joomla. Sansec подтвердила RCE на Magento и ещё десятке приложений. Даже страница «Hello World» на уязвимой версии — мишень. Читать далее