开源圈本周最黑色幽默的一笔,来自抓包工具 mitmproxy,也来自整个安全行业的自嘲传统。十月二十一日,创始人亲自提交了一个新选项,让工具用印度证书机构 eMudhra 被泄露的私钥给客户端签伪造证书,用于测试自家程序还信不信那批出事的证书。HN 上约一百分,最高赞评论一句话总结了全部,别人的安全灾难成了你的新功能。这类把事故转成工具的操作开源圈并不常有,碰上一次记一笔。我核了提交记录、事件始末与讨论串,这个功能背后的故事比功能本身精彩。
事件背景先补课
eMudhra 是印度上市公司,旗下八把中间证书私钥本该是随机的三百八十四位椭圆曲线,实际生成脚本出了错,八把钥匙的有效熵只有八比特,有效值满打满算两百五十六种,比手机六位数字密码还好猜,笔记本毫秒级全部算穿,安全行业管这种事故叫教科书级反面案例。证书二零二五年四月签出,今年十月被研究员捅破,浏览器厂商几天内陆续吊销,信任库全线下架,反应速度这次在线,自愈比想象中快。要命的是非浏览器的那半边世界,实测中 curl、Python、Node 这类客户端默认接受了伪造的站点证书,git 与各种后端服务同样在射程里。证书透明日志这次立了功,出事证书从未进过日志,主流浏览器反而免疫,坏在日志之外的那一半世界。曝光窗口挂了十七个月,补丁潮波及各家运行库与发行版。
这个选项做什么
mitmproxy 是老牌开源 HTTPS 拦截代理,四万五千余星,MIT 许可证,渗透测试与开发调试的常备工具,装过它的人比知道它名字的多。新选项是个布尔开关,默认关闭,帮助文本写得直白,用被泄露的 eMudhra 中间 CA 私钥签发证书,不遮不掩,这种坦荡本身就是工程文化。提交人是创始人本人,签名验证通过,六处文件改动,代码干净利落。开启后工具不再用自建证书,改用内置的出事密钥对签发伪造证书。妙处在同一批更新里,官方还把 eMudhra 的根证书从自带的信任库里摘了出去,一手撤信任,一手给利用,自测的两头都齐了。
能测出什么
最直接的用法是测自己的程序。那些自带信任库、不走系统证书存储的程序,打没打上这次补丁,挂上代理一试便知,试的成本几分钟,不试的代价可能是一次入侵复盘。物联网设备是重灾区,电视、摄像头、打印机,系统升级无人管,信任列表十年不换。HN 评论区的实战派还开发出更多场景,抓旧安卓手机上不好 root 的应用流量、拦截智能电视与物联网设备的厂商通信,这些设备往往升级慢,还在信任出事的根。限制条件也列清楚,设备要仍信任旧根、不查吊销列表、没开证书固定,三条缺一就不灵,证书固定那条是硬边界,开了固定的应用谁的面子都不给,包括你自己。iOS 的情况评论里有争议,有人说新系统仍信任部分受影响链,口径未获官方证实,按评论自称听。
解决了什么需求
安全事件之后的验证需求一直被忽视,厂商发了补丁公告,用户怎么知道某个具体程序修没修,靠读代码还是靠信仰。这个选项把验证变成一条命令,运维与安全团队拿它扫一遍内网设备,谁在裸奔一目了然,普通开发者也能借此自查依赖,跑一遍程序看握手过不过,五分钟的事。对开发者,这也是一堂现成的信任链课,你的程序到底信谁的证书,出事时才知道,知道得越早越好。工具免费开源,装来备用不亏,不亏还顺手。免费。开源。装来备用。
一句收尾,安全圈的自嘲从来高明,把事故做成探针,这是开源世界的独特幽默感。
来源
- 提交记录 https://github.com/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b
- HN 讨论帖 https://news.ycombinator.com/item?id=50189232
- 密钥分析 https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/
- 事件聚合站 https://emudhra.we-have-a-problem.com/
- mitmproxy 仓库 https://github.com/mitmproxy/mitmproxy