OpenSSLの未告知修正バグ「HollowByte」、11バイトのTLS要求でサーバーメモリを枯渇させる危険性
要点
-
わずか11バイトのTLS要求により、未対策のOpenSSLサーバーで最大131KBのメモリが確保され、処理スレッドがブロック状態になるバグが判明した。
-
この問題は「HollowByte」と名付けられ、glibcのメモリ割り当て挙動と重なることで、接続切断後もサーバーメモリが解放されずに断片化し続ける。
-
Oktaの研究チームによる検証では、1GBのサーバーが強制終了したほか、16GBのサーバーでも接続制限をすり抜けてメモリの25%が占有される被害が確認された。
-
OpenSSL側はこれを脆弱性として扱わず「バグ修正」として処理したため、CVE番号の割り当てやセキュリティアドバイザリの公表が行われていない。
-
2026年6月9日にリリースされたOpenSSLの各系統の修正版を適用することで、この問題への対策が可能となる。
-
米認証インフラ大手のOktaに所属するセキュリティ研究チーム「Red Team」は、暗号化通信ライブラリであるOpenSSLに存在する、サービス拒否(DoS)につながる深刻なバグの詳細を公開した。「HollowByte」と命名されたこのバグは、わずか11バイトのデータを送信するだけで、一般的な接続制限フィルタを回避しながら標的サーバーの物理メモリを占有し続け、最終的に動作停止に追い込むことができるという。
-
このバグは、暗号化通信を行うためのプロトコルであるTLS(トランスポート・レイヤー・セキュリティ)の接続開始手続き(TLSハンドシェイク)において発生する。ハンドシェイクでは、通信の最初に4バイトのヘッダーが送信され、そのうちの3バイトで後続のメッセージ本体(ボディ)の長さを自己申告する。
-
修正前のOpenSSLでは、このヘッダーを受信した段階で、ボディが届いておらず、ハンドシェイクの正当性チェックを行う前であるにもかかわらず、申告されたサイズに合わせて受信バッファを即座に拡張してしまう仕様になっていた。
-
クライアントが最初にサーバーへ送る接続要求において、この宣言可能なサイズの上限は131KBである。攻撃者が131KBのボディサイズを申告したヘッダーのみを送信し、その後のボディを一切送らずに接続を維持すると、サーバー側の処理スレッドは届かないデータを待ち続けて一時的にブロック状態に陥る。これにより、認証や鍵交換などの正規の手順を踏むことなく、サーバーのリソースが容易に消費されてしまうという。
-
単に接続を維持してリソースを枯渇させる攻撃手法は、従来の低速データ送信攻撃と同様である。しかし、「HollowByte」が極めて厄介なのは、Linuxなどで標準的に採用されているC言語の基本ライブラリであるglibc(GNU Cライブラリ)の挙動と組み合わさった場合である。
-
通常、接続切断時にOpenSSLはバッファを解放するが、glibcのメモリ割り当て機構(メモリアロケータ)は、解放された領域をすぐにはOSに返却せず、再利用のためにプロセス内で保持する。
-
攻撃者が接続ごとに宣言するサイズを変化させると、この領域が再利用されず、動的に確保されるメモリ領域(ヒープ領域)の断片化が進行する。結果として、プロセスが物理メモリ上に実際に確保しているメモリ量(常駐メモリ=RSS)が上昇したまま高止まりし、プロセス再起動まで戻らなくなる。
-
WebサーバーソフトウェアであるNGINXを用いた検証では、1GBメモリのサーバーに対して攻撃が行われた際、547MBが断片化によりロックされ、メモリ不足時にプロセスを強制終了するOS機能(OOMキラー)により強制終了された。また、16GBメモリのサーバーでは、接続制限の上限に達することなくシステムメモリの25%が凍結された。研究チームは「標準的な接続制限の防御策ではこの攻撃を防ぐことはできない」と指摘している。
-
Oktaは検証結果を公表したものの、再現コード(PoC)は非公開であり、GitHub上でも一般向けのPoCは確認されていない。
-
このバグに対する修正パッチは、2026年6月9日にリリースされたOpenSSLのバージョン4.0.1、3.6.3、3.5.7、3.4.6、および3.0.21に含まれている。それ以前のすべてのバージョンはこのバグの影響を受ける。
-
しかし、OpenSSLの開発チームはこの問題を公式な脆弱性とはみなさず、単なる「バグ修正またはセキュリティ強化」として対処した。このため、個別識別番号であるCVE番号は割り当てられず、セキュリティ警告文(アドバイザリ)や公式の変更履歴(チェンジログ)にもバグの存在や修正に関する記述は一切掲載されなかった。
-
同プロジェクトのポリシーでは、最も重要度の低い「Low」でもCVE番号が発行されるが、本件が対象外とされた理由は明かされていない。1接続あたり最大131KBというメモリ量は制限内であり脆弱性ではないという判断が推測される一方、Okta側はメモリが解放されない問題を重視している。
-
実際、過去には同様のメモリ枯渇バグであるCVE-2025-66199やCVE-2026-34183に対してCVE番号が割り当てられていた。今回の扱いについて、ニュースサイト「The Hacker News」がOpenSSLやOktaへ問い合わせを行っているが、現時点で回答は得られていない。
-
最新のOpenSSLパッケージをそのまま導入していれば、同日に修正された他の高重要度の脆弱性の修正に伴い、このバグも自動的に修正される。しかし、問題は本元の成果物を基にパッケージを提供する配布元(ダウンストリーム)の対応である。
-
Red HatなどのOSベンダーは、ソフトウェアのバージョンそのものを上げるのではなく、特定のバグ修正のみを古いバージョンへ移植する「バックポート」の手法を標準としている。今回のようにCVE番号や明確な修正告知がない場合、自動的なスキャンやパッチの選択から漏れてしまい、未修正 of のまま放置されるリスクが高まることが懸念されている。