
Эксплойт proof-of-concept, анализ первопричины и однострочный патч для CVE-2026-97629 — подделки TLS-сессионных тикетов в nginx, позволяющей обойти аутентификацию по клиентским сертификатам (mTLS).
Одна строка на C. Одна подделанная TLS-сессия. Обнаружено, доказано от начала до конца и скоординировано до исправления компанией PhiNode Labs.
Эксплойт proof-of-concept, анализ первопричины, однострочный патч и доказательства воспроизведения для CVE-2026-97629 — подделки TLS session-ticket в nginx, которая позволяет обойти аутентификацию по клиентскому сертификату (mutual-TLS). Раскрыто F5 в рамках скоординированного раскрытия и приписано PhiNode Labs.
Читайте полный разбор: https://phinode.io/nginx-cve-2026-97629.html
«F5 выражает признательность PhiNode Labs за привлечение нашего внимания к этой проблеме и соблюдение высочайших стандартов скоординированного раскрытия». — Рекомендация по безопасности F5 K000162606
| CVE | CVE-2026-97629 |
| Рекомендация | F5 K000162606 · GHSA-862p-pr69-37gq |
| Серьёзность | CVSS 3.1 6.5 / CVSS 4.0 8.3 (F5). До 10.0 в развёртываниях с mutual-TLS |
| Слабость | CWE-908 — использование неинициализированного ресурса |
| Компонент | ngx_http_ssl_module — ngx_ssl_rotate_ticket_keys() |
| Затронуто | nginx 1.23.2 – 1.31.6, NGINX Plus до R37 (37.0.5) и продукты F5, построенные на nginx |
| Исправлено | nginx 1.31.7 и 1.30.6, NGINX Plus 37.0.5.1 / 37.1.0.1 |
| Благодарность | PhiNode Labs — [email protected] |
Чтобы быстро возобновлять TLS-соединения, nginx запечатывает session ticket
с помощью ротируемого ключа и хранит три таких ключа на каждый worker: текущий, предыдущий, следующий.
Во время ротации ngx_ssl_rotate_ticket_keys() копировала только два из трёх
слотов в каждый worker; третий никогда не записывался после запуска. В стандартной
сборке для Linux эта память полностью нулевая — одно и то же предсказуемое значение в каждом
worker в каждом развёртывании по умолчанию.
Callback расшифровки сканирует все три слота. Клиент может отправить поддельный ticket, 16-байтовое имя ключа которого состоит из нулей, совпасть с нетронутым третьим слотом, и nginx распечатает его с полностью нулевыми ключами AES и HMAC, которые может угадать кто угодно. После этого атакующий подделывает действительную сессию с выбранными им ключами и возобновляет зашифрованное соединение, не завершая реального рукопожатия. Там, где сервер полагается на клиентский сертификат для определения доступа, эта проверка обходится.
Исправление — один символ:
ngx_memcpy(keys->elts, cache->ticket_keys,
- 2 * sizeof(ngx_ssl_ticket_key_t));
+ 3 * sizeof(ngx_ssl_ticket_key_t));
См. patch/ — готовый к применению diff.
nginx обслуживает примерно треть всех веб-сайтов. Последствия, которые F5 приписывает уязвимости — обход проверки клиентских сертификатов — сильнее всего бьют по mutual TLS: открытый банкинг (PSD2 / FAPI), обмен данными в здравоохранении, функции ядра сети 5G, Kubernetes ingress, zero-trust и парки устройств, где сертификат является единственным основанием для решения о доступе. В таких развёртываниях подделка означает полный обход аутентификации клиента — максимальная степень серьёзности.
Всё локально, на loopback-листенере с одноразовым самоподписанным сертификатом. См. poc/ для эксплойта и evidence/ для зафиксированного вывода: nginx принимает ключ из одних нулей, сокращённое рукопожатие и полное чтение/запись через поддельную сессию (расшифрованный HTTP 404).
cd poc
python3 make_forged_session.py # patch the session_id_context
python3 forge_ticket.py # -> VERDICT: TICKET ACCEPTED
python3 forge_ticket_full.py # -> full read/write over the forged session
ssl_session_tickets off;ssl_session_ticket_key, которые вы ротируете сами.Сервер уязвим только если все условия выполняются: уязвимая версия,
ssl_session_cache shared:…, тикеты включены без файла ключа и сертификаты,
определяющие доступ.
| Дата | Событие |
|---|---|
| Июнь 2026 | PhiNode Labs выявляет несоответствие слотов и доказывает его end to end |
| Авг 2026 | Сообщено в F5 SIRT; передано в NGINX Product Engineering |
| Сен 2026 | NGINX PE классифицирует это как уязвимость |
| 12 окт 2026 | Назначен CVE-2026-97629 (F5 NPS-179) |
| 14 окт 2026 | F5 публикует K000162606; исправления выходят в nginx 1.31.7 / 1.30.6 |
Этот proof of concept опубликован после выхода исправления и в рамках скоординированного релиза F5, чтобы защитники могли проверить собственные серверы. Не используйте его против систем, которыми вы не владеете и которые не эксплуатируете.
PhiNode Labs — исследовательская лаборатория прикладного программного анализа. Мы находим дефекты, которые пропускают сканеры и языковые модели — без внедрённой строки, без очевидной плохой функции, лишь размер, который должен был быть три, а был два, — рассуждая о том, что на самом деле содержит память программы во время выполнения. Никаких утверждений без свидетеля.
Ключевые слова: CVE-2026-97629, nginx, TLS session ticket, подделка session ticket, возобновление сессии, mutual TLS, mTLS, обход клиентского сертификата, ngx_http_ssl_module, ngx_ssl_rotate_ticket_keys, F5, NGINX Plus, proof of concept, PoC, эксплойт, CWE-908, PhiNode Labs, программный анализ.