一篇文章带你看懂Cloudflare信息泄露事件
版权声明:本文由贺嘉 原创文章,转载请注明出处:
文章原文链接:https://www.qcloud.com/community/article/753847001488039974
来源:腾云阁 https://www.qcloud.com/community
1.问题描述
近期根据Hacker News的报道,以及国际CDN厂商cloudflare的公告,我们注意到了一起敏感信息、API 密钥被Cloudflare泄露给了随机的 requesters请求,同时相关敏感数据也被搜索引擎给收录的问题。
这一问题持续了 2016-09-22至 2017-02-18近半年时间,最为严重的阶段是2-13至2-18 每 3,300,000 HTTP 请求就有可能泄露一份内存数据(近总请求量的0.00003%),预计是100k-200k 页面涉嫌数据泄露。包括uber在内的一系列知名互联网企业可能受到影响。
以下是可能受到这一问题影响的网站清单:
https://github.com/pirate/sites-using-cloudflare/blob/master/README.md
2.信息泄露问题原因
Cloudflare CDN服务 会对 HTML 标签进行重新解析,比如将 Google Analytics的标签插入到HTML中, 安全地重写 http:// 链接成为 https://, 模糊email邮箱地址等等。但是由于 NGINX 模块中的HTML 解析功能存在指针问题,导致在用户之间共享的反向代理存在信息泄露问题,最早是由 Google’s Project Zero 的研究员 Tavis Ormandy发现。
之前Cloudflare的HTML解析一直使用标准的 Ragel 有限状态机编译器( www.colm.net/open-source/ragel/),但是前段时间Cloudflare为了提升代码效率对解析器进行了升级,将其升级为 cf-html并测试了其对HTML5的解析是没有问题的。但是问题出在了开发团队错误的使用了 Ragel的编码规范,Ragel的代码会被自动编译为C语言的代码,而C语言允许更加灵活的使用指针。
/ generated code /
if ( ++p == pe )
goto _test_eof;
以上Ragel自动生成的代码会导致指针越界,也就是常见的内存泄露问题。但是之前Ragel实现的HTML 解析模块单独使用并不会触发信息泄露问题,而是仅当基于Ragel 解析器与Cloudflare 升级 后的cf-html解析器一起工作的时候才会触发这一问题。
3.解决方案
3.1迁移至腾讯云CDN
腾讯云CDN(领取免费体验)
提供基于角色的CDN权限控制,并且支持以API接口方式调用。同时新用户开通CDN即连续6个月,每月赠送50G流量包。
* 财务管理员
* 超级管理员
* 云资源管理员
超级管理员拥有创建者的所有权限,可以进行其他子用户的分配;而云资源管理员拥有对所有云资源的管理权限,但不可以创建其他子用户。部分功能仅能够供预设管理员使用,具体如下:
* 使用云API DescribeCdnHosts 获取账户下所有域名详细信息;
* 使用云API UpdateCdnProject 或在 CDN控制台 进行域名所属项目的切换;
项目管理员除了预设管理员外,还可以按照项目维度划分权限,即项目管理员。项目管理员可以管理指定项目中所有的云资源。
项目管理员可以通过自定义策略 中服务类型为项目管理的策略进行指派,该策略拥有两个功能:
* 管理 CDN 业务项目内云资源
* 管理其他业务项目内云资源
3.2考虑在你的应用中实现Keyless(无密钥加载)架构
对证书稍微熟悉的朋友都知道,SSL 密钥和证书都是成对使用的,一个证书一定唯一对应一个私钥。整个 HTTPS 最重要的一个数据就是 SSL 的私钥了,如果私钥泄露,整个握手过程就可以被劫持,签名可以被伪造,对称密钥也可以被破解。整个 HTTPS 就毫无安全可言。
传统的私钥使用方案和风险传统的私钥方案就是将私钥和应用程序绑定在一起。比如大家熟知的 nginx, apache,如果想使用 HTTPS,必须在部署 nginx 的接入机器上部署相关的证书和私钥。

这种方案会有如下安全上的问题:私钥部署在云端或者 CDN,如果泄露了怎么办?
无秘钥方式虽然腾讯云的内网非常安全,但是出于对客户的安全负责,彻底打消用户对私钥泄露的顾 虑,确保用户对私钥的绝对控制,腾讯云提供一种无私钥的加载方案。这个方案核心是「不需要把私钥存储在腾讯云,允许用户使用自己的服务器保管私钥,完成 HTTPS 的接入」。 腾讯云完全接触不到私钥,客户甚至可以把私钥保存在自己家里的服务器上。
它的接入过程如下:
1. 用户发起 HTTPS 握手请求。
2. 在涉及到私钥计算的时候,腾讯云 CLB 会将这个私钥计算请求通过加密的自定义协议,转发给用户自己的 keyless 服务器上。
3. keyless 服务调用用户的私钥完成计算。
4. keyless 服务将计算结果返回给腾讯云 CLB。
5. CLB 继续进行 HTTPS 请求的处理。
整个过程,腾讯云接触不到 HTTPS 私钥,需要注意一点的,keyless server 是腾讯云提供一个服务端程序,代码开源,用户自主部署,服务端行为用户掌握得一清二楚。

总结来说Keyless(无密钥加载)架构可以更好的实现用户的私钥安全性,但是会对于开发者而言增加一次网络交互,一般来说100-200ms的网络延时,除非是对于安全性有非常高要求的应用,才会考虑这一方式,是用腾讯云的这一架构需要和我们的技术人员单独沟通以明确需求。
4.参考资料list
https://www.qcloud.com/document/product/228/6689
https://www.qcloud.com/community/article/207618001486449512
List of Sites possibly affected by Cloudflare's
https://github.com/pirate/sites-using-cloudflare/blob/master/README.md
report of bugs
https://bugs.chromium.org/p/project-zero/issues/detail?id=1139
Incident report on memory leak caused by Cloudflare parser bug
https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/
一篇文章带你看懂Cloudflare信息泄露事件的更多相关文章
- 一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora
本文由云+社区发表 | 本文作者: 刘峰,腾讯云NewSQL数据库产品负责人.曾职于联想研究院,Teradata北京研发中心,从事数据库相关工作8年.2017年加入腾讯数据库产品中心,担任NewSQL ...
- 一篇文章带你搞懂DEX文件的结构
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了.下面,开练! 建议:不要只看 ...
- 一篇文章带你搞懂InnoDB的索引|结合样例
关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...
- 一篇文章带你搞懂 SpringBoot与Swagger整合
Swagger使用由于不喜欢csdn的markwoen编辑器,对代码样式支持不好,看着不舒服,对审美要求比较高的同学移步github:https://github.com/itguang/swagge ...
- 一篇文章带您读懂Map集合(源码分析)
今天要分享的Java集合是Map,主要是针对它的常见实现类HashMap进行讲解(jdk1.8) 什么是Map核心方法源码剖析1.文档注释2.成员变量3.构造方法4.put()5.get() 什么是M ...
- 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...
- 一篇文章带你搞懂 etcd 3.5 的核心特性
作者 唐聪,腾讯云资深工程师,极客时间专栏<etcd实战课>作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台.有状态服务容器化.在离线混部等产品研发设计工作. etcd ...
- 一篇文章带您读懂List集合(源码分析)
今天要分享的Java集合是List,主要是针对它的常见实现类ArrayList进行讲解 内容目录 什么是List核心方法源码剖析1.文档注释2.构造方法3.add()3.remove()如何提升Arr ...
- 【 全干货 】5 分钟带你看懂 Docker !
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...
随机推荐
- IntelliJ_2017_安装Grep Console插件(console输出内容加颜色)
官网下载:https://plugins.jetbrains.com/plugin/7125-grep-console 一.安装Grep Console插件 二.设置不同日志类型的不同 ...
- 奇怪吸引子---RayleighBenard
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- IIS服务命令
: iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现) iisreset /start或stop 启动(停止)所有Internet服务 iisreset /resta ...
- JAVA SSH 框架介绍(转)
转载自:http://www.admin10000.com/document/150.html SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA ...
- 版本控制-GitHub
前面几篇文章,我们介绍了Git的基本用法及Git服务器的搭建,本篇文章来学习一下如何使用GitHub.GitHub是开源的代码库以及版本控制库,是目前使用网络上使用最为广泛的服务,GitHub可以托管 ...
- oracle11g-linux 归档处理
在使用oracle时突然登录不上去了提示:ORA-00257:archiver error.Connect internal only,until freed. 查遍很多资料,都指向“归档日志空间不足 ...
- 微信小程序wxss的background本地图片问题
在web 或者webapp开发中我们习惯了直接饮用本地图片做背景,例如 .aaa { background: url('img/1.png'); } 但是这种引用方式在微信小程序中是无法使用的,控制台 ...
- UE.getEditor('editor')
<script type="text/javascript"> $().ready(function(){ var editor = document.getEleme ...
- MySQL replicate-ignore-db详解
1:官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库.解释的太简单了,但是里面还有很多坑呢. 生产库上不建议设置过滤规则.如果非要设置,那就用Replic ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第十一章 样式和主题
第11章 样式和主题 style是用于指定View或window的外观和格式的一系列属性的集合.style可以指定高(height).填补(padding).字体颜色.字体大小.背景颜色等等属性.st ...