Экстрений реліз PHP: дві критичні RCE-вразливості виправлено у 8.2.35–8.5.12
PHP випустив позаплановий безпековий реліз, що закриває дві критичні вразливості use-after-free в ядрі мови — обидві експлуатуються для віддаленого виконання коду без автентифікації, обидві з оцінкою 9,2 за шкалою CVSS v4.0. Виправлені версії — PHP 8.5.12, 8.4.27, 8.3.36 та 8.2.35, опубліковані сьогодні й перелічені в архіві релізів проєкту. Мінімальні бекпорти вихідного коду для давно непідтримуваних гілок 7.4, 8.0 і 8.1 доступні лише на GitHub — офіційних бінарників для них немає.
Релізу передувало надзвичайно хаотичне вікно передчасного розкриття. 20 жовтня проєкт оголосив екстрений випуск на сьогодні 14:00 UTC, не назвавши вразливих версій чи функцій; як задокументувало OX Security, скриншоти інструменту експлуатації ходили мережею ще до виходу патчів, а сам проєкт попереджав, що proof-of-concept-код, що циркулює в цьому вікні, часто виявляється замаскованим шкідливим ПЗ. Тепер, коли патчі та advisory опубліковані, технічна картина ясніша, ніж обіцяв цикл тизерів.Шлях від браку пам'яті до виконання коду
CVE-2026-109618, облікована як GHSA-w8hw-w9fx-j79w, експлуатує те, як PHP обробляє вичерпання пам'яті. Коли виділення зазнає невдачі, рушій розмотує запит через longjmp() — і якщо це сталось, коли пам'ять запиту ініціалізована лише частково, фаза завершення згодом читає або галузиться по пам'яті в недопустимому стані. Advisory описує сімейство прийомів тиску на алокатор, що роблять це досяжним зі звичайного HTTP-запиту: multipart-тіла без придатного content-length, що прослизають повз post_max_size; частини з тисячами заголовків, чиє подання в пам'яті багатократно перевищує розмір «на дроті»; порожні файлові контроли, що створюють масиви метаданих, жодного разу не враховуючись у max_file_uploads. SAPI mod_php в Apache підтверджено як експлуатований: дослідники відтворили неавтентифіковане віддалене виконання коду від імені облікового запису веб-воркера через звичайний HTTP на типових конфігураціях prefork — з високою складністю атаки та, можливо, кількома спробами. PHP-FPM вважається вразливим через специфічні для застосунку шляхи виділення; FrankenPHP та LiteSpeed — імовірно, теж. Патч замінює сирий longjmp на «м'яку» пастку браку пам'яті в найближчій безпечній точці VM плюс жорстку відмову, що негайно завершує воркер.Застарілий стан у процесах-воркерах
CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp) — тихіша сестра: процеси-воркери несуть глобальний стан — обробники помилок, дані сесій, облік об'єктів і розширень, — який може почати вказувати на пам'ять, що належить одному запиту. Якщо фатальна помилка, переривання через брак пам'яті чи пізня діагностика записують такий стан і ніщо його не скидає до звільнення пам'яті запиту, глобальні змінні воркера повисають у повітрі. Усе, що торкнеться їх до ініціалізації нового запиту, прочитає звільнену пам'ять. Підтверджено два продакшн-шляхи: фатальні трасування стека, нові в PHP 8.5, під mod_php та механізм session upload progress під mod_php і FPM. Виробник і споживач мають потрапити на той самий процес-воркер, що робить пули FPM з багатьма воркерами складнішою ціллю — але не недосяжною.Стратегічно сконструйоване розташування heap може дати повноцінне віддалене виконання коду (RCE). — Security-advisory PHP, GHSA-6wmf-4rv5-p3rp
Що адміністраторам робити зараз
Оновлення — єдиний повний захід, і це не «пропатчив і забув»: обидва advisory підкреслюють необхідність перезапустити всі PHP-воркери після оновлення, бо застарілий стан може пережити апгрейд у довгоживучих процесах. Підтримувані гілки отримують бінарники релізу; сайти, прикуті до EOL-гілок, мусять накладати вихідні бекпорти самостійно.- Оновіться до 8.2.35, 8.3.36, 8.4.27 або 8.5.12 (чи накладіть GitHub-бекпорти для 7.4/8.0/8.1), потім перезапустіть усі процеси-воркери.
- Якщо оновитися сьогодні неможливо: встановіть session.upload_progress.enabled=0 та, на PHP 8.5, fatal_error_backtraces=0, перезапустіть воркери.
- Для OOM-вразливості примусово встановіть memory_limit=-1 централізовано та перевірте, що жоден override пулу чи .htaccess не поверне скінченний ліміт.
- Тримайте консервативний post_max_size, блокуйте multipart-запити на фронтенді, якщо застосунок їх не використовує, та обмежуйте вхідні змінні, заголовки й завантаження.
- Використовуйте ліміти пам'яті контейнера/cgroup замість RLIMIT_AS чи RLIMIT_DATA — advisory прямо попереджає, що RLIMIT-механізми наштовхують збої виділення на вразливий шлях.
- Опційно обмежте рециклінг воркерів через pm.max_requests, скорочуючи вікно для перенесення стану.










