К содержимому журнала

Инфраструктура

Критические уязвимости PHP: как проверить и обновить Битрикс

CVE-2026-109618 и CVE-2026-109619: исправленные версии PHP, проверка веб-процессов, обновление Битрикс24 и 1С-Битрикс, команды и критерии приёмки.

Две терракотовые вставки закрывают швы в светлой керамической стене: исправление двух уязвимостей серверного слоя.
Содержание

Сайт открывается, заказы приходят, обновления Битрикс установлены. Это ещё не говорит, что сервер защищён: приложение и исполняющий его PHP обновляются разными механизмами. В октябрьском инциденте ошибка находится именно в PHP. Поэтому привычная кнопка обновления CMS не закрывает задачу.

21 октября 2026 года команда PHP объявила о выпуске исправлений двух критических уязвимостей — CVE-2026-109618 и CVE-2026-109619. Они могут привести к выполнению кода на сервере без авторизации. На 23 октября исправления уже доступны; ждать обозначенных в первоначальной рассылке «17:00» больше не нужно. Ниже — порядок действий для владельца проекта и администратора, с отдельными примерами для PHP-FPM, Apache и контейнеров.

Что произошло: две уязвимости PHP и выполнение кода до приложения #

Первую ошибку удобнее понимать через незавершённую инициализацию. PHP начал готовить данные запроса, столкнулся с нехваткой памяти и прервал работу. На этапе очистки внутренние структуры могут быть обработаны так, будто они уже корректно заполнены. Это повреждение памяти, а не обычная ошибка валидации формы. Подробности опубликованы в уведомлении PHP о CVE-2026-109618 .

У второй ошибки другой жизненный цикл: один запрос оставляет во внутренних полях процесса ссылку на уже освобождённую память. Следующий запрос попадает в тот же процесс и обращается к этому состоянию раньше, чем обычная инициализация успеет его сбросить. Условия зависят от конфигурации и затронутого внутреннего состояния — это разобрано в уведомлении PHP о CVE-2026-109619 .

Два разных механизма — одна обязательная задача обновления
УязвимостьГде возникает проблемаПрактический вывод
CVE-2026-109618Обработка нехватки памяти и очистка частично подготовленных данных запросаПроверка входных данных внутри CMS не исправляет ошибку интерпретатора
CVE-2026-109619Состояние предыдущего запроса остаётся доступным после освобождения его памятиНастройки сессий закрывают лишь часть известных путей, а не всю ошибку

В сообщении команды PHP отдельно выделен высокий риск для Apache с mod_php: подтверждён сценарий до исполнения прикладного кода. PHP-FPM и другие способы обработки веб-запросов тоже требуют проверки и обновления. Нельзя сделать вывод «у нас nginx, значит проблема не касается»: nginx может передавать запросы уязвимому PHP-FPM.

Пароль администратора и фильтр внутри приложения остаются нужными механизмами, но не служат доказательством защиты от ошибки, срабатывающей до приложения. По той же причине отсутствие открытой регистрации или отдельной формы загрузки не даёт оснований оставить сервер без патча.

Какие версии PHP исправлены #

Первые исправленные выпуски поддерживаемых веток PHP
ВеткаПервый исправленный выпускКак применять
PHP 8.28.2.35Исправленный выпуск этой ветки либо более новый совместимый выпуск
PHP 8.38.3.36Обновление в текущей ветке с проверкой расширений и приложения
PHP 8.48.4.27Исправленный выпуск, совместимый с установленной редакцией продукта
PHP 8.58.5.12Не выбирать ветку только потому, что номер выше: сначала совместимость

Версии исправлений подтверждены журналом изменений PHP . Для пакетов Linux важен ещё и выпуск сборки: поставщик может перенести патч в свою поддерживаемую версию, не меняя её номер до upstream-значения из таблицы. Поэтому сравнение строки 8.3.x с таблицей — полезная проверка, но не окончательное заключение. Нужны номер пакета и бюллетень поставщика с подтверждением исправления обеих CVE.

Для PHP 7.4, 8.0 и 8.1 команда PHP предоставила минимальные исправления исходного кода, хотя эти ветки уже не получают обычную поддержку проекта. Это не означает, что установленный старый пакет автоматически стал безопасным. Нужна подтверждённая исправленная сборка от вашего поставщика либо согласованный переход на поддерживаемую ветку. Сам факт существования патча в репозитории исходников ничего не говорит о сервере магазина.

Битрикс24 в облаке, коробка и сайт: кто обновляет PHP #

Распределение ответственности
ОкружениеКто управляет PHPЧто попросить или проверить
Облачный Битрикс24Команда облачного сервисаОфициальные сообщения о работах и доступности функций; свою CRM на чужом сервере обновлять не требуется
Коробочный Битрикс24Владелец инфраструктуры или обслуживающий подрядчикСборку PHP, все веб-узлы, перезапуск процессов и ключевые операции CRM
Сайт на 1С-Битрикс у хостингаХостинг управляет пакетами, клиент — выбором окружения в пределах панелиКакую сборку использует конкретный домен и включены ли оба исправления
BitrixVM или собственный VPSАдминистратор сервераОС, источник пакетов, способ подключения PHP и совместимость модулей
Приложение в контейнерахКоманда, собирающая и развёртывающая образИсправленный образ, пересозданные экземпляры и проверку каждого работающего узла

Разъяснение Битрикс24 разделяет облако и собственные серверы: для коробки PHP обновляется отдельно от продукта. Не следует переносить временные ограничения облака из сообщения от 21 октября на текущий момент без нового подтверждения. Для своей инфраструктуры задача конкретнее: установить патч и подтвердить, что запросы выполняет уже исправленная сборка.

Как узнать версию PHP на сайте: CLI и веб-процесс — разные проверки #

Начать удобно с консоли. Команда покажет доступный в текущем окружении CLI-интерпретатор, перечень ini-файлов и расширений. Это инвентаризация, а не итог проверки сайта: у заданий cron, одного домена и соседнего домена могут быть разные бинарные файлы и конфигурации.

inventory-cli.shShell
# Только чтение: CLI-версия, конфигурация и модули
command -v php
php -v
php --ini
php -m

# Службы PHP-FPM на системе с systemd
systemctl list-units --type=service --all 'php*fpm*'

Затем проверяют именно тот PHP, которому веб-сервер передаёт запросы этого сайта. Для FPM находят сокет или адрес в конфигурации виртуального хоста, затем соответствующий пул. При mod_php смотрят загруженный модуль Apache. При нескольких сайтах одной команды php -v на сервере недостаточно.

Для контролируемой проверки можно временно использовать небольшой диагностический обработчик. Его размещают только за уже настроенным ограничением доступа — например, в служебном location с допуском администратора по IP. Имя файла не является защитой. После проверки обработчик удаляют; публиковать открытый phpinfo() не требуется.

runtime-check.phpPHP
<?php
// Только для закрытого служебного URL. Удалить после проверки.
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');

$runtime = [
    'php_version' => PHP_VERSION,
    'sapi' => PHP_SAPI,
    'loaded_ini' => php_ini_loaded_file(),
    'scanned_ini' => php_ini_scanned_files(),
    'upload_progress' => ini_get('session.upload_progress.enabled'),
];

if (PHP_VERSION_ID >= 80500) {
    $runtime['fatal_error_backtraces'] = ini_get('fatal_error_backtraces');
}

echo json_encode($runtime, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

PHP_VERSION и PHP_SAPI описывают процесс, исполнивший этот запрос. Функции ini показывают, откуда он прочитал настройки. Это помогает найти распространённое расхождение: в консоли уже новая версия, но домен продолжает работать через другой FPM-пул. Смысл SAPI и списка дополнительных ini-файлов описан в документации PHP.

Обновление PHP в Битрикс: сначала пакет и совместимость, затем перезапуск #

Экстренное исправление в используемой ветке и переход на другую ветку — разные объёмы работ. Во время инцидента сначала ищут совместимую исправленную сборку текущего окружения. Если проект работает только на неподдерживаемой ветке, отдельно решают задачу поставщика патча или миграции. Автоматически переключать репозиторий на PHP 8.5 из-за большего номера — плохой способ чинить безопасность.

До изменения сохраняют конфигурацию, перечень пакетов и резервную копию данных, проверяют возможность восстановления. На тестовой копии проходят хотя бы авторизацию, работу с файлами и основной бизнес-сценарий. Важно заранее определить, кто принимает решение при сбое. Возврат старого уязвимого образа может восстановить работу, но одновременно вернуть угрозу; это не приемлемый постоянный итог.

RHEL-подобная система и BitrixVM: проверьте источник сборки #

Для окружения с DNF сначала смотрят установленное и доступное. Команды ниже ничего не устанавливают: последняя показывает предполагаемую транзакцию и отказывается от выполнения. В окружениях с параллельными ветками названия пакетов могут отличаться, например иметь префикс; подставлять обычные имена без инвентаризации нельзя.

inspect-rpm-packages.shShell
rpm -qa 'php*' | sort
dnf --showduplicates list php php-cli php-common php-fpm
dnf updateinfo info --cves CVE-2026-109618,CVE-2026-109619
dnf --assumeno upgrade 'php*'

DNF может не показать отдельный бюллетень, даже когда нужный пакет есть: это зависит от метаданных репозитория. Документация Red Hat по security advisories объясняет работу updateinfo. Отсутствие записи не заменяет проверку поставщика, а сообщение «обновлений нет» не доказывает безопасность.

Установку выполняют после проверки состава транзакции и подтверждения наличия патча. Все используемые расширения должны остаться совместимыми. В BitrixVM учитывают её версию и принятую схему сопровождения, а не смешивают инструкции для разных поколений окружения. Здесь намеренно нет универсальной команды смены репозитория: она зависит от установленной системы.

Debian или Ubuntu: выберите пакеты той ветки, которая обслуживает сайт #

В примере используется ветка 8.3. Для другой ветки меняются имена пакетов, расширений и службы. Сначала проверяют доступный выпуск и симуляцию, затем администратор устанавливает подтверждённую исправленную сборку из согласованного источника. Эти команды не добавляют новые репозитории.

inspect-deb-packages.shShell
dpkg-query -W 'php*'
apt-cache policy php8.3-fpm php8.3-cli php8.3-common
apt-get --simulate install --only-upgrade php8.3-fpm php8.3-cli php8.3-common

Список из трёх пакетов — пример проверки, а не полный состав вашего сервера. Нужно учесть все установленные расширения и выбранный режим Apache или FPM. Пакет поставщика с backport проверяют по его полному выпуску и бюллетеню. Требовать только буквального номера из upstream-таблицы в таком окружении неправильно.

Почему перезапуска nginx недостаточно #

После установки пакетов новые файлы на диске ещё не равны новым процессам в памяти. При FPM заменить нужно его воркеры; при mod_php — процессы Apache. Проверку конфигурации выполняют до перезапуска, имя службы берут из реального окружения. Пример ниже относится только к PHP-FPM 8.3 в системе, где существуют указанные бинарный файл и unit.

restart-selected-fpm.shShell
# После установки исправленной сборки, в согласованное окно работ
sudo php-fpm8.3 -t
# Продолжать только после успешной проверки конфигурации
sudo systemctl restart php8.3-fpm
sudo systemctl status php8.3-fpm --no-pager

В RHEL-подобном окружении имена могут быть php-fpm и httpd , а при параллельных установках — другими. Статус active подтверждает запуск службы, но не версию обработчика каждого домена. Поэтому после перезапуска возвращаются к проверке веб-процесса, а не заканчивают на зелёной строке systemd.

PHP в Docker: обновить образ и заменить контейнер #

Установка исправлений на хосте не обновляет PHP внутри контейнера. Нужно получить или собрать исправленный образ приложения, сохранить необходимые расширения, проверить конфигурацию и развернуть новые экземпляры. Если образ собирается из Dockerfile, пересобирают именно приложение с исправленной базой; скачивание произвольного чистого PHP-образа не заменяет эту сборку.

Ниже — пример для сервиса с условным именем php , которому уже назначен проверенный исправленный образ. Его имя и конфигурацию берут из своего Compose-проекта. Перед пересозданием убеждаются, что загруженные файлы и другие постоянные данные вынесены в тома либо внешнее хранилище, и резервная копия пригодна к восстановлению.

deploy-fixed-image.shShell
# Для сервиса php с уже выбранным исправленным образом
docker compose pull php
docker compose up -d --no-deps php
docker compose ps php
docker compose exec php php -v

Compose pull только скачивает образ. Compose up заменяет контейнер, когда образ или конфигурация изменились. Если тег и образ остались прежними, одна команда pull не подтверждает установку патча. Контроль версии через exec полезен для инвентаризации, но веб-процесс всё равно проверяют отдельно.

Для кластера запишите соответствие «экземпляр → image digest → сборка PHP». Оставшийся старый узел продолжит принимать часть запросов, даже если остальные уже обновлены. Это типичная причина, почему «мы обновили Docker» не даёт однозначного ответа о защищённости приложения.

Временные меры: что даёт session.upload_progress.enabled #

Если исправление пока невозможно установить, можно уменьшить доступность отдельных путей эксплуатации. Для CVE-2026-109619 PHP рекомендует отключить upload progress на уровне конфигурации, применяемой до разбора запроса, и перезапустить все соответствующие воркеры. Вызов ini_set() внутри сайта для этой задачи слишком поздний. .user.ini в FPM тоже не заменяет нужный ранний уровень настройки.

temporary-php-setting.iniINI
; Временная мера для части путей CVE-2026-109619.
; Добавить в фактически загружаемый серверный ini-файл.
session.upload_progress.enabled = Off

; Только для PHP 8.5: ещё один подтверждённый путь.
; Для остальных веток эту строку не добавлять.
; fatal_error_backtraces = Off

Эта настройка не устраняет CVE-2026-109618 и не закрывает все варианты CVE-2026-109619. Не следует оформлять её как «готовое решение без обновления». Отключение показа ошибок тоже не исправляет обращение к устаревшему состоянию. Если нельзя быстро получить патч, с администратором рассматривают ограничение внешнего доступа на время работ.

У рекомендаций для нехватки памяти есть отдельная цена по доступности. Например, снятие PHP memory_limit без границ ресурсов на уровне контейнера или cgroup может лишить сервер памяти. Не переносите такую настройку из заметки в production автоматически: нужен разбор полного набора мер, доступной памяти и поведения воркеров. Цель временных ограничений — выиграть время до патча, а не заменить его.

Четыре светлых керамических узла с одинаковыми терракотовыми вставками: обновление и проверка каждого экземпляра приложения.
Обновление считается завершённым после проверки каждого узла, а не одного ответа за балансировщиком.

Как проверить сайт и Битрикс24 после обновления PHP #

Приёмка: что должно быть подтверждено
ПроверкаЧто считаем подтверждениемЧто подтверждением не является
Исправление обеих CVEИсправленный upstream-выпуск либо бюллетень поставщика для точной сборкиКоманда обновления завершилась без ошибки
Рабочий PHPВерсия и конфигурация из веб-процесса нужного доменаТолько вывод php -v в SSH
Все экземплярыПроверен каждый веб-узел или контейнер по инвентаризацииОдин удачный запрос через балансировщик
Основные операцииПройдены вход, файлы, заказы или сделки, фоновые задания и обменыОткрывается главная страница
Наблюдение после релизаПроверены ошибки PHP, ответы 5xx, очереди и состояние службНикто пока не пожаловался

Для магазина проверяют авторизацию, корзину, оформление заказа, загрузку файлов и обмен с 1С. Платёжный сценарий проходят в тестовом режиме платёжной системы, без случайного списания с клиента. Для коробочного портала — вход, создание и изменение сделки, документы, почту, роботов и используемые интеграции. В фоновых заданиях отдельно смотрят интерпретатор cron: он может отличаться от веб-версии.

Полезно сохранить короткий протокол: какие узлы проверены, какие пакеты или образы установлены, когда заменены процессы, кто выполнил функциональную проверку и какие проблемы остались. Пример структуры ниже условный — это форма отчёта, а не данные о реально проверенном сервере.

verification-record.jsonJSON
{
  "node": "web-01",
  "runtime": "php-fpm",
  "php_version": "8.3.36",
  "package_or_image": "<полный выпуск пакета или digest образа>",
  "both_cves_fixed": "<ссылка на подтверждение поставщика>",
  "workers_restarted": true,
  "web_runtime_checked": true,
  "business_checks": ["login", "file_upload", "order", "exchange_1c"]
}

Сам патч не доказывает, что до обновления сервер не был скомпрометирован. Если есть посторонние файлы, неизвестные учётные записи или подозрительные исходящие подключения, сохраните журналы и артефакты и подключите специалистов по реагированию. Удалить заметный файл и назвать инцидент закрытым — значит потерять возможность понять, что ещё изменилось.

Частые вопросы об уязвимостях PHP #

Поможет обновление Битрикс через SiteUpdate? #

Обновление модулей продукта не заменяет исправление серверного PHP. Это две разные части сопровождения. Нужно проверить и CMS, и фактически используемую сборку интерпретатора; выполненный SiteUpdate сам по себе не является подтверждением патча PHP.

Нужно обязательно переходить с PHP 8.2 на 8.5? #

Нет. Для ветки 8.2 выпущен исправленный PHP 8.2.35. Выбор другой ветки зависит от совместимости продукта, модулей и кода. Экстренное исправление и плановую миграцию стоит разделить, если поставщик текущей ветки даёт подходящий патч.

Хостинг сообщил об обновлении. Что уточнить? #

Попросите подтвердить исправление обеих CVE для PHP конкретного домена: полный выпуск сборки, применённый обработчик и замену рабочих процессов. Если доменов несколько и у них разные версии PHP, подтверждение нужно по каждому окружению, а не только по серверу в целом.

Можно закрыть только загрузку файлов и продолжить работу? #

Ограничение загрузок может снизить доступность отдельных сценариев, но не является полным исправлением этих ошибок. Решение о временном режиме работы принимают с администратором по рекомендациям поставщика; установленную задачу обновления при этом не отменяют.

Поможем проверить окружение и обновить PHP #

Если вы не уверены, какая сборка обслуживает сайт и установлены ли оба исправления, NetLab поможет провести технический аудит сайта или приложения : проверить окружение, конфигурацию, журналы и зависимости, определить риски и приоритет работ. Для коробочного портала можно начать с технического аудита Битрикс24 .

Если требуется установка исправлений или переход на совместимую ветку, поможем с обновлением платформы и версии PHP : подготовим тестовую копию, проверим расширения и доработки, согласуем окно работ и проверим основные операции после запуска. Оставьте заявку — укажите CMS, тип размещения и известную версию PHP; пароли и ключи в форму отправлять не нужно.

Был ли материал полезен?

0 полезных · 0 неполезных · 0 оценок

Голосование временно недоступно: подключаем безопасную идентификацию читателя.