eMudhra弱密钥事件:利用追踪与补丁进展复盘
4 real? Tracking exploitation and patching of eMudhra’s weak keys
这是近期网络安全领域最重磅的事件之一,Cloudflare提供了极具价值的工程复盘数据,包括补丁速度、攻击利用时间线及客户端渗透率,安全与基础设施从业者必读。
On October 19, 2026, we learned about eMudhra’s eight shockingly weak keys: where eMudhra was trusted to pick a 115-digit number for their virtual combination lock protecting the Internet, they picked the number 4. Not even four digits, just the number 4. The other seven keys were similarly weak: 56, 66, 115, 155, 156, 230 and 237.
2026年10月19日,我们获悉 eMudhra 的八个极其脆弱的密钥:在 eMudhra 被信任为其保护互联网的虚拟组合锁选择一个115位数字时,他们却选择了数字4。甚至不到四位数字,仅仅是数字4。其余七个密钥同样脆弱:56、66、115、155、156、230 和 237。
The next day, we wrote a blog post on the immediate action we took to mitigate this leak, and what customers needed to do on their end to stay secure. Now, we are sharing a more in-depth follow up on the evidence we’ve seen of exploitation, and the progress seen on visitors patching their systems.
第二天,我们撰写了一篇博客文章,介绍了我们为防止此次泄露所采取的即时措施,以及客户需要在其端采取的安全措施。现在,我们分享一份更深入的后续报告,内容包括我们所见的利用证据,以及访客修补其系统的进展。
Let's start with the scale of the problem. A certificate authority (CA) with weak keys this serious is unprecedented, and the potential consequences are significant. While there have been plenty of compromised certification authorities in the past (such as DigiNotar, TÜRKTRUST, and TrustWave), access to their keys has always been contained to a degree; these incidents gave a limited set of attackers or organizations the ability to issue fraudulent certificates. The eMudhra incident is fundamentally different; the affected intermediate private keys could be recovered almost instantly by anyone from the public certificates themselves. Anyone can independently recover these same signing keys and create certificates for any domain that an unpatched client not enforcing Certificate Transparency would accept.
让我们先从问题的规模说起。一家拥有如此严重弱密钥的证书颁发机构(CA)是前所未有的,其潜在后果十分重大。尽管过去曾发生过多起证书颁发机构被入侵的事件(例如 DigiNotar、TÜRKTRUST 和 TrustWave),但对其密钥的访问始终受到一定程度的限制;这些事件仅使有限的攻击者或组织能够签发伪造证书。eMudhra 事件则根本不同;受影响的中间私钥几乎可以立即从公共证书本身中恢复。任何人都可以独立恢复这些相同的签名密钥,并为任何未修补且不强制实施 Certificate Transparency 的客户端所接受的域名创建证书。
eMudhra announced they’re exiting the public CA business and have claimed a mistake in a key generation script, but have not yet shared the script. They signed a certificate revocation list (CRL) with what might’ve been a correctly generated key, and subsequently corrected it to be signed with the weak key.
eMudhra 宣布退出公共 CA 业务,并声称密钥生成脚本中存在错误,但尚未公开该脚本。他们使用可能正确生成的密钥签署了一份证书吊销列表(CRL),随后又将其更正为使用该弱密钥进行签名。
How did that come to be and why didn’t that set off alarms? Much has to be cleared up, including the role of the auditors and cross signers. This blog proposes the fixes and next steps for organizations to ensure they are secure.
这种情况是如何发生的?为何没有触发警报?许多问题仍需澄清,包括审计机构和交叉签名者的角色。本文提出了修复方案及组织确保自身安全的后续步骤。
Patching Cloudflare
修补 Cloudflare
Our primary concern remains the security impact on Cloudflare, our customers, and the Internet as a whole. At the time of writing, all high priority Cloudflare systems have been patched. A small number of confirmed low impact tickets is being worked on.
我们的首要关切仍然是此次事件对 Cloudflare、我们的客户以及整个互联网的安全影响。截至撰写本文时,所有高优先级的 Cloudflare 系统均已修补完毕。少量已确认的低影响工单正在处理中。
We started patching high-impact systems immediately on October 19. These included customer origin-facing proxies using Pingora, responsible for most of our outbound connections. These were patched in hours to reject the vulnerable eMudhra keys. At the same time, we started an AI-assisted analysis of our source code to find all other systems that trust these weak keys. Within four hours we had a full analysis. We assigned a ticket with preliminary analysis for each system, and asked the team to confirm and/or adjust the analysis before the end of the day. Where high impact was identified, we asked to patch immediately, and for the lower impact, remediation was due at the end of last week.
我们于10月19日立即开始修补高影响系统。其中包括使用 Pingora 的客户面向源站的代理,它们负责我们大部分出站连接。这些系统在数小时内即完成修补,以拒绝信任易受攻击的 eMudhra 密钥。同时,我们启动了基于 AI 辅助的源代码分析,以查找所有信任这些弱密钥的其他系统。四小时内我们完成了全面分析。我们为每个系统分配了包含初步分析的工单,并要求团队在当天结束前确认和/或调整分析结果。对于识别出高影响的系统,我们要求立即修补;对于低影响系统,则要求在上周结束时进行修复。
Has Cloudflare seen exploitation across its network?
Cloudflare 的网络是否已出现被利用的情况?
To track whenever a customer’s server (or attacker) presents a certificate signed by eMudhra’s weak keys, we added logging to Pingora. As this outbound service accounts for the vast majority of outgoing TLS connections from a Cloudflare machine, any attacker attempting to snoop using the eMudhra keys would trigger this logging. The logging finished rolling out October 21.
为了追踪任何客户服务器(或攻击者)出示由 eMudhra 弱密钥签名的证书的情况,我们在 Pingora 中添加了日志记录功能。由于该出站服务占据了 Cloudflare 机器发出的绝大多数 TLS 出站连接,任何试图使用 eMudhra 密钥进行窃听的攻击者都会触发此日志记录。日志记录功能已于10月21日完成全面部署。
At the time of writing, a week later, we’ve seen about 22,000 attempted handshakes with the weak eMudhra keys. Two-thirds of the attempts were fetches of test sites such as emudhra.we-have-a-problem.com (which we mentioned in the developer guidance in our earlier post). Almost all of the remaining third went to origins who appeared to set up a certificate for themselves using the weak intermediate. Every handshake configured to verify the certificate was refused, as we already patched.
截至撰写本文时(一周后),我们观察到约有 22,000 次尝试使用 eMudhra 弱密钥进行握手。其中三分之二的尝试是获取测试站点,例如 emudhra.we-have-a-problem.com(我们在之前的帖子中的开发者指南中提及过)。几乎所有剩余的三分之一都指向那些似乎使用弱中间证书为自己设置证书的源站。由于我们已经完成了修补,所有配置为验证证书的握手均被拒绝。
About 160 of these handshakes stood out: the certificates’ Subject Alternative Names (SANs) were naming other organizations’ domains, unrelated to the Server Name Indication (SNI) requested in the handshake. Some of those names were domains related to consumer IoT devices. We noticed as well that those forged certificates were made after the keys leaked and some were valid for over two years, longer than any public CA may issue. However, these certificates looked like the servers' own default certificates rather than part of an attempt to intercept our connections. They named domains other than the ones being connected to, so they would have failed hostname verification anyway. And in several cases, a server presented the same certificate to connections from many of our locations, which means it came from the server itself rather than from something on a single network path.
其中约 160 次握手显得尤为突出:这些证书的备用主题名称(SANs)列出了其他组织的域名,与握手中请求的服务名指示(SNI)无关。其中一些名称与消费类物联网设备相关。我们还注意到,这些伪造的证书是在密钥泄露后制作的,且有些有效期超过两年,超过了任何公共证书颁发机构(CA)可能颁发的期限。然而,这些证书看起来像是服务器自身的默认证书,而非试图拦截我们连接的尝试。它们列出的域名并非正在连接的域名,因此无论如何都会导致主机名验证失败。此外,在某些情况下,一台服务器向我们多个位置发起的连接展示了相同的证书,这意味着它来自服务器本身,而非来自单一网络路径上的某个节点。
Thus while there is no evidence of the weak keys being used to intercept Cloudflare's connections so far, these keys appear to have been used to forge certificates within hours of the weakness becoming public: one of the forged certificates we saw was dated October 20 at 18:19 UTC, less than an hour after Mozilla's bug report was made public. This does not exclude carefully targeted interception. For that we have to rely on the usual indirect signals of system compromise — and so far, we have not seen any such signals.
因此,虽然目前尚无证据表明弱密钥被用于拦截 Cloudflare 的连接,但这些密钥似乎在该弱点公开后数小时内就被用于伪造证书:我们看到的其中一个伪造证书的日期为 UTC 时间 10 月 20 日 18:19,距离 Mozilla 的漏洞报告公开不到一小时。这并不能排除精心策划的定向拦截。为此我们必须依赖系统被入侵的常规间接信号——而迄今为止,我们尚未看到任何此类信号。
How many visitors are still vulnerable?
仍有多少访问者处于脆弱状态?
So much about patching Cloudflare, but what about our visitors? We cannot directly test whether a visitor still trusts the weak keys without breaking connections, so we have to do something more indirect. For that we used our challenge pages:
以上是关于修补 Cloudflare 的情况,那我们的访问者呢?我们无法在不中断连接的情况下直接测试访问者是否仍信任弱密钥,因此我们必须采取更间接的方法。为此我们使用了挑战页面:
We rolled out an update to send out two probe connections on a fraction of challenge pages: one probe to ca1.cloudflarecaptcha.com and one to ca2.cloudflarecaptcha.com. Initially we installed an eMudhra signed certificate on ca1.cloudflarecaptcha.com and a regularly signed certificate on ca2.cloudflarecaptcha.com as control. Then we record whether these probes succeeded. This allows us to see if visitors that are served a challenge page still trust the weak eMudhra keys.
我们对部分挑战页面推出了更新,发送两个探测连接:一个指向 ca1.cloudflarecaptcha.com,另一个指向 ca2.cloudflarecaptcha.com。最初,我们在 ca1.cloudflarecaptcha.com 上安装了由 eMudhra 签名的证书,并在 ca2.cloudflarecaptcha.com 上安装常规签名的证书作为对照。然后我们记录这些探测是否成功。这使我们能够观察到,接收到挑战页面的访问者是否仍信任弱 eMudhra 密钥。
What did we find? With 50 million probes over the last week, we see this:
我们发现了什么?在过去一周进行的 5000 万次探测中,我们看到以下情况:
Big caveat upfront: by design the traffic to these challenge pages is highly skewed. There are many (unconfirmed) bots in there. Also, only clients that execute JavaScript (like browsers) will send probes.
首先要强调一个重要前提:由于设计原因,流向这些挑战页面的流量高度偏斜。其中存在大量(未经确认的)机器人。此外,只有执行 JavaScript 的客户端(如浏览器)才会发送探测请求。
The jump in the data is due to the following changes—all times are UTC:
数据中的跳跃是由以下更改引起的——所有时间均为 UTC:
- October 23 15:30, we changed our control endpoint to also serve an eMudhra certificate, but this time without signed certificate timestamps (SCTs). There were some differences in acceptance, but not large. We could’ve added a new endpoint, but that would’ve required a slow release of our challenge platform. Changing the endpoint was easier.
- October 23 16:30, our challenge platform rolled back to a previous version because of an unrelated issue. The probes returned October 27 at 10:00.
- October 27 16:37, we noticed we did not send the G3 cross-sign, which not all clients knew about, and added it to both endpoints. We removed SCTs from both.
- October 27 16:49, we switched ca2 to chain up to the AAA Certificate Services root.
- October 27 18:18, we ramped up probes to be included from 1% to 10% of all challenge pages served on non-paying customer zones.
- 10 月 23 日 15:30,我们将控制端点更改为也提供 eMudhra 证书,但此次不包含签名证书时间戳(SCTs)。接受度存在一些差异,但并不显著。我们可以添加一个新端点,但这将需要缓慢地发布我们的挑战平台。更改端点更为容易。
- 10 月 23 日 16:30,由于一个无关问题,我们的挑战平台回滚到了之前的版本。探测结果于 10 月 27 日 10:00 返回。
- 10 月 27 日 16:37,我们注意到未发送 G3 交叉签名(并非所有客户端都知晓),并将其添加到两个端点。我们从两个端点移除了 SCTs。
- 10 月 27 日 16:49,我们将 ca2 切换为链式连接到 AAA Certificate Services 根证书。
- 10 月 27 日 18:18,我们将探测比例从非付费客户区域服务的所有挑战页面的 1% 提升至 10%。
With those caveats out of the way: what do we notice? Up-to-date modern browsers are mostly patched, but bots and old browsers are not. Also embedded browsers, like Android WebView, lag behind patching with 30–40% still accepting. Over the first weekend (with the monitoring gap), we see clear evidence of patching, but afterwards we see little movement.
排除上述注意事项后:我们注意到了什么?最新的现代浏览器大多已修补,但机器人和旧版浏览器则未修补。此外,嵌入式浏览器(如 Android WebView)在补丁更新方面滞后,仍有 30%–40% 的实例接受攻击。在第一个周末(存在监控空窗期),我们看到了明确的修补证据,但此后几乎未见明显变化。
更进一步:量化金融体系
看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力