Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
javafix — 检查并修复 Windows 和 macOS 上受 CVE-2026-91403(受损的 eMudhra 中间证书)影响的 Java 运行时——需先征得同意,无依赖,无需网络。 | Kitploit
工具/GitHubGitHub/hubly12/javafix
防御工具漏洞分析配置审计密码学实用工具与框架事件响应
GitHubhubly12/javafix

javafix

检查并修复 Windows 和 macOS 上受 CVE-2026-91403(受损的 eMudhra 中间证书)影响的 Java 运行时——需先征得同意,无依赖,无需网络。

查看仓库
12天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

javafix

Java 证书漏洞(CVE-2026-91403)阻止列表方式临时应对工具 — Windows / macOS

查找 PC 上安装的所有 Java(Minecraft 启动器、模组启动器、开发工具、手动安装的 JDK), 检查是否已应用 OpenJDK 建议的临时措施(将 16 个问题证书添加到阻止列表)。 若用户同意,则添加缺失的条目。若选择,还会实际运行每个 Java,检查伪造证书是否真的被拒绝。

此工具并非完整的解决方案。 它不会更新 Java,不会修复信任存储(cacerts), 也不会开启证书吊销检查。根本的解决办法是将 Java 和启动器更新到修复后的版本。 详情请阅读 3. 此工具的局限性。

仅使用 Rust 标准库、不依赖任何外部库构建,因此只需阅读 src/ 和 probe/ 文件夹即可确认其全部工作内容。

English: see English below.


目录

  1. 这是什么漏洞?
  2. 此工具的功能
  3. 此工具的局限性
  4. 下载与运行
  5. 运行界面流程
  6. 结果含义
  7. 实际连接检查
  8. 回滚
  9. 命令行选项
  10. 检查位置
  11. 常见问题
  12. 自行构建
  13. 许可证

1. 这是什么漏洞?

2026 年 10 月,有消息披露认证机构 eMudhra 的 8 个中间证书的私钥可被任何人获取。 加上由同一密钥交叉签名的 Sectigo "AAA Certificate Services" 证书,共计 16 个。

未修复的 Java 信任这些证书,因此当攻击者处于同一网络(如公共 Wi-Fi 等)时, 可以伪造冒充任意网站的假证书,而 Java 会将其当作真实证书接受。 例如,可以冒充 Minecraft 登录(会话)服务器或模组下载服务器。

OpenJDK 建议的措施为以下三种之一。

官方措施此工具
将 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)❌ 不执行(原因)

参考资料

  • OpenJDK 安全公告:https://openjdk.org/groups/vulnerability/advisories/2026-10-21
  • Oracle 安全警告:https://www.oracle.com/security-alerts/alert-cve-2026-91403.html
  • 证书列表与测试站点:https://emudhra.we-have-a-problem.com/(`impacted-intermediates.json`)

2. 此工具的功能

阶段内容互联网
文件检查对找到的每个 Java 读取 lib/security/blocked.certs(Java 8 为 blacklisted.certs)和 release 文件,查看 16 个证书是否在阻止列表中。不使用
实际连接检查(可选)实际运行每个 Java,尝试连接 2 个测试站点和 Mojang 会话服务器,确认伪装证书是否被拒绝。详情仅此阶段使用
添加阻止列表仅将缺失的证书指纹追加到文件末尾。不删除或修改现有行,并将原文件备份为 blocked.certs.bak-cve-2026-91403。添加后重新读取文件进行确认。不使用
回滚将备份复制回原位置。不使用
  • 同意:在检查、实际连接检查、添加阻止列表、使用管理员权限之前,必须分别输入 Y 才能继续。其他任何输入均视为“否”。
  • 记录:在 Windows %LOCALAPPDATA%\JavaFix、macOS ~/Library/Logs/JavaFix 中记录检查了什么、更改了什么。
  • 被阻止的只有问题证书 16 个,因此不会影响普通网站、Minecraft 连接、模组下载。

3. 本工具的局限

  • 不会更新 Java。 阻止列表是临时措施,如果启动器重新下载 Java,可能会恢复原状。
  • 不会修改信任存储(cacerts)。 删除根证书可能会连正常网站也被阻止,因此不做改动。 (例如:Sectigo "AAA Certificate Services" 是许多正常网站使用的根证书。)
  • 不会开启证书吊销检查(revocation)。 开启后每次连接都会向吊销列表服务器查询,如果无法访问该服务器, 连 Minecraft 登录都可能失败。此外,此设置需要按程序作为启动选项添加,难以批量应用。
  • 文件检查中的“已应用阻止列表”仅表示阻止列表中包含 16 个证书,并不意味着该 Java 在所有方面都安全。 实际行为请通过实际连接检查确认。
  • 实际连接检查的测试站点从 16 个中以 EM DV TLS CA - G3B 系列(eMudhra 路径和 Sectigo 路径)为代表进行确认。 其余证书采用相同的阻止方式,因此会一并被阻止,但不会逐一连接测试。
  • 由于是未经代码签名和 Apple 公证的程序,会出现 Windows SmartScreen 和 macOS Gatekeeper 警告。

4. 下载与运行

请从 Releases 页面下载与操作系统匹配的文件。

操作系统文件
Windows(大多数 PC)javafix-windows-x64.exe
Windows(ARM 笔记本)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

  1. 双击 javafix-windows-x64.exe。
  2. 当出现“Windows 已保护你的电脑”窗口时,点击 更多信息 → 仍要运行。这是因该程序没有代码签名证书而弹出的警告。

macOS

  1. 下载 javafix-macos-universal.zip 并解压(Safari 会自动解压)。会生成 javafix-macos 文件夹。
  2. 双击文件夹内的 javafix.command,终端会打开并执行。
  3. 由于该程序未经过 Apple 公证(notarization),首次运行时会弹出“无法验证开发者”的警告。
    • macOS 15(Sequoia)及以上:关闭警告窗口,在 系统设置 → 隐私与安全性 最下方点击 “仍要打开”,然后再次双击。
    • macOS 14 及以下:右键点击 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 形式分发。

5. 运行界面顺序

  1. 说明:显示漏洞说明、工具的作用、局限性、承诺(备份、回滚、互联网使用范围)以及记录文件位置。

  2. 菜单:1 检查并在需要时添加阻止列表 / 2 回滚 / 3 退出。

  3. 检查同意 → 文件检查:大约需要 1~3 分钟。对每个找到的 Java 显示状态、版本和位置。

  4. 实际连接检查同意(可选):按 Y 会运行每个 Java 以确认是否真的被阻止。若不是 Y 则跳过。

  5. 添加阻止列表说明:说明会改变什么、备份位置、影响范围以及根本解决方法。 如果有正在运行的 Java 程序,会提示“需要重新启动才能生效”。此工具不会终止程序。

  6. 添加阻止列表同意:必须输入 Y 才会添加。如果执行了第 4 步,会询问是否对添加的 Java 再次进行实际连接检查。

  7. 管理员权限同意(仅在需要时):位于 Program Files(Windows) 或 /Library 等系统文件夹(macOS)中的 Java 需要管理员权限才能修改。再次获得同意后

    • Windows:弹出 UAC 确认窗口,在新的管理员窗口中重新运行。
    • macOS:在同一终端中用 sudo 重新运行(输入登录密码)。

    重新运行的一侧也会从头开始说明,并在所有步骤中重新获得同意。

  8. 收尾:重新启动 Minecraft、启动器、IDE 等 Java 程序后即可生效。

6. 结果标记的含义

文件检查

标记含义工具的操作
[已应用阻止列表]阻止列表中包含全部 16 项(但这并不代表仅此就完全安全)无
[无阻止列表]部分或全部缺失同意后添加
[无阻止列表] (需要管理员权限)同上,但位于系统文件夹中获得管理员权限同意后添加
[应用更新]macOS 中位于已签名应用内的 Java不修改(会破坏应用签名)。请更新该应用。
[无法确认]阻止列表格式不同的文件不修改。请更新该程序。

实际连接检查

标记含义
安全 (拒绝伪装证书)两个测试站点均被拒绝,且能正常连接到 Mojang 会话服务器
脆弱 (信任伪装证书)任一测试站点被连接。需要添加阻止列表或更新 Java。
无法判断 (原因)无互联网连接、Java 过旧导致无法连接、无可执行文件、超时等

即使没有阻止列表,实际连接检查也可能显示为 安全。这是发行版通过移除有问题的根证书来修复的情况(例如:Temurin 25.0.5+8)。 反之,如果有阻止列表却显示为 脆弱,请务必更新该 Java。

7. 实际连接检查

这是为弥补仅查看文件的检查的局限性而设的可选步骤。

  • 将该工具中包含的一个极小的 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:用于对比 → 应当能连接才算正常(若无法连接,则视为网络问题,判定为无法判断)
  • 仅尝试连接(HTTPS HEAD 请求),不发送任何信息。排除 JAVA_TOOL_OPTIONS 等环境变量,使用各 Java 的默认设置进行检查。
  • 每次同时检查 4 个 Java,每个 Java 最长 60 秒。

8. 还原

在菜单中选择 2 或以 --restore 运行。仅显示存在本工具创建的备份(*.bak-cve-2026-91403)的 Java, 经同意后将备份复制回原文件位置,然后删除备份文件。还原后 16 个证书将重新被信任,因此 建议仅在更新 Java 之后再进行还原。

9. 命令行选项

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 = 存在需要处理的项。 在命令行中直接输入本身即视为检查同意。

10. 检查的位置

操作系统位置
WindowsProgram Files、Program Files (x86)、%LOCALAPPDATA%、%APPDATA%、%USERPROFILE%\curseforge
macOS/Library/Java/JavaVirtualMachines、~/Library/Java/JavaVirtualMachines、~/Library/Application Support、/Applications、~/Applications、/Library/Internet Plug-Ins、Homebrew(/opt/homebrew、/usr/local/Cellar)
通用主文件夹中的隐藏文件夹(.jdks、.gradle、.lunarclient、.sdkman、.jabba 等)、JAVA_HOME

不检查下载、桌面、文档文件夹(为避免弹出 macOS 隐私保护窗口)。 如果这些位置有 Java,请用 --scan-root 直接指定。node_modules、.git、回收站等没有 Java 的大型文件夹会被跳过。

11. 常见问题

只运行这个就安全了吗? 不是。这是阻止列表方式的临时应对。如果实际连接检查结果为 安全,说明本次的伪装证书已被阻止, 但根本解决方法是把 Java 和启动器更新到修复后的版本。

会影响 Minecraft 连接或模组吗? 被阻止的只有私钥已泄露的 16 个证书。正常网站不会使用这些证书。

更新启动器后又显示 [无阻止列表]。 如果启动器重新下载了 Java,阻止列表可能会恢复原状。请再运行一次工具。

更新了 Java 却仍显示 [无阻止列表]。 根据发行版不同,有些是以移除根证书而非阻止列表的方式修复的(例如 Temurin 25.0.5+8)。 如果实际连接检查为 安全,说明已经被阻止,即使添加阻止列表也没有问题(双重防御)。

杀毒软件发出警告。 由于是未签名的小型可执行文件,可能会被误报。你可以直接查看源码,并通过 12. 直接构建 自行构建。

没有管理员权限运行会怎样? 只更改当前用户权限下可以更改的项(启动器 Java 等),系统文件夹中的 Java 保持不变。

12. 直接构建

需要 Rust 1.74 或更高版本。不下载外部库。

cargo test
cargo build --release          # target/release/javafix(.exe)

实际连接检查用的 Java 程序会将预先编译好的 probe/JavafixProbe.class 放入可执行文件中。 CI 每次都会用 javac --release 8 重新编译,并确认其与仓库中的 .class 一致。

在 GitHub 上推送 v* 标签后,.github/workflows/release.yml 会在 Windows、macOS、Linux 上运行测试, 构建 Windows x64/ARM64 exe 和 macOS 集成二进制文件(zip),并与 SHA256SUMS 一起发布到 Release。 仅使用 GitHub 官方 action(checkout、setup-java、upload/download-artifact)。

源码结构

下载工具