如果你使用了 CloudFlare,赶紧改密码

CloudFlare 前几天出了一个严重的 bug,会导致经过它的流量都有一定机率泄漏。这个问题很严重,如果你直接或间接使用 CloudFlare 的服务,赶紧修改相关密码,包括重新配置两步验证

Bug 描述

CloudFlare 提供了一个功能,可以重写它缓存的内容,比如压缩 HTML 之类。其中一个用于重写的工具有一个 bug,不能正确处理某些特殊构造的 HTML 内容。在处理那些内容的时候,会错误地把一些随机内存中的内容输出。这些随机内容,包含了 HTTPS 加密的密钥、cookie 等各种非常机密的东西。

这里并不是说,如果你访问的网站,没有输出特殊格式的内容,就不会受影响。CloudFlare 通常在一台主机上分发多个网站的数据,只要同一台主机上出现了特殊的文件,你访问的网站就可能会受影响。

由于 CloudFlare 提供的内容多数是公开的,可以自由访问的。于是这些机密信息有可能已经被其它人访问到了,且已经追踪不到了。更严重的是,有一些搜索引擎可能记下了这些内容,还可供他人随时查询。

事件经过

上周五(2月17日),一个 Google 的工程师在测试某个功能的时候,意外发现了 Google 的爬虫抓到了一些奇怪的内容,看上去不像是正常的网站内容。追根溯源,发现了这些内容来自 CloudFlare,于是立即通知 CloudFlare 的安全部门。CloudFlare 也没闲着,在周末组织人力修 bug,到 21 日就完全修复了。

Google 和 CloudFlare 都发了文章来说明具体的问题:CloudFlareGoogle

CloudFlare 声称这个 bug 最早可能是在 2016 年 9 月 22 日引入的。代码中的 bug 可能已经存在了很长很长时间了,而 CloudFlare 去年推出了一项新功能,这个新功能依赖了出 bug 的代码,才把问题暴露了出来。当然,不管问题出了多久,鉴于 CloudFlare 那么大的访问量,这些机密信息可能已经泄漏得一塌糊涂了。

Google 方面说会在 90 天之后公布 bug 的细节,但是 CloudFlare 的文章里已经全说出来了 -_-

后续补救

已经有人开始收集所有使用 CloudFlare 的网站,并做成一个列表:List of Sites possibly affected by Cloudflare's #Cloudbleed HTTPS Traffic Leak。这个列表非常长,要找到自己用的服务也是需要点时间。

另外有评论说,一些 iOS 应用也受到影响,包括 Dropbox。

对于正在使用的服务,你需要做的事情:

  • 修改密码。
  • 如果开启了两步验证,需要重置两步验证,即关闭再打开。
  • 如果你使用了第三方验证,比如用 Google 的帐号登录第三方网站,也要重新做一遍验证。
  • 任何上传到 CloudFlare 上的 TLS 证书,需要重新签发。

总结

有一个共识是 HTTPS 是安全,使用 HTTPS 传输的流量,不会被第三方破解。CloudFlare 免费提供了 TLS 证书,几乎所有使用 CloudFlare 的网站,都开启了 HTTPS。并且 CloudFlare 还提供了 HTTPS 回源的选项,就是整个 HTTP 访问,都经过加密了。就在大家都认为 CloudFlare 非常安全的时候,偏偏出了这么个事情,继 Heatbleed 之后再出一次严重的 HTTPS 相关的安全性问题。

不由感慨一下,学术界反复论证了 HTTPS 的安全性无懈可击,但是拿到工程领域就不是那么回事了。工程上出问题的机率要比学术上大很多。所以有很多事情,不能只看学术论文,还要把实施者的能力考虑进去。我在说的是什么事,大家应该都能猜到。