2023/06/30: SE202301: セキュリティアドバイザリー: CVE-2023-27395 等 6 点: 米 Cisco Systems 社の協力により SoftEther VPN の脆弱性を修正

    目次
    1. 1. 1. CVE-2023-27395: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能のヒープオーバーフローによるクラッシュおよび理論上の任意コード実行の可能性
      1. 1.1. (1) 深刻度
      2. 1.2. (2) 概要
      3. 1.3. (3) 対象バージョン
      4. 1.4. (4) 攻撃の条件
      5. 1.5. (5) 詳細
    2. 2. 2. CVE-2023-22325: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能の整数オーバーフローによる機能停止の可能性
      1. 2.1. (1) 深刻度
      2. 2.2. (2) 概要
      3. 2.3. (3) 対象バージョン
      4. 2.4. (4) 攻撃の条件
      5. 2.5. (5) 詳細
    3. 3. 3. CVE-2023-32275: 32bit 版 VPN Client や VPN Server の管理者自らが自身の管理する VPN プロセス内の信頼された CA の証明書を有するヒープ領域の開始アドレスを見ることができる
      1. 3.1. (1) 深刻度
      2. 3.2. (2) 概要
      3. 3.3. (3) 対象バージョン
      4. 3.4. (4) 攻撃の条件
      5. 3.5. (5) 詳細
    4. 4. 4. CVE-2023-27516: SoftEther VPN Client の管理者パスワードを忘れて、空のパスワードを設定した状態のまま、リモート管理を有効化した場合、リモートから VPN Client の管理者パスワードを変更したり、自由に利用できてしまい、セキュアではない
      1. 4.1. (1) 深刻度
      2. 4.2. (2) 概要
      3. 4.3. (3) 対象バージョン
      4. 4.4. (4) 攻撃の条件
      5. 4.5. (5) 詳細
    5. 5. 5. CVE-2023-32634: SoftEther VPN Client を動作させているコンピュータのローカル上で、攻撃者が VPN Client プロセスが起動するよりも前に、いち早く VPN Client と同一のポートで TCP リレープログラムを起動させることに成功した場合、当該 TCP リレープログラムは、管理者と VPN Client プロセスとの間の通信を中間者攻撃できる
      1. 5.1. (1) 深刻度
      2. 5.2. (2) 概要
      3. 5.3. (3) 対象バージョン
      4. 5.4. (4) 攻撃の条件
      5. 5.5. (5) 詳細
    6. 6. 6. CVE-2023-31192: SoftEther VPN Client が信頼できない VPN Server に接続する際に、クラスタリング (ロードバランス) 機能に係る不正なリダイレクト応答がなされると、20 バイトの初期化されていないスタック領域が読み出される
      1. 6.1. (1) 深刻度
      2. 6.2. (2) 概要
      3. 6.3. (3) 対象バージョン
      4. 6.4. (4) 攻撃の条件
      5. 6.5. (5) 詳細
    7. 7. 上記の脆弱性への対策を行なったバージョン

    2023/6/30 登 大遊

    Related: CVE-2023-27395, CVE-2023-22325, CVE-2023-32275, CVE-2023-27516, CVE-2023-32634, CVE-2023-31192

     

    SoftEther VPN セキュリティアドバイザリー記事は、影響力の高い脆弱性 (任意のコードの実行または同等のもの) が確認された場合に発行されるものです。

     

    SoftEther VPN プロジェクトは、2023 年 4 月から 6 月にかけて、米国 Cisco Systems, Inc. による高度なコードレビューと技術協力を受け、SoftEther VPN のコードに存在していたいくつかの脆弱性を修正しました。
     
    今回修正したいずれの脆弱性も、通常の使用方法と使用環境においては、不正侵入等のセキュリティ侵害に悪用されるリスクは比較的低く、実際の攻撃は容易ではありません。しかしながら、SoftEther VPN は、今や、740 万ユニークユーザーによって世界中で利用されているオープンソース VPN ソフトウェアとなっており、国家レベルの検閲ファイアウォールによる遮断攻撃や、通信盗聴の試みのリスクから防衛するために、多数のユーザーによって、日々利用されています。そのため、わずかな攻撃可能性が存在している限り、悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者などの世界中で最も高度なサイバー攻撃者を想定して、脆弱性をできるけ予防することには、大きな価値があるといえます。今回の脆弱性修正は、SoftEther VPN およびインターネットを用いてセキュアな通信を実現しようとしているユーザーが、悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって理論上引き起こすことが可能な高度な攻撃を予防するために重要なパッチとして有益であるといえます。
     
    今回修正した脆弱性は、CVE-2023-27395、CVE-2023-22325、CVE-2023-32275、CVE-2023-27516、CVE-2023-32634、CVE-2023-31192 です。これらは、いずれも、米国 Cisco Systems, Inc. 社による、SoftEther VPN のコードレビューによって発見されたものです。
     
    SoftEther VPN をインターネット上で用いるユーザーのセキュリティ向上に寄与された 米国 Cisco Systems, Inc. 社および同社の Cisco Talos 部門のセキュリティ研究者である Lilith 氏に対して深く謝意を表明します。
     
    SoftEther VPN は、オープンソースソフトウェア (Apache 2.0 ライセンス) であり、今回のソースコードの修正内容は、すべて公開されています。
     
    脆弱性の一覧は、次のとおりです。特に興味深く、目を皿のようにしたコードレビューを経なければなかなか見付けることが困難であった刮目すべき脆弱性は、1, 2, 6 です。
     

    1. CVE-2023-27395: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能のヒープオーバーフローによるクラッシュおよび理論上の任意コード実行の可能性

     
    2. CVE-2023-22325: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能の整数オーバーフローによる機能停止の可能性
     
    3. CVE-2023-32275: 32bit 版 VPN Client や VPN Server の管理者自らが自身の管理する VPN プロセス内の信頼された CA の証明書を有するヒープ領域の開始アドレスを見ることができる
     
    4. CVE-2023-27516: SoftEther VPN Client の管理者パスワードを忘れて、空のパスワードを設定した状態のまま、リモート管理を有効化した場合、リモートから VPN Client の管理者パスワードを変更したり、自由に利用できてしまい、セキュアではない
     
    5. CVE-2023-32634: SoftEther VPN Client を動作させているコンピュータのローカル上で、攻撃者が VPN Client プロセスが起動するよりも前に、いち早く VPN Client と同一のポートで TCP リレープログラムを起動させることに成功した場合、当該 TCP リレープログラムは、管理者と VPN Client プロセスとの間の通信を中間者攻撃できる
     
    6. CVE-2023-31192: SoftEther VPN Client が信頼できない VPN Server に接続する際に、クラスタリング (ロードバランス) 機能に係る不正なリダイレクト応答がなされると、20 バイトの初期化されていないスタック領域が読み出される
     
     
    詳細を、以下に解説します。
     
     

    1. CVE-2023-27395: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能のヒープオーバーフローによるクラッシュおよび理論上の任意コード実行の可能性

    (1) 深刻度

    CVSS v3.1: AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (8.1)
    ただし、以下に記載があるとおり、攻撃にはダイナミック DNS (DDNS) クライアント機能と DDNS サーバーとの間の TCP 通信に係る中間者攻撃が必要である。その場合であっても、任意コード実行は、理論上の可能性が存在するというのみで、実証されていない。それでも、一応、予防的にアップデートを行なうことを推奨する。
     

    (2) 概要

    SoftEther VPN Server / Bridge (以下同じ) に内蔵されているダイナミック DNS (DDNS) クライアント機能において、VPN Server と DDNS サーバーとの間の TCP 通信の中間者攻撃に成功した攻撃者は、ヒープオーバーフローを発生させ、VPN Server プログラムを停止させることが可能である。攻撃者は、VPN Server とインターネットとの間の通信経路を支配し、中間者攻撃が可能な必要がある。ヒープオーバーフローが発生するため、OS やランタイムの有するヒープアドレスランダム化やヒープ破損検出によって通常は予防されるものの、理論上、任意コード実行に悪用できる可能性が存在する。したがって、VPN Server のアップデートが推奨される。
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    ※ SoftEther VPN を元に開発された製品版「PacketiX VPN」は、影響を受けない。
     

    (4) 攻撃の条件

    攻撃者は、VPN サーバーがインターネットに接続されているインターネット接続回線 (ISP、WiFi 等のインフラ) または参照用 DNS サーバーを支配しており、ダイナミック DNS クライアントとダイナミック DNS サーバーとの間の TCP/IP 通信、またはこれに先立つ DNS 通信を改ざんする等、通信内容を書き換える中間者攻撃を実行できる立場であることを要する。
     

    (5) 詳細

    SoftEther VPN Server には、ダイナミック DNS クライアント機能が搭載されている。当該ダイナミック DNS クライアント機能は、ダイナミックDNS サーバーに対して、定期的に、自らを登録または登録更新する。
    ダイナミック DNS サーバー https://www.softether.net/ は、「***.softether.net」 (*** はユーザーが希望する任意の文字列)を発行する。
    この SoftEther VPN Server がダイナミック DNS サーバーに自らを登録したり、登録を更新したりするための通信 (RPC。HTTP ベースのRemote Procedure Call) は、バックグラウンドで実施されている。
    攻撃者が VPN Server がインターネットに接続されている ISP 回線等の通信経路を支配している等、上記の「条件」に合致している場合、VPN Server とダイナミック DNS サーバーとの間の RPC の内容を書き換えたり、虚偽の RPC を応答したりすることができる。
    攻撃者は、RPC 応答を改ざんまたは偽造した上で、RPC の応答上に異常なデータを含めることにより、これを受け取った SoftEther VPN Server のプロセス内部で、ヒープ領域のオーバーフローが発生する。
    これにより、VPN Server のプログラムがクラッシュする。VPN Server のプログラムがクラッシュすると、VPN Server に接続しているすべてのユーザーが切断され、プロセスが再起動するまで VPN 通信が利用できなくなる被害が発生する。
    したがって、上記の条件に合致している攻撃者は、VPN 通信を切断する DoS 攻撃を実現することができる。
    なお、本脆弱性はヒープ領域のオーバーフローであり、OS および C ランタイムの有するヒープ領域の破損検査で検出され、プログラムはクラッシュするが、原理的に、精巧な攻撃通信パケットを作り上げた場合、任意のコード実行が可能となる可能性が否定できない。ただし、現在のところ第一発見者も、開発者も、任意コード実行が可能であることの実証には成功していない。
    今回の脆弱性パッチでは、ヒープオーバーフローの発生部分を特定して修正を行なったほか、これまで HTTP を用いていた DNS クライアント機能と DDNS サーバー機能との間の通信を SSL 化することにより、二重の予防を施した。
     
     

    2. CVE-2023-22325: 悪意のある ISP や国家レベルのインターネット通信経路上の中間者攻撃者によって引き起こされるリスクのある SoftEther VPN DDNS クライアント機能の整数オーバーフローによる機能停止の可能性

    (1) 深刻度

    CVSS v3.1: AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H (5.9)
     

    (2) 概要

    SoftEther VPN Server に内蔵されているダイナミック DNS (DDNS) クライアント機能において、VPN Server と DDNS サーバーとの間の TCP 通信の中間者攻撃に成功した攻撃者は、整数オーバーフローを発生させ、VPN Server プログラムの DDNS クライアント機能部分のみを停止させることが可能である。VPN Server プログラムの DDNS クライアント機能部分が停止すると、VPN Server プログラムを再起動するまでの間、サーバーの IP アドレスが変化しても、その変化を DDNS サーバーに登録できない実用上の問題が発生する。攻撃者は、VPN Server とインターネットとの間の通信経路を支配し、中間者攻撃が可能な必要がある。
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    ※ SoftEther VPN を元に開発された製品版「PacketiX VPN」は、影響を受けない。
     

    (4) 攻撃の条件

    攻撃者は、VPN サーバーがインターネットに接続されているインターネット接続回線 (ISP、WiFi 等のインフラ) または参照用 DNS サーバーを支配しており、ダイナミック DNS クライアントとダイナミック DNS サーバーとの間の TCP/IP 通信、またはこれに先立つ DNS 通信を改ざんする等、通信内容を書き換える中間者攻撃を実行できる立場であることを要する。
     

    (5) 詳細

    CVE-2023-27395 と類似であるが、攻撃者は、DDNS の RPC 応答の改ざんの前に、受信バッファの最大サイズを拡大するための特別に細工されたパケットを VPN Server に送付する必要がある。そのこと自体では問題は発生しないが、その後に DDNS サーバーとの通信が改ざんされたり、DDNS サーバーが虚偽のサーバーにすり替わったりして、DDNS サーバーが一定の大きなデータサイズを記載した値を応答すると、DDNS クライアントはその大きなデータサイズ分のメモリ領域を確保しようと試みる。ここで、整数の変数上のオーバーフローが発生し、単純な無限ループが発生し、DDNS クライアント機能の一部でコードが止まってしまう。
    今回の脆弱性パッチでは、整数オーバーフローの発生部分を特定して修正を行なったほか、これまで HTTP を用いていた DNS クライアント機能と DDNS サーバー機能との間の通信を SSL 化することにより、二重の予防を施した。
     
     

    3. CVE-2023-32275: 32bit 版 VPN Client や VPN Server の管理者自らが自身の管理する VPN プロセス内の信頼された CA の証明書を有するヒープ領域の開始アドレスを見ることができる

     

    (1) 深刻度

    5.5 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
     

    (2) 概要

    SoftEther VPN Client や SoftEther VPN Server には、信頼できる証明機関 (CA) の一覧を管理する機能が存在する。32bit 版 SoftEther VPN Client および VPN Server で、当該列挙機能において、その証明書を保持しているヒープアドレスの先頭アドレスが応答される。これは、証明書のメモリ内における一意の ID として、ヒープアドレスを用いていることに起因する。これは、管理者自らが、自身が動作させている VPN プロセス内を、そのプロセスをダンプすることなく、プロセス外から、ヒープ状態を、きわめて限定的に推測することが可能であることになる。
    これが果たして脆弱性と言えるのかどうか (VPN プロセスを管理・支配する管理権者自らが、そのプロセス内のあるオブジェクトのヒープアドレスを具体的に知ることができることが、機密性を侵害しているといえるのか) は、議論がなされるべきであるが、確かに、ある証明書オブジェクト等を保持しているヒープアドレスは、その管理を行なっている単一のプロセス内部でのみ重要な事柄であり、これをプロセス外に対して出力することは、デバッガのような内部的状態を出力するような例外的機能をのぞき、通常は想定されていないので、一応、修正することにした。
    なお、64bit 版 SoftEther VPN では、ヒープアドレスは用いられていないので、ヒープアドレスの表出はない。ただし、64bit 版では、代わりに、ヒープアドレスに基づいたハッシュ値を用いていることから、脆弱性第一発見者の意見によると、ハッシュのレインボー・テーブルを用いて元のヒープアドレスを推測する手法も可能であるとする。
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    製品版 PacketiX VPN 4.41 Build 9787 RTM およびそれ以前
     

    (4) 攻撃の条件

    ヒープアドレスを是非とものぞき見したいと欲する攻撃者は、対象の VPN Server または VPN Client に対する管理権限を有している必要があり、管理者として認証済みである必要がある。
     

    (5) 詳細

    今回の修正パッチでは、32bit 版、64bit 版のいずれにおいても、ヒープアドレスから一意の列挙識別子を生成する際に、プロセスのインスタンス固有のランダムな乱数シードを用いることにより、レインボーテーブルの作成すら困難にする改良を施した。
     
     

    4. CVE-2023-27516: SoftEther VPN Client の管理者パスワードを忘れて、空のパスワードを設定した状態のまま、リモート管理を有効化した場合、リモートから VPN Client の管理者パスワードを変更したり、自由に利用できてしまい、セキュアではない

     

    (1) 深刻度

    7.0 - CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:L
    ただし、SoftEther VPN Client のパスワード設定を忘れたまま、リモート管理を有効化した場合のみ問題となる。
     

    (2) 概要

    SoftEther VPN Client は、VPN Client プロセス本体と、VPN Client Manager または vpncmd コマンドライン・ユーティリティの 2 つに分離されている。プロセス本体と VPN Client Manager または vpncmd コマンドライン・ユーティリティとの間は、TCP ベースの RPC で通信がなされる。通常、VPN Client プロセス本体と VPN Client Manager または vpncmd コマンドライン・ユーティリティは同一のコンピュータ上に存在する。そのため、初期状態では、同一のコンピュータ (localhost, 127.0.0.1) からのみ制御が可能である。
    SoftEther VPN Client には、管理者が VPN Client プロセスの設定を変更し、リモートコンピュータ (localhost 以外) から制御を行なうことを許可することが可能なリモート管理機能が実装されている。
    もし、管理者が VPN Client のリモート管理を許可する設定を実施した後、管理パスワードの設定を忘れている場合、その VPN Client には、TCP を用いてアクセス可能な攻撃者が勝手にパスワードなしに接続し、パスワードを無断で設定したり、自由に VPN Client 機能を利用したりすることができてしまい、危険である。
     
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    製品版 PacketiX VPN 4.41 Build 9787 RTM およびそれ以前
     

    (4) 攻撃の条件

    SoftEther VPN Client の管理者が、管理者パスワード設定を忘れたまま、かつ、リモート管理を有効化している必要がある。さらに、その VPN Client がインターネットに露出しているなど、攻撃者から通信が可能である必要がある。
     

    (5) 詳細

    SoftEther VPN Client は、デフォルト・セキュアな実装となっており、初期状態ではリモート管理が無効になっているため、この問題は発生しない。しかし、管理者がパスワードの設定を失念したまま、リモート管理を有効にする可能性も考えられる。その場合、第三者がリモート管理接続を行なうことが許容されることは、いわば当然の挙動である。これを脆弱性と呼ぶかどうかは、議論が分かれるところである。しかし、VPN Client のリモート管理を有効にする場合は、通常の管理者であれば、ほぼ 100%、パスワードを設定するであろうことが想定される。その管理者がパスワードの設定を忘れている場合に、リモート管理におけるユーザー認証を通過させないような実装の変更は、セキュリティを向上するメリットがあり、他方で、デメリットは少ない。
    そこで、今回、SoftEther VPN Client の管理者が、管理者パスワード設定を忘れたまま、かつ、リモート管理を有効化している場合、リモートからの接続を禁止するような挙動の修正を行ない、セキュリティを向上させた。
     
     

    5. CVE-2023-32634: SoftEther VPN Client を動作させているコンピュータのローカル上で、攻撃者が VPN Client プロセスが起動するよりも前に、いち早く VPN Client と同一のポートで TCP リレープログラムを起動させることに成功した場合、当該 TCP リレープログラムは、管理者と VPN Client プロセスとの間の通信を中間者攻撃できる

     

    (1) 深刻度

    7.8 - CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
     

    (2) 概要

    SoftEther VPN Client は、VPN Client プロセス本体と、VPN Client Manager または vpncmd コマンドライン・ユーティリティの 2 つに分離されている。プロセス本体と VPN Client Manager または vpncmd コマンドライン・ユーティリティとの間は、TCP ベースの RPC で通信がなされる。通常、VPN Client プロセス本体と VPN Client Manager または vpncmd コマンドライン・ユーティリティは同一のコンピュータ上に存在する。そのため、初期状態では、同一のコンピュータ (localhost, 127.0.0.1) からのみ制御が可能である。
    ここで、VPN Client が動作しているコンピュータのローカル上に、すでに攻撃者が別の手段 (例: OS の管理者パスワードを知っている等) で侵入し、自由にプロセスを起動できるという状態を想定する。加えて、攻撃者は、VPN Client が起動するよりも前に、いちはやく、VPN Client と同一のポートで TCP リレープログラムを起動させることに成功したとする。この場合、VPN Client のほうが、後の時刻に起動すると、VPN Client は、その競合する TCP ポート番号の使用を避け、TCP ポート番号を順番にインクリメントして、最初に発見された空きポートを利用する仕組みになっている。ここでは、これを DynamicPortListener 機能と呼ぶ。この場合、攻撃者の TCP リレープログラムが、管理者の VPN Client Manager からの TCP RPC 接続を受付け、DynamicPortListener 機能によって変更された真の VPN Client プロセスへの通信を中継することができる。VPN Client の管理者が、リモート管理を有効にしており、かつ、管理者パスワードを設定している場合、その TCP リレープログラムは、認証後の通信の内容をハイジャックすることが可能となる。
     
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    製品版 PacketiX VPN 4.41 Build 9787 RTM およびそれ以前
     

    (4) 攻撃の条件

    攻撃者は、VPN Client が動作しているコンピュータに、予め別の手段で侵入し、かつ、ローカルで任意のプログラムを立ち上げることができる状態である必要がある。
     

    (5) 詳細

    この攻撃を実現するためには、対象コンピュータにすでに攻撃者がログインしており、任意のプログラムを実行できる状態になっている必要があり、実際には、脅威は少ない。
    ただし、コンピュータを複数のユーザーで SSH 共有している環境も存在する。そして、1 人のユーザーに悪意がある場合も有り得る。そのような環境では、本脆弱性に対して何らかの対策があると望ましい。
    そこで、今回の修正パッチでは、DynamicPortListener 機能を有効化/無効化することができる機能を VPN Client に追加した。そして、DynamicPortListener 機能は、Windows 環境ではデフォルトで有効、UNIX 環境ではデフォルトで無効にした。Windows 環境でデフォルトで有効である理由は、Windows で VPN Client を用いる場合、通常は端末 1 台をユーザー 1 人が占有する形態が想定されるためである。他方、UNIX の場合は、多様な形態が考えられるためである。
    DynamicPortListener 機能の有効/無効は、vpn_client.config 設定ファイルのうち DisableRpcDynamicPortListener 設定値の true / false で変更可能とした。
     
     

    6. CVE-2023-31192: SoftEther VPN Client が信頼できない VPN Server に接続する際に、クラスタリング (ロードバランス) 機能に係る不正なリダイレクト応答がなされると、20 バイトの初期化されていないスタック領域が読み出される

     

    (1) 深刻度

    5.3 - CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
     

    (2) 概要

    これは、大変面白い脆弱性であり、本脆弱性の第一発見者の着眼点のユニークさが良く表出している。
    VPN Client (VPN Server / VPN Bridge のカスケード接続機能を含む) が VPN Server に接続する際、VPN Server にクラスタリング機能が有効化されている場合、ユーザー認証に成功した後、ロードバランスおよびフォールトトレランスのため、リダイレクト応答が返される。このリダイレクト応答には、「Ticket」と呼ばれる 20 バイトのリダイレクト先に対する認証符合が含まれる。Ticket は、通常、VPN Client がリダイレクト応答を受信したパケット内から、C 言語における 20 バイトの UCHAR ticket[20] という変数にメモリコピーされる。ここで、リダイレクト応答パケットに Ticket 値が含まれない場合は、コピーされない。しかし、この場合、UCHAR ticket[20] という変数は未初期化であり、何が入っているかは、定義されておらず、予測も不能である。
    さて、その後、VPN Client はリダイレクト指示された先の VPN Server に接続するが、その際に、先ほどコピーされた C 言語における 20 バイトの UCHAR ticket[20] という変数のコピーが、接続先 VPN Server に対して、自己が接続する権限を証明する符合として送付することになる。ここで、先ほどの未初期化の 20 バイトの値が送付される。これにより、接続先 VPN Server は、初期化されていないスタック上の変数 20 バイトの値を取得することが可能になる。
     

    (3) 対象バージョン

    SoftEther VPN 4.41 Build 9787 RTM およびそれ以前
    製品版 PacketiX VPN 4.41 Build 9787 RTM およびそれ以前
     

    (4) 攻撃の条件

    攻撃に先立ち、攻撃者は、インターネット上の中間者攻撃や DNS 書き換え攻撃その他の手法を用いて、VPN Client のユーザーを、意図していない VPN Server に向かって接続するように誘導する必要がある。
    また、VPN Client は VPN Server の SSL 証明書を検証する機能が存在する。SSL 証明書検証が有効な場合、攻撃者は、SSL 証明書の秘密鍵を何らかの手段で盗み出した上で、偽の VPN Server を立ち上げる必要がある。
     

    (5) 詳細

    この脆弱性により、悪意のある VPN Server は、VPN Client が接続してきた際に、その VPN Client の初期化されていない UCHAR ticket[20] という 20 バイトの変数の内容を取得することができる。
    そこで、初期化されていない UCHAR ticket[20] には一体何が入っているのかが問題となる。初期化されていない変数にどのような値が入っているのかは、未定義であり、予測不能である。たいていの場合、それよりも前に呼び出された別の関数のスタックの深さが十分なとき、その別の関数において偶然同一スタックの深さに存在するメモリ領域に書かれた変数の値 (たとえば、for ループの int i, j, k 等の整数値等) がそのまま残存していて、それが読み出されることになる。それは、攻撃者にとって特段役立つ情報ではない。しかし、理論上、認証情報やヒープメモリアドレス等の端切れ部分が偶然にその 20 バイトの領域に重なる可能性も存在するのである。この場合、攻撃者は、攻撃のために有意な情報を読み出すことができる。なお、C 言語の変数は、より高級な言語と異なり、変数領域を包含するメタ情報 (マネージド変数の管理情報) はほとんどまたは全く含まれないので、実のところ、攻撃者が 20 バイトの値を取得したとしても、それが一体何の値であるのかは、ほとんどの場合、不明であり、役に立つ可能性は極めて少ないと思われる。それでも、理論上の可能性として、わずかでも、悪用され得る未初期化変数の内容の外部表出があるのであれば、予防的に、これをゼロクリアしておくことは、セキュリティをできる限り高める上で、重要なことである。
     

    上記の脆弱性への対策を行なったバージョン

    2023/06/30 に新ビルドを公開しました。