Новости

Эксперты Positive Technologies повысили защищенность языка PHP

До устранения уязвимостей под угрозой могли оказаться популярные сайты и сервисы
 

Эксперты PT SWARM Алексей Соловьев и Никита Свешников обнаружили и помогли исправить две уязвимости в компонентах PHP для работы с базами данных. Это популярный открытый язык программирования, который используется для веб-разработки и автоматизации различных процессов, например миграции баз данных или управления версионностью с помощью пакетных менеджеров. В случае успешной эксплуатации недостатков атакующий мог выполнить внедрение SQL‑кода1 либо вызвать отказ в обслуживании (DoS) в любых системах, написанных на PHP и использующих небезопасные элементы. Команда разработчиков языка была уведомлена об угрозах в рамках политики ответственного разглашения и выпустила обновления, устраняющие недостатки в расширении и драйвере.

Свободный язык программирования PHP занимает 12-е место по популярности в мире. По данным на лето 2026 года, на GitHub размещено 5,2 млн PHP‑проектов. На этом языке написаны архитектуры популярных маркетплейсов, платформ e‑сommerce, например Magento2, а также систем управления обучением (LMS) и контентом (CMS). На базе последних, в частности WordPress и Drupal, работает большинство сайтов в глобальном интернете. В ходе мониторинга актуальных угроз (threat intelligence) эксперты Positive Technologies только в России выявили около 1,8 млн потенциально уязвимых ресурсов, использующих PHP.

Уязвимости PT‑2025‑52 599 (CVE‑2025‑14 180) присвоено 7,5 балла из 10 по шкале CVSS 3.1. Недостаток был обнаружен в расширении PHP Data Objects (PDO), которое предоставляет разработчикам унифицированный интерфейс для работы с базами данных в случаях, когда происходит взаимодействие с системой управления ими (СУБД) PostgreSQL. PT‑2026‑39 443 (CVE‑2025‑14 179) получила 9,8 балла, что соответствует критическому уровню опасности. Ошибка содержалась в одном из компонентов PDO — драйвере pdo_firebird, необходимом для подключения PHP к широко распространенной системе управления базами данных Firebird.

Из-за недостатков под угрозой могло оказаться любое программное обеспечение, в котором язык PHP работает как с СУБД Firebird, так и с PostgreSQL. Согласно исследованию Stack Overflow, в 2025 году СУБД PostgreSQL была самой распространенной в мире. Возможный сбой мог подорвать доверие к сервису, а восстановление процессов потребовало бы дополнительных временных и финансовых ресурсов.

Успешно проэксплуатировав уязвимость PT‑2026‑39 443, нарушитель смог бы внедрить произвольный SQL‑код на этапе подготовки запроса. Атака становилась возможной из-за недостаточно корректной обработки NUL‑байта (\x00), который позволял «отсекать» закрывающуюся кавычку контекста строки и выходить за ее пределы.

В свою очередь, неправомерный итоговый SQL‑запрос с инъекцией в зависимости от контекста, то есть конкретного действия, которое совершала бы СУБД при выполнении этого запроса в языке, открывал доступ к любым деструктивным операциям с базой данных — от скрытого чтения конфиденциальных таблиц до их полной модификации или удаления. Дальнейшие последствия зависели от архитектуры системы, подвергшейся взлому: к примеру, это могли быть захват панели администратора с последующим повышением привилегий или компрометация персональных данных. При этом, получив доступ к панели управления, злоумышленник мог бы использовать легитимные функции (например, загрузку исполняемых файлов) либо другие уязвимости веб-приложения, чтобы выполнить произвольный код на сервере и таким образом захватить полный контроль над атакованной инфраструктурой.

Уязвимость PT‑2025‑52 599 могла бы позволить атакующему вызвать аварийное завершение процесса (падение интерпретатора) путем передачи некорректных данных, например невалидных символов. До выпуска обновлений успешная эксплуатация бреши была возможна при включенном режиме эмуляции подготовленных запросов (emulated prepared statements) в драйвере pdo_pgsql, с помощью которого осуществляется взаимодействие с PostgreSQL. В этом состоянии SQL‑шаблон и его параметры связываются на стороне PHP, а не самой СУБД. Поскольку падение происходит на системном уровне ядра, стандартные языковые конструкции вроде try‑catch оказываются бессильны. В сложных распределенных системах или бизнес‑цепочках без сквозных транзакций внезапная «смерть» процесса на критическом этапе приводит к десинхронизации данных: одна часть операции (например, отправка запроса во внешнюю систему) успевает выполниться, а последующий код обработки ответа так и не запускается.
 

1 Тактика атаки, позволяющая злоумышленнику вмешиваться в запросы, которые приложение отправляет к своей базе данных.

Простыми словами, успешная атака с помощью этой уязвимости полностью бы уничтожила рабочий процесс PHP на уровне операционной системы прямо во время записи данных. Нарушитель имел бы возможность передать в текстовом поле (например, в адресе доставки) поврежденные спецсимволы. Когда сайт попытался бы их обработать для сохранения в базе PostgreSQL, сломался бы внутренний механизм самого языка PHP, и следом операционная система мгновенно и жестко завершила бы этот процесс2. По этой причине рассинхронизировались бы данные: деньги со счета пользователя, сделавшего заказ, были бы списаны, однако сервис физически не успел бы создать запись о заказе, оформить накладные и отправить товар на склад и доставку.

2 Из-за падения среды выполнения ни один из встроенных в код защитных алгоритмов и проверок ошибок в принципе не могут сработать.

«Уязвимость в языке программирования представляет гораздо более серьезную опасность, чем дефект в отдельном продукте. Из‑за недостатков в защите PHP под угрозой могли бы оказаться миллионы систем на его основе по всему миру — от публичных веб‑ресурсов до внутренних автоматизированных скриптов и серверных утилит. Уникальность проведенного исследования заключается в том, что бреши были обнаружены в расширении PDO и драйвере pdo_firebird — в фундаментальном механизме, созданном именно для защиты от внедрения SQL‑кода. Это объясняет крайнюю сложность обнаружения подобных багов: инструменты статического анализа (SAST) сканируют только высокоуровневый код самого приложения и компоненты его зависимостей, если доступен их исходный код. В данном сценарии исходный код разработчиков оставался абсолютно чистым и легитимным, что делало уязвимость PT‑2025‑52 599 на уровне интерпретатора полностью невидимой для стандартных средств защиты».

Алексей Соловьев
Алексей СоловьевРуководитель группы экспертизы отдела анализа защищенности веб-приложений, Positive Technologies

Чтобы устранить ошибки, необходимо обновить используемую версию языка до актуальной. Альтернативный вариант: для исправления уязвимости PT‑2025‑52 599 скачать PHP версии не ниже 8.1.34, 8.2.30, 8.3.29, 8.4.16 и 8.5.1, для исправления PT‑2026‑39 443 — не младше 8.2.31, 8.3.31, 8.4.21, 8.5.6.

Быть в курсе актуальных недостатков безопасности можно на портале dbugs, где аккумулируются данные об уязвимостях в ПО и оборудовании производителей со всего мира, а также рекомендации вендоров по их устранению.