GoAheadのTLS脆弱性:失効証明書を黙認し暗号化を弱体化
組み込みWebサーバー「GoAhead」に深刻な脆弱性が存在し、特定のTLS設定において失効したクライアント証明書による認証回避やセッションの復号が可能になります。
英語の原文から自動翻訳されました。
EmbedThisは2026年10月12日、広く利用されている組み込みWebサーバー「GoAhead」のバージョン6.1.1をリリースし、深刻なセキュリティ欠陥に対処しました。このアップデートにより、失効したクライアント証明書が認証を通過してしまう問題や、特定のTLSビルドにおける暗号化の弱体化が修正されました。影響を受ける可能性のあるIoTデバイスは数億台に及ぶとされています。
何が起きたのか
主要な脆弱性はCVE-2026-115881として特定され、ベンダーによる深刻度評価は9.1です。これはOpenSSLバックエンドを使用し、相互TLS(mTLS)を有効にしたGoAheadビルドに影響します。これらの構成では、サーバーは起動時に証明書失効リスト(CRL)を読み込みますが、それを強制しません。その結果、盗難または廃棄されたデバイス由来など、失効した証明書を提示するクライアントが、有効なものとして黙って受け入れられます。この欠陥は、信頼できる証明書発行機関(CA)バンドル、発行者チェック、および失効リストを含むオペレーター設定が存在する場合、バージョン3.4.5から6.1.0までに存在します。
FoxIOのリサーチャーであるSébastien Féry氏は、他の2つのTLS関連の問題とともに、2026年10月26日にこの問題を公開しました。修正プログラムは2026年8月2日にデバイスメーカーへ提供されていましたが、一般公開は10月に行われました。EmbedThisは、現時点で悪用事例は報告されていないと述べていますが、調整されたリリースタイミングは、公開時点で既知の攻撃が行われていなかったことを示唆しています。
同じリリースでさらに2つの脆弱性も対処されました。1つは古いLibreSSLバージョン(3.2.xおよび3.3.2–3.3.6)を使用するビルドに影響し、発行者チェックが無効の場合、10枚以上の証明書チェーンによる検証回避を許してしまいます。もう1つはMbed TLSビルド(バージョン4.0.2から6.1.0)に影響し、コーディングエラーにより、サーバーが意図した2048ビット値ではなく、1バイトのDiffie-Hellman値を送信してしまいます。この弱点により、クライアントが不正な鍵交換を受け入れる場合、受動的な観察者によってセッションが復号される可能性があります。
仕組み
OpenSSLの欠陥は、失効リストがメモリに読み込まれるものの、ハンドシェイクプロセス中に実際には参照されないという論理エラーに起因しています。サーバーは起動時にエラーを報告しないため、オペレーターに誤った安心感を与えます。クライアントが証明書を提示すると、サーバーはその署名を信頼できる発行機関に対して検証しますが、その特定の証明書シリアル番号が失効リストに記載されているかを確認するステップをスキップします。これにより、信頼できる発行機関によって署名されたあらゆる証明書が、失効ステータスに関係なくアクセス権限を付与することになります。
Mbed TLSの問題は、有限体Diffie-Hellman鍵交換を処理するコード内のタイポに関連しています。堅牢な2048ビットの公開値を送信する代わりに、サーバーは1バイトのみを送信します。モダンブラウザ、Java、Goなどの主流なクライアントはこの小さな値を拒否し、接続を中断します。しかし、最小サイズチェックを持たない組み込みまたはカスタムクライアントはこれを受け入れる可能性があり、盗聴者が容易に計算できる弱いセッションキーが確立されます。この脆弱性はTLS 1.3またはECDHEセッションには影響しません。
主要な詳細
- CVE-2026-115881: 評価9.1。相互TLSと失効リストが設定されたOpenSSLビルド3.4.5–6.1.0に影響。失効した証明書が受け入れられます。
- CVE-2026-115884: 評価7.4。LibreSSL 3.2.xおよび3.3.2–3.3.6ビルドに影響。発行者チェックが無効な場合、長すぎる証明書チェーンを許容します。
- Mbed TLSの欠陥: 評価5.9。バージョン4.0.2–6.1.0に影響。1バイトのDiffie-Hellman値を送信し、受動的な観察者によるセッション復号を可能にします。
- 修正の有無: GoAhead 6.1.1ですべての問題が解決されます。デバイス所有者は、このバージョンを含むファームウェアアップデートをメーカーが出荷するのを待つ必要があります。
- 追加の修正: バージョン6.1.1では、ユーザー名がBlowfish形式で保存されており、それが判明している場合、任意のパスワードでアクセスできてしまうログインバイパスもパッチ適用されています。
- 検出: FoxIOはJA4Scanツールを提供しており、GoAheadバックエンドの指紋を識別できますが、これは確認済みの脆弱性ではなくビルドタイプを識別するものです。
なぜ重要なのか
IoTインフラを管理するエンジニアにとって、この事案は組み込みソフトウェアサプライチェーンの不透明性を浮き彫りにします。GoAheadはHP、Siemens、D-Linkなどの大手ベンダーのルーター、プリンター、産業用コントローラーで動作しています。TLSバックエンドと設定はファームウェアにコンパイルされているため、デバイス所有者は詳細な検査やベンダーの確認なしには、自身のリスク状況を判断できません。8月にメーカーへ修正がリリースされてから10月に一般公開されるまでの遅延は、組み込みデバイス特有の遅いパッチサイクルを強調し、システムが長期間脆弱な状態のまま放置されることを示しています。
失効チェックの静かな失敗は、デバイス認証に相互TLSを依存する環境にとって特に危険です。デバイスライフサイクルセキュリティを管理するために明示的に失効リストを設定したオペレーターは、自分の制御が有効であると誤信させられます。これは、従来のユーザーインターフェースを持たないヘッドレスデバイスの主要な防御手段であることがoftenある、証明書ベースの認証メカニズムへの信頼を損ないます。同じリリースに含まれるログインバイパスの存在はリスクをさらに複雑にし、複数の防御層が同時に侵害される可能性があることを示唆しています。
対応策
- 環境内でGoAheadを実行しているデバイスを特定し、バージョン6.1.1に基づくファームウェアが出荷済みかどうかをメーカーに確認してください。
- ファームウェアビルドプロセスを管理している場合は、直ちにGoAhead 6.1.1へアップグレードし、イメージを再ビルドしてください。
- Mbed TLSビルドの場合、更新前の暫定対策として、有限体DHEスイートを無効にするか、OpenSSLバックエンドへ切り替えてください。
- LibreSSLビルドの場合、信頼できるCAバンドルで発行者チェックを有効にするか、可能であればLibreSSL 4.xへアップグレードしてください。
- アップグレード後、すべてのアクティブなセッションを終了し、サーバーを再起動し、Blowfish形式で保存されているパスワードをすべてローテーションしてください。
- JA4Scanなどのツールを使用してGoAheadインスタンスの指紋を取得し、使用されているTLSバックエンドを特定することで、修復作業の優先順位付けを行ってください。



