Пост канала
- фото
🔺 CVE-2026-109618/619 в PHP позволяют скомпрометировать веб-серверы 21 октября снялось эмбарго на две use-after-free в PHP. Затронуты все версии с 5.4 по 8.5.4, то есть фактически весь PHP, что запущен в продакшене. Use-after-free — это когда код продолжает ходить по указателю на уже освобожденную память. Если в этот блок успевает лечь подконтрольная атакующему структура, control flow уводится в произвольный вызов. Оба бага сидят в колбэке session.upload_progress. Хендлер кеширует указатели на бакеты HashTable, которые успевают освободиться в рамках того же запроса, после чего атакующий переиспользует освобожденную память подготовленной fcall-структурой и уводит исполнение в zend_call_function, то есть в system(). Если у вас включен session.upload_progress, атакующий может отправить специально сформированный POST на любую PHP-страницу вашего сайта и получить выполнение команд от имени веб-сервера — авторизация при этом не нужна. Для стандартных пакетов (Ubuntu, Debian, ppa:ondrej) все per-build-параметры эксплоита уже посчитаны, в публичном writeup лежит фреймворк, который достает нужные дельты из бинарника одной командой, плюс готовая таблица профилей под распространенные сборки. Так что атакующему достаточно взять нужную строку и запустить — массовая эксплуатация реальна прямо сейчас. Вот ключевой фрагмент из опубликованного PoC, видно, как heap spray из 149 forge-блоков по 288 байт готовится в теле запроса еще до файла, чтобы после освобождения HashTable эти 320-байтные аллокации гарантированно легли в освобожденный arData: # 149 spray-элементов идут ДО файла: после стала и освобождения # freed arData будет переиспользован следующими аллокациями 320 байт, # а таблица уже лежит в теле запроса. pre = b"" pre += part(b, "PHPSESSID", sid.encode()) + b"\r\n" pre += part(b, "PHP_SESSION_UPLOAD_PROGRESS", b"x") + b"\r\n" for _ in range(N149): pre += part(b, "t[]", spray) + b"\r\n" # heap spray: 149 × 288-байтный forge-блок pre += part(b, "f", b"", filename="a") + b"\r\n" c1 = b"A" * (FILL + 64) # единственная точка стала: после c1 следующий fill > min_freq # → PHP вызывает update() → zend_hash_update() → старый arData освобождается phase1 = pre + c1 # c2: FILE_DATA сохраняет данные (указатели ещё живые), # затем update() освобождает decoded tree → stale pointer готов c2 = b"B" * (FILL + 64) # c3: оба сохранённых указателя уже stale, inner pointer НЕ обновился # (один файл в запросе — CVE-2026-109619) c3 = b"C" * (FILL + 64) tail = c2 + c3 + b"\r\n--" + b + b"--\r\n" Что делать прямо сейчас: 🔵 В php.ini поменять session.upload_progress.enabled = Off 🔵 Перезапустить Apache или PHP-FPM Этого, впрочем, недостаточно. Отключение session.upload_progress усложняет эксплуатацию, но проблему до конца не закрывает: PHP устроен так, что одно и то же поведение достигается через разные функции, и способ обхода с выключенным параметром уже нашли. Так что эта мера только снижает риск — единственное надежное средство остается патч от разработчиков PHP. Патча от разработчиков PHP пока нет. Выпуск исправлений запланирован на 17:00 (мск) 21 октября 2026 года. BI.ZONE EASM помогает инвентаризировать внешние IT-активы компании и собрать сведения о доступных из интернета сервисах и веб-приложениях. В отдельном интерфейсе платформа выделяет все выявленные веб-приложения на PHP и показывает сведения об их версиях. BI.ZONE WAF отсекает вредоносные запросы на уровне HTTP, до того как они дойдут до PHP. Под CVE-2026-109618/619 выпущено правило, которое ловит типовые варианты атаки по характерным признакам в теле запроса. Это снижает риск, но не закрывает уязвимость полностью — изменённый пейлоад или нестандартная доставка правило обойдут. После релиза патча в платформу также будут детекты для данной уязвимости.
Открыть в MAX- Просмотры
- 132
- ER
- 1,5%
- Реакции
- 2