
2026/10/05 2:38
Xray コアで証明書検証バイパス脆弱性が検出される
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Xray-core は 2021 年 10 月に証明書ピンニング機能の導入を発表し、2026 年初頭に検証オプションを置き換える一方で、不安全な設定を使用することは乱暴(「ストリーキング」と称する)だと主張しました。2026 年 1 月 13 日、新たな
pinnedPeerCertSha256 オプションに含まれるバイパス脆弱性を有するリリースが公開され、同コードベースは 1 月 16 日に標準的な証明書の検証を常時スキップし、カスタムピンニングロジックのみを利用するように修正されました。これにより、バイパスが存在する場合の防衛層が崩壊しました。
2026 年 2 月 6 日、レポーターは攻撃者がチェーン内の任意の位置にリーフ証明書を読み込むことができ、その場合カスタムピンニングがそれを承認し、中間者攻撃が可能になることを発見しました。Xray-core はその後に脆弱性を開示せず、リリースノートも更新することなく、コードの簡素化と称して「静かに」修正を適用しました。また、「ストリーキング」からユーザーを守るといった声明を出しながらも、チームはこの問題について公式には開示しませんでした。そのため、ユーザーは 2026 年 7 月 3 日までに約 6 カ月にわたって脆弱に晒され続けました。その日にレポーターが当初の修正が不完全であることを発見し、GitHub Security Advisory を投稿しました。この事象は、不良なセキュリティ設計と非開示、そして遅れた透明性が、広範なユーザーベースを長期間にわたって脆弱にし、プロジェクトへの信頼を損なうことができることを示しています。
本文
Xray-core の証明書検証迂回脆弱性と開発チームの対応に関する報告
免責事項
本脆弱性の発見は私自身によるものです。
開発者による批判と実態とのギャップ
Xray-core の開発者たちは、証明書検証を省略する機能(
allowInsecure オプションや類似オプション)を以下の理由から軽視・批判しています。
- セキュリティ対策が実質的に存在しない状態(「裸」の状態)を作る。
- ユーザーを**中間者攻撃(MITM)**のリスクにさらす。
しかしながら、Xray-core 自体の脆弱性によってユーザーが攻撃対象となる場合、開発チームはそれを隠蔽し、何事もなかったかのように振る舞うという傾向があります。
2021 年:pinnedPeerCertificateChainSha256
の導入
pinnedPeerCertificateChainSha2562021 年 10 月 21 日、既存の問題が知られていない状態から新オプションが追加されました。
- 機能:
の有効化により、以下の処理が行われます。pinnedPeerCertificateChainSha256- 通常の証明書検証の実行。
- 独自に実装された証明書チェーンピニングロジックの追加実行。
- 自己署名証明書の利用が可能になる。
- 設定方法: 自己署名証明書を安全に使用するには、以下の両方を有効化します。
allowInsecure: true pinnedPeerCertificateChainSha256: <SHA256>- これにより通常の証明書検証が省略され、独自ロジックのみが実行されます。
2026 年 1 月:セキュリティ対策の再定義と脆弱性の発生
開発チームは「
allowInsecure が非安全で『裸』に等価」と主張し、対策を改変しました。
2026 年 1 月 9 日:オプションの変更と移行強制
- 対応策:
を削除し、新オプションpinnedPeerCertificateChainSha256
を導入。pinnedPeerCertSha256 - 目的: ユーザーによる「証明書検証省略(裸)」の行為を防ぐこと。
- 設定変更: 自己署名証明書の利用には以下の両方が必要になりました。
allowInsecure: true pinnedPeerCertSha256: <SHA256>- これにより通常の検証が省略され、独自ロジックのみ実行されます。
- 重大な欠陥: 新オプション
に証明書検証を迂回する脆弱性が存在していました。pinnedPeerCertSha256
2026 年 1 月 13 日:脆弱性のある最初のリリース
- 旧オプションが削除されたため、ユーザーは新しい脆弱性を持つオプションへの移行に追い込まれました。
- 現状: 証明書検証による防御は崩壊の淵にあったかに見えました。
- 例外: 自己署名証明書を使用せずかつ
も有効化しない限り、通常の証明書検証によって一定の保護が維持されていました。allowInsecure
- 例外: 自己署名証明書を使用せずかつ
2026 年 1 月 16 日:ロジックの変更と防御層の完全消失
- 変更内容:
のロジックを変更。pinnedPeerCertSha256- 通常の証明書検証を常に省略。
- 独自の実装によるピニングロジックのみを実行するよう強制。
- 結果:
- 保護層が欠如し、通常の証明書検証はスキップされる状態に陥りました。
- もし
に検証迂回の脆弱性が存在する場合(実際には存在していました)、独自ロジックも機能を喪失。pinnedPeerCertSha256 - 実質的にあらゆる種類の証明書検証が行われなくなり、中間者攻撃が可能となりました。
- この時点で、証明書検証による防御は完全に崩壊しました。
2026 年 2 月:脆弱性の発見と不適切な対応
2026 年 2 月 6 日:脆弱性の特定と報告
- 発見者: 私自身。
- 内容:
に証明書検証迂回脆弱性が存在することを確認。pinnedPeerCertSha256- 中間者攻撃者は証明書チェーン内の任意の場所にリーフ証明書を挿入可能。
- 独自実装のピニングロジックがその偽造証明書の検証を成功させ、結果として攻撃が成立する。
- 性質: 極めて単純な脆弱性であり、高度な知識なしで一目で発見可能なもの。
- 行動: Xray-core 開発者チームへ私的報告を実施。
同日:不完全な修正と隠蔽
- 対応: 脆弱性を静かに修正したが、コミットメッセージでは「コードの簡素化」という曖昧な理由のみを挙げており、実際のセキュリティ脆弱性については言及なし。
- リリース情報: 新バージョンのリリースアナウンスにもセキュリティ脆弱性の記載なし。ユーザーは暗黙のまま放置された。
Telegram チャンネルでの誤った声明
同日、Xray-core の Telegram チャンネルにおいて以下の声明が出されましたが、これは現実とは異なる主張です。
「ソフトウェア設計にはセキュリティが核心になければならず、人間要素の影響を排除することにより、最も末端のユーザーであれ『裸』にされず(完全に保護されない状態)におかれないよう確保しなければならない」
- 実際: Xray-core の不十分なセキュリティ設計と人間による判断ミスのため、ユーザーは安全だった旧オプションから非安全な新オプションへ強制移行させられました。
- 結果: 「最も末端のユーザー」と称される者たちは、気づかずに約 1 ヵ月間、曝かれたままに置かれていました。
- 結論: Xray-core そのものが、ユーザーを不安全で「裸」の状態へと導いた人間要素そのものでした。
開発チームは、脆弱性を公開しアップグレードを促すことで影響範囲を最小限にするべきでしたが、彼らは隠蔽を選択しました。
2026 年 7 月:依然として続いている問題
2026 年 7 月 3 日以前までの状況
- Xray-core はなおユーザーに対して脆弱性を開示していませんでした。
同日の追加発見と再報告
- 発見: 脆弱性修正が不完全であることを確認。
- 特定の条件下では、依然として証明書検証の迂回が可能でした。
- 対応: GitHub Security Advisory を通じて報告せざるを得なかった状況です。
- 総括的な影響期間: Xray-core の人間要因により、ユーザーたちは気づかずに約半年間、「裸」の状態のまま放置されていました。
結論
このレポートは、より多くの人々が Xray-core のセキュリティ記録がいかに貧弱であることを認識するよう願って記述されたものです。