
Неофициальные патчи для PHP CVE-2026-109618 / CVE-2026-109619 (RCE, CVSS 9.2) на платформах с истёкшим сроком поддержки: PHP 7.3 на CentOS/RHEL 7 (Remi), PHP 5.4 на Amazon Linux 2, PHP 5.3 на Amazon Linux 1
Неофициальные бэкпорты минимальной меры защиты от команды безопасности PHP для двух критических уязвимостей удалённого выполнения кода без аутентификации, объявленных 2026-10-21:
| CVE | Рекомендация | Краткое описание |
|---|---|---|
| CVE-2026-109618 | GHSA-w8hw-w9fx-j79w | RCE через повреждение памяти при исчерпании памяти (CVSS 4.0: 9.2) |
| CVE-2026-109619 | GHSA-6wmf-4rv5-p3rp | RCE через устаревшее глобальное состояние (CVSS 4.0: 9.2) |
В upstream исправлены PHP 8.2.35, 8.3.36, 8.4.27 и 8.5.12, а также опубликованы минимальные меры защиты только в виде исходного кода для 7.4, 8.0 и 8.1. Для перечисленных ниже платформ исправление не публикует никто, поэтому этот репозиторий предоставляет патчи и воспроизводимые скрипты сборки для них.
Не связан с PHP Group, Remi Collet или Amazon. Без каких-либо гарантий. Прочитайте Ограничения перед развёртыванием.
php7.3 7.3.33-35 для Debian/Ubuntu от Sury содержит отдельный порт того же upstream-коммита для 7.3. Патч для EL7 здесь изменяет те же 17 файлов, а основные изменения построчно идентичны (подробности в docs/TESTING.md).tests/verify.sh сообщил PATCHED для каждой из них.| Ваша система | Источник пакета PHP | Что использовать |
|---|---|---|
| CentOS 7 / RHEL 7 | Remi php73 (например, php-7.3.33-14.el7.remi) | patches/php-7.3.33-remi22-el7-… + build/el7-php73/build.sh |
| Amazon Linux 2 | Amazon php-5.4.16-46.amzn2.* | patches/php-5.4.16-amzn2-… + build/amazon-linux/build.sh amzn2 |
| Amazon Linux 1 (AMI 2017.03 / 2018.03) | Amazon php-5.3.29-1.8.amzn1 | patches/php-5.3.29-amzn1-… + build/amazon-linux/build.sh amzn1 |
| Ubuntu / Debian с PPA Sury, PHP 7.3 / 7.4 / 8.0 / 8.1 | deb.sury.org | Ничего отсюда. Обновитесь до Sury 7.3.33-35, 7.4.33-31, 8.0.30-25 или 8.1.34-9 (или более поздних). Они уже содержат исправление (debian/patches/*-Avoid-state-corruption-via-bailout.patch), хотя в их changelog'ах CVE не упоминаются. |
Дистрибутивный php8.3 в Ubuntu 24.04 | Архив Ubuntu | Обновитесь до 8.3.6-0ubuntu0.24.04.13 или более поздней версии. |
| PHP 8.2 или новее из любого источника | — | Обновитесь до 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 или более поздней версии. |
Требуется Docker на машине сборки (любая ОС). Сборки выполняются полностью внутри контейнеров целевого дистрибутива, поэтому полученные RPM устанавливаются обычной командой yum localinstall.
git clone https://github.com/leonlai-tw/php-eol-cve-2026-109618-109619.git
cd php-eol-cve-2026-109618-109619
# CentOS 7 / RHEL 7 + Remi PHP 7.3 -> ./work-el7/out/
build/el7-php73/build.sh
# Amazon Linux 2 + PHP 5.4 -> ./work-amzn2/out/
build/amazon-linux/build.sh amzn2
# Amazon Linux 1 + PHP 5.3 -> ./work-amzn1/out/
build/amazon-linux/build.sh amzn1
Полученные пакеты имеют версию <vendor version>.cvefix1 (например,
php-7.3.33-22.cvefix1.el7, php-5.4.16-46.amzn2.0.7.cvefix1), поэтому они всегда сортируются как более новые, чем
заменяемый ими пакет поставщика.
Установите только те пакеты, которые у вас уже есть, затем перезапустите PHP:
# on the target host, inside the directory holding the built RPMs
yum localinstall $(for p in $(rpm -qa 'php*' --qf '%{NAME}\n'); do ls ${p}-[0-9]*.cvefix1*.rpm 2>/dev/null; done)
systemctl restart php-fpm # or: apachectl graceful (mod_php)
Долго работающие PHP-процессы (Swoole/Octane, обработчики очередей, демоны cron) также необходимо перезапустить; иначе они продолжат работать со старым бинарным файлом.
rpm -q php-cli # must end in .cvefix1
tests/verify.sh # prints PATCHED / NOT PATCHED
tests/verify.sh запускает один процесс CLI с ограничением памяти 16 МБ и проверяет наблюдаемое поведение минимальной
меры защиты: при нехватке памяти процесс завершается с кодом 1 без
выполнения функций завершения (непропатченный PHP завершается с кодом 255 и выполняет их).
Чтобы убедиться, что работающий PHP-FPM использует новый бинарный файл:
p=$(pgrep -o -f 'php-fpm: master'); sha256sum /proc/$p/exe /usr/sbin/php-fpm # hashes must match
Та же схема, что и в upstream-коммите 712e60f9ed
("Avoid state corruption via bailout", ветка PHP-7.4-CVE-2026-109618-109619):
_exit(1); PHP-FPM / Apache
запускают новый worker. То же самое относится к ошибкам "Possible integer overflow in memory
allocation".Content-Disposition и Content-Type и
игнорирует дубликаты, поэтому небольшой запрос больше не может заставить PHP выделить огромные объёмы памяти.session.upload_progress отключён (подтверждённый источник для CVE-2026-109619).modules_activated, состояние обработки
исключений/ошибок исполнителя, головы связных списков), поэтому
следующий запрос не может наблюдать освобождённое состояние.Подробности по файлам и о том, как был выполнен каждый перенос: docs/PROVENANCE.md. Результаты тестов: docs/TESTING.md.