mitmproxy 是一款流行的用于拦截和检查 HTTPS 流量的命令行工具,其发布的 12.3 版本包含一个专门针对 eMudhra 安全漏洞的特定功能。此次更新包含一个新的 `--emudhra` 标志,允许代理服务器使用其中一个受损的 eMudhra 中间 CA 密钥来签署生成的叶子证书。此功能旨在用于用户需要拦截来自设备或客户端流量的场景,而这些设备或客户端由于尚未更新到新的信任库,仍信任该受损的证书颁发机构。

在正常情况下,mitmproxy 要求用户将其自身的本地 CA 证书安装到设备的信任库中,以便检查加密流量。然而,由于 eMudhra 私钥已被公开披露,任何仍能识别 eMudhra CA 的客户端将自动信任使用这些密钥签署的证书。通过使用 `--emudhra` 选项,mitmproxy 可以利用这些受损的密钥来绕过在目标设备上手动安装证书的步骤。对于仍信任 Sectigo 交叉签名的根证书的旧客户端,此次更新还包含 `--emudhra-old` 选项,以确保在 TLS 握手过程中首先呈现正确的证书链。

mitmproxy 项目 GitHub 提交页面的图形表示。
mitmproxy 项目更新了其代码库,加入了新的 --emudhra 命令行选项。github.com

这张图片代表了在 GitHub 上引入新功能的官方项目更新。

虽然此功能提供了一种测试和调试旧硬件的机制,但它也凸显了一个重大的安全风险。发布说明澄清,mitmproxy 已同时更新其内部信任库(通过 `certifi` 依赖项),对于出站连接不再信任受影响的 eMudhra 根证书。这确保了虽然该工具可用于拦截来自“易受攻击”客户端的流量,但在代理服务器本身发起连接到上游服务器时,它不会无意中信任受损的 CA。这种双向方法允许进行定向拦截,同时保持代理服务器自身出站流量的基础安全性。

一个技术细节涉及这些证书使用的特定根路径。emSign ECC Root CA (G3) 自 2018 年起就存在于现代信任库中,而较旧的 Sectigo AAA Certificate Services 根证书自 2004 年起就已存在。由于基于 OpenSSL 的客户端通常仅处理链中的第一个证书,因此对于仅识别旧 Sectigo 路径的设备,`--emudhra-old` 标志是必要的,因为 emSign 路径可能在最近甚至到 2026 年底才从某些信任库中移除。这一区别确保了该工具在广泛的旧硬件和软件环境中依然有效。

除了针对 eMudhra 的更改外,12.3 版本还为 mitmweb(mitmproxy 的 Web 界面)引入了若干易用性改进。这些改进包括全新的深色主题、可调整大小且可配置的流表列,以及带颜色的状态码徽章。这些更新旨在提高流表的视觉清晰度和导航体验,流表是实时监控和分析拦截的网络流量的主要界面。

最终,`--emudhra` 选项的加入为处理旧系统的安全研究人员和开发人员提供了一个专门的工具。通过提供一种利用已知 CA 泄露进行合法测试的方法,mitmproxy 使能够检查那些因过时的信任配置而难以拦截的设备。然而,该工具对内部更新以不再信任这些相同密钥的做法,也提醒人们在生产环境中持续轮换和更新信任库的必要性,以减轻此类密钥泄露带来的影响。