概要
NO_SESSION_CACHE_REFが設定されていない場合、wolfSSL_get_session()はセッションオブジェクトを返さず、プロセス全体のSessionCache内の{row、index、hash(sessionID)}形式のClientSession参照を返します。そしてClientSessionToSession()はそのハッシュの検証のみを行います。TLS 1.2のセッションIDはサーバーによって選択され平文で送信されるため、AddSessionToCache()は同じIDの他のサーバーのセッションと一致し、クライアント側のエントリをそのサーバーのマスターシークレット、暗号スイート、バージョンで上書きしますが、ハンドルは解決し続けます。書き込み経路ではピア、アプリケーションのサーバーID、またはWOLFSSL_CTXを比較しません。そのハンドルを介して再開すると、Certificateメッセージが送信されない省略ハンドシェイクが発生し、チェーン検証もwolfSSL_check_domain_name()も実行されないため、攻撃者はその接続全体を元のサーバーとして受け入れさせることが可能になります。影響を受けるビルドは、NO_SESSION_CACHE_REF、NO_SESSION_CACHE、NO_CLIENT_CACHE、TITAN_SESSION_CACHEがすべて未定義のものであり、これは標準の./configureや–enable-opensslextra、–enable-opensslallを含みます。15の統合オプションはNO_SESSION_CACHE_REFを定義しているため影響を受けません。これには–enable-all、–enable-distro、–enable-curl、–enable-nginx、–enable-haproxy、–enable-stunnel、–enable-wpasおよびOPENSSL_COMPATIBLE_DEFAULTSファミリーのその他のオプションが含まれ、さらに–enable-leanpsk、–enable-leantls、–enable-lowresource、–enable-tinytls13はキャッシュを完全に無効化します。アプリケーションはレガシーな参照フロー、すなわちwolfSSL_get_session()またはSSL_get_session()の後にwolfSSL_set_session()を使用する必要があります。wolfSSL_get1_session()はセッションオブジェクト自体を返すため影響を受けません。またwolfSSL_SetServerID()のルックアップも影響を受けません。TLS 1.2以下およびDTLS 1.2以下のみが対象であり、TLS 1.3および空のServerHelloセッションIDを用いたチケット再開はクライアントが選択したキャッシュキーを使用するため影響がありません。毒されたエントリはプロセス全体のキャッシュに存在し、WOLFSSL_CTXの境界を越えて残存し、エントリが削除されるかセッションがタイムアウトするまで(デフォルト500秒)持続します。v5.3.0からv5.9.2のリリースが影響を受けており、修正ではキャッシュに対して書き込みごとの世代カウンターを追加し、WOLFSSL_CACHE_VERSIONを2から3に引き上げたため、古いビルドで永続化されたキャッシュは修正済みビルドで拒否されます。
技術情報
- 公開日: 2026-10-02T15:02:33+09:00
- 更新日: 2026-10-02T15:02:33+09:00
参考リンク
対処方法
該当ソフトウェアの最新版への更新、または開発元が提供する緩和策の適用を推奨します。運用環境に応じて事前検証の上で実施してください。
免責
本記事は公開情報をもとに自動集約された速報です。正確性・完全性は保証できません。必ず一次情報(上記リンク等)をご確認ください。
