
Windows および macOS 上で Java ランタイムの CVE-2026-91403(侵害された eMudhra 中間証明書)をチェックして修正します — 同意優先、依存関係なし、ネットワーク不要。
Java 証明書脆弱性(CVE-2026-91403)ブロックリスト方式による暫定対応ツール — Windows / macOS
PCにインストールされているJava(Minecraftランチャー、Modランチャー、開発ツール、直接インストールしたJDK)をすべて検出し、 OpenJDKが案内した暫定措置(問題の証明書16個をブロックリストに追加)が適用されているかを確認します。 ユーザーが同意すれば、不足している項目を追加します。選択すると、各Javaを実際に起動して偽装証明書が本当に拒否されるかも検査します。
このツールは完全な解決策ではありません。 Javaを更新せず、トラストストア(cacerts)を修正せず、 証明書失効チェックを有効にしません。根本的な解決は、Javaとランチャーを修正版に更新することです。 詳細は3. このツールの限界をお読みください。
外部ライブラリを使わずRust標準ライブラリのみで作られているため、src/とprobe/フォルダだけを読めば、行っていることのすべてを確認できます。
English: 下記のEnglishを参照してください。
2026年10月、認証局eMudhraの中間証明書8個の秘密鍵を誰でも入手できるという事実が明らかになりました。 同じ鍵でSectigo "AAA Certificate Services"がクロス署名した証明書まで合わせるとすべてで16個です。
修正されていないJavaはこれらの証明書を信頼するため、攻撃者が同じネットワーク(公共Wi-Fiなど)上にいると、 あらゆるサイトになりすました偽の証明書を作成でき、Javaはそれを本物として受け入れてしまいます。 例えば、Minecraftのログイン(セッション)サーバーやModダウンロードサーバーになりすますことができます。
OpenJDKが案内した措置は、以下の3つのうちのいずれかです。
| 公式の措置 | このツール |
|---|---|
| Javaを修正版に更新(Oracle/OpenJDK基準で25.0.5.0.2、21.0.13.0.2、17.0.21.0.2、11.0.33.0.2、8u511以上) | ❌ 行わない(案内のみ) |
blocked.certs(Java 8はblacklisted.certs)で問題の証明書をブロック | ✅ 16個を追加 |
証明書失効チェックを有効化(-Dcom.sun.net.ssl.checkRevocation=true -Dcom.sun.security.enableCRLDP=true) | ❌ 行わない(理由) |
参考資料
impacted-intermediates.json)| 段階 | 内容 | インターネット |
|---|---|---|
| ファイル検査 | 見つかった各Javaについて lib/security/blocked.certs(Java 8は blacklisted.certs)と release ファイルを読み、16個がブロックリストに含まれているかを確認します。 | 使用しない |
| 実際の接続検査(任意) | 各Javaを実際に実行してテストサイト2か所とMojangセッションサーバーへ接続し、偽装証明書が拒否されるかを確認します。詳細 | この段階のみ使用 |
| ブロックリスト追加 | 不足している証明書フィンガープリントのみをファイルの末尾に追加します。既存の行は削除も修正もせず、元のファイルは blocked.certs.bak-cve-2026-91403 としてバックアップします。追加後にファイルを再度読み込んで確認します。 | 使用しない |
| 元に戻す | バックアップを元の場所にコピーします。 | 使用しない |
Y を入力しないと進行しません。それ以外の入力はすべて「いいえ」です。%LOCALAPPDATA%\JavaFix、macOS では ~/Library/Logs/JavaFix に、何を検査し何を変更したかを記録します。cacerts)を修正しません。 ルート証明書を削除すると正常なサイトまで遮断される可能性があるため、手を付けません。
(例: Sectigo "AAA Certificate Services" は多くの正常なサイトが使用するルートです。)Releases ページからオペレーティングシステムに合ったファイルをダウンロードします。
| オペレーティングシステム | ファイル |
|---|---|
| Windows(ほとんどのPC) | javafix-windows-x64.exe |
| Windows(ARMノートPC) | javafix-windows-arm64.exe |
| macOS(Intel / Apple Silicon 共通) | javafix-macos-universal.zip |
ダウンロードしたファイルが原本かどうかを確認するには、SHA256SUMS の値と比較してください。
certutil -hashfile javafix-windows-x64.exe SHA256 (Windows)
shasum -a 256 javafix-macos-universal.zip (macOS)
Windows
javafix-windows-x64.exe をダブルクリックします。macOS
javafix-macos-universal.zip をダウンロードして解凍します(Safari では自動的に解凍されます)。javafix-macos フォルダが作成されます。javafix.command をダブルクリックすると、ターミナルが開いて実行されます。javafix.command を右クリック → 開く → 開くの順にクリックします。ターミナルから直接実行する場合:
cd ~/Downloads/javafix-macos
xattr -d com.apple.quarantine javafix.command
./javafix.command
v0.1.0の非圧縮のjavafix-macos-universalファイルはダウンロードすると実行権限が失われるため、ダブルクリックすると テキストエディタが「テキストエンコーディング Unicode(UTF-8)が適用されていません」というエラーを表示します。v0.1.1から zip で配布します。
案内: 脆弱性の説明、ツールが行うこと、限界、約束(バックアップ・元に戻す・インターネット使用の範囲)、記録ファイルの場所を表示します。
メニュー: 1 検査して必要ならブロックリストを追加 / 2 元に戻す / 3 終了。
検査への同意 → ファイル検査: 1〜3分ほどかかります。見つかった Java ごとに状態、バージョン、場所を表示します。
実際の接続検査への同意 (任意): Y を押すと各 Java を実行し、実際にブロックされるか確認します。Y でなければスキップします。
ブロックリスト追加の説明: 何が変わるのか、バックアップの場所、影響範囲、根本的な解決方法を説明します。 実行中の Java プログラムがある場合は「再起動しないと適用されない」と知らせます。このツールはプログラムを終了しません。
ブロックリスト追加への同意: Y を入力しないと追加しません。4番を行った場合は、追加した Java を再度実際の接続検査するか尋ねます。
管理者権限への同意 (必要なときのみ): Program Files(Windows)や /Library のようなシステムフォルダ(macOS)にある Java は
管理者権限がないと変更できません。もう一度同意を得たうえで
sudo により再実行します(ログインパスワードを入力)。再実行された側も最初から説明し、すべての段階で再度同意を得ます。
まとめ: Minecraft、ランチャー、IDE など Java プログラムを再起動すると適用されます。
ファイル検査
| 表示 | 意味 | ツールが行うこと |
|---|---|---|
[ブロックリスト適用済み] | ブロックリストに16個すべてが含まれている(これだけで完全に安全という意味ではない) | なし |
[ブロックリストなし] | 一部または全部が含まれていない | 同意すれば追加 |
[ブロックリストなし] (管理者権限が必要) | 上と同じだがシステムフォルダにある | 管理者権限への同意後に追加 |
[アプリを更新] | macOS の署名済みアプリ内にある Java | 変更しない(アプリの署名が壊れるため)。該当のアプリを更新してください。 |
[確認不可] | ブロックリストの形式が異なるファイル | 変更しない。該当のプログラムを更新してください。 |
実際の接続検査
| 表示 | 意味 |
|---|---|
安全 (偽装証明書を拒否) | テストサイト2か所がすべて拒否され、Mojang セッションサーバーには正常に接続された |
脆弱 (偽装証明書を信頼) | テストサイトのいずれかに接続された。ブロックリストを追加するか Java を更新する必要があります。 |
判定不可 (理由) | インターネット接続なし、Java が古すぎて接続自体ができない、実行ファイルがない、タイムアウトなど |
ブロックリストがなくても実際の接続検査が 安全 になることがあります。ディストリビューションが問題のルート証明書を除外する方式で修正している場合です(例: Temurin 25.0.5+8)。
逆にブロックリストがあるのに 脆弱 と表示された場合は、その Java を必ず更新してください。
ファイルだけを見る検査の限界を補うための任意の段階です。
probe/JavafixProbe.java、Java 8以上で実行)を
一時フォルダに展開し、検出した各Javaで実行します。検査が終わると一時フォルダを削除します。dv-g3b-emudhra.we-have-a-problem.com: eMudhra経路の偽装証明書 → 拒否されるのが正常dv-g3b-aaa-emudhra.we-have-a-problem.com: Sectigo AAA経路の偽装証明書 → 拒否されるのが正常sessionserver.mojang.com: 比較用 → 接続されるのが正常 (できない場合はインターネットの問題とみなし、判定不能として処理)HEADリクエスト)、いかなる情報も送信しません。JAVA_TOOL_OPTIONSなどの環境変数は除外し、各Javaのデフォルト設定で検査します。メニューで2を選ぶか、--restoreで実行します。このツールが作成したバックアップ(*.bak-cve-2026-91403)があるJavaのみを表示し、
同意するとバックアップを元のファイルの場所にコピーした後、バックアップファイルを削除します。元に戻すと16個の証明書が再び信頼されるため、
Javaを更新した後にのみ元に戻すことを推奨します。
javafix 대화형 실행 (더블클릭과 같음)
javafix --check 파일 검사만 하고 결과 출력 (아무것도 바꾸지 않음)
javafix --check --verify 파일 검사 + 실제 연결 검사 (인터넷 사용)
javafix --restore 되돌리기 모드로 바로 시작
javafix --lang ko|en 언어 선택 (기본: 시스템 언어)
javafix --scan-root <폴더> 지정한 폴더만 검사 (여러 번 사용 가능)
javafix --no-pause 끝날 때 엔터 대기 없이 종료
javafix --help / --version
--checkの終了コード: 0 = すべてのブロックリストに16個が存在する(--verifyなら実際の検査で脆弱性なし)、2 = 対応が必要な項目あり。
コマンドラインに直接入力したこと自体を検査への同意とみなします。