C言語の一行。偽造されたTLSセッション。発見され、エンドツーエンドで実証され、 PhiNode Labs によって修正まで調整されました。
CVE-2026-97629 の概念実証エクスプロイト、根本原因分析、一行のパッチ、および 再現証拠です。これはnginxにおけるTLSセッションチケット偽造であり、 クライアント証明書(相互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)。相互TLS環境では最大10.0 |
| 脆弱性分類 | CWE-908 — 初期化されていないリソースの使用 |
| コンポーネント | ngx_http_ssl_module — ngx_ssl_rotate_ticket_keys() |
| 影響を受けるバージョン | nginx 1.23.2 – 1.31.6、NGINX Plus R37(37.0.5)まで、およびnginxをベースにしたF5製品 |
| 修正済み | nginx 1.31.7 および 1.30.6、NGINX Plus 37.0.5.1 / 37.1.0.1 |
| 功績 | PhiNode Labs — [email protected] |
TLS接続を迅速に再開するため、nginxはセッションチケットをローテーションする鍵で
封印し、ワーカーごとにそのような鍵を3つ保持します:現在、前回、次回。
ローテーション中、ngx_ssl_rotate_ticket_keys() は3つのスロットのうち2つだけを
各ワーカーにコピーし、3つ目は起動後に一度も書き込まれませんでした。デフォルトの
Linuxビルドでは、そのメモリはすべてゼロであり、すべてのデフォルトデプロイメントの
すべてのワーカーで同じ予測可能な値です。
復号コールバックは3つのスロットすべてをスキャンします。クライアントは、16バイトの 鍵名がすべてゼロである偽造チケットを送信し、未変更の3番目のスロットに一致させ、 誰でも推測できるすべてゼロのAESおよびHMAC鍵でnginxにそれを開封させることができます。 そこから攻撃者は、自分が選んだ鍵で有効なセッションを偽造し、実際のハンドシェイクを 完了せずに暗号化接続を再開します。サーバーがクライアント証明書を信頼して誰が アクセスできるかを決定する場合、そのチェックはバイパスされます。
修正は1文字です:
ngx_memcpy(keys->elts, cache->ticket_keys,
- 2 * sizeof(ngx_ssl_ticket_key_t));
+ 3 * sizeof(ngx_ssl_ticket_key_t));
適用可能な差分については patch/ を参照してください。
nginx は全ウェブサイトのおよそ3分の1を配信しています。F5 が言及している影響 — クライアント証明書検証のバイパス — は 相互 TLS に最も深刻な打撃を与えます。すなわち、オープンバンキング(PSD2 / FAPI)、医療データ交換、5G コアネットワーク機能、Kubernetes ingress、ゼロトラストおよびデバイスフリートなど、証明書がアクセス判断のすべてを担う環境です。そうしたデプロイメントでは、この偽造は完全なクライアント認証バイパスとなり、最大深刻度の解釈となります。
すべてローカルで、使い捨ての自己署名証明書を用いたループバックリスナー上で行います。エクスプロイトについては 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年6月 | PhiNode Labs がスロットの不一致を特定し、エンドツーエンドで実証 |
| 2026年8月 | F5 SIRT へ報告。NGINX Product Engineering へ転送 |
| 2026年9月 | NGINX PE が脆弱性として分類 |
| 2026年10月12日 | CVE-2026-97629 を割り当て(F5 NPS-179) |
| 2026年10月14日 | F5 が K000162606 を公開。修正は nginx 1.31.7 / 1.30.6 で提供 |
この実証コード(proof of concept)は、修正が提供された後に、F5 の 調整されたリリースに合わせて公開されています。これは防御側が自身のサーバーを検証するためのものです。 所有または運用していないシステムに対して使用しないでください。
PhiNode Labs は、応用プログラム解析の研究ラボです。 私たちは、スキャナーや言語モデルが見逃してしまう欠陥を発見します。それは、注入された文字列でもなく、 明らかに不正な関数でもなく、本来 3 であるべきところが 2 になっているサイズのようなものです。 プログラムのメモリが実行時に実際に何を保持しているかを推論することで、これを見つけ出します。証拠なき主張はしない。
キーワード: CVE-2026-97629, nginx, TLS セッションチケット, セッションチケット偽造, セッション再開, 相互 TLS, mTLS, クライアント証明書バイパス, ngx_http_ssl_module, ngx_ssl_rotate_ticket_keys, F5, NGINX Plus, 実証コード, PoC, エクスプロイト, CWE-908, PhiNode Labs, プログラム解析。