云出血:经典缓冲区溢出漏洞卷土重来
作者: 日期:2017年02月27日 阅:5,310

谷歌研究人员披露云服务商Cloudflare漏洞,致多家著名网站将用户隐私会话密钥及个人信息泄露至陌生人浏览器。

cloudflare-vulnerability-600

Cloudflare帮助公司企业推广网站和在线服务。由于一个编程错误,几个月来,Cloudflare的系统在特定条件下会将服务器内存中的内容随机泄露到网页。这意味着,如果你访问Cloudflare托管的网站,你浏览器页面里可能会隐含有其他人的某些网页流量内容。该漏洞与心脏出血(Heartbleed)的原理类似,因此被称为“Cloudbleed”云出血。

Cloudflare软件代码中一个字符的错误——该用“>”的地方敲了个“=”,引发了该安全大错乱。

Cloudflare托管着Uber、OK Cupid和Fitbit等等很多网站。访问Cloudflare托管的任意网站时,有时候就会被糊一脸陌生人Uber、OK Cupid和Fitbit会话中的敏感信息。就好像去餐厅点餐,本来收拾好的桌子,服务员过来不仅递给你菜单,还一股脑塞你一堆前桌食客皮夹里的东西,什么钥匙、银行卡之类的。

该泄露会在网页含有不成对HTML标签的特定组合时被触发,扰乱Cloudflare的代理服务器,导致服务器吐出属于其他人的数据——即便该数据是HTTPS保护的。

google_cloudbleed_fitbit-800

通常,这些被注入的信息不会被注意到,都是隐身在网页源码中的,但安全研究员注意到了——逃逸的数据漂洋过海来到了谷歌缓存及其他网络爬虫机器人手里。

发现时间线

上周,在研究一个小项目的时候,谷歌零日计划安全团队成员,英国漏洞猎手塔维斯·奥曼迪,首先发现了该错误。他在谷歌搜索引擎爬取的缓存页面中,发现了大量数据,其中包括会话和API密钥、cookie,以及口令。这些密钥可被用于以别人的身份登录服务。

在问题解答中,奥曼迪说:“我们发现的东西太不好了,我都取消了好几个周末计划,在星期天还跑到办公室弄工具清除它们。”

“我已经通知了Cloudflare我正在干的事情。大型交友网站的私密消息、著名聊天服务的完整消息、在线口令管理器数据、成人视屏网站的画面、酒店预订数据……都能找到!所有东西,包括全部HTTPS请求、客户端IP地址、所有的响应、cookie、口令、密钥、数据,全都有。”

奥曼迪称,谷歌团队反应迅速,很快就清理了隐私信息,Cloudflare则召集了团队处理该事件。他初步确定了泄露源是Cloudflare的ScrapeShield应用,也就是阻止网络爬虫从网站批量拷贝信息的应用,但问题似乎并没有那么简单。

Cloudflare已经持续泄露客户HTTPS会话好几个月了。Uber、1Password、FitBit、OK Cupid等等都中招了。

——塔维斯·奥曼迪 2017年2月23日

23日下午,Cloudflare发布了非常详细的事件报告:Email Obfuscation、Server-Side Excludes 和 Automatic HTTPS Rewrites 程序是罪魁祸首。

该公司在决定为其边缘服务器开发新的HTML解析器的时候,问题来了。该解析器是用Ragel(有限状态机编译器)写的,并转成了C语言代码。该代码存在缓冲区溢出漏洞,网页上的不成对HTML标签就可触发。下面这段代码本应能阻止程序复写内存,却因为指针检查漏洞而未能履行使命:

/* generated code. p = pointer, pe = end of buffer */
if ( ++p == pe )
goto _test_eof;

问题出在:如果指针p在别的地方变得比缓冲区末尾指针pe大,那它就会跳过长度检查,让缓冲区被额外的信息溢出。这就导致了上述网页会话泄露问题。

该公司首席工程师在事件报告中称:“漏洞的根源在于:是用等号运算符来检查是否到达缓冲区末尾,而指针是可以越过缓冲区末尾的。”

“但凡用的是 >= 而不是 ==,缓冲区越界问题都会被发现。”

要发生数据泄露,缓冲区必须以错误的脚本或img标签结尾,且要小于4KB(否则Nginx会崩溃),还要运行上述3个程序。

2016年9月22日,Cloudflare将该新的HTML解析器添加到了 Automatic HTTP Rewrites 中;今年1月30日,加到了 Server-Side Excludes 应用中;2月13日,Email Obfuscation 里也添加了一部分。仅在 Email Obfuscation 中发生了严重的内存泄漏,也正因如此,奥曼迪才能发现该漏洞。

Cloudflare的反应不可谓不快,从奥曼迪处得知消息后,47分钟内就关闭了 Email Obfuscation。3小时后, Automatic HTTPS Rewrites 关闭。Server-Side Excludes 不能关停,但该公司称已在3小时内开发了补丁程序。

Cloudflare系统上的日志显示:泄漏高峰期是在1月13至18日期间,但即便是在那期间,通过Cloudflare的HTTP请求中,也仅1/3,300,000泄漏了数据。该代理服务器漏洞影响了3,438个域名,150家Cloudflare客户。该公司表示,直到确定了搜索引擎已清除缓存,才披露了此漏洞。

对于奖品,奥曼迪笑言,Cloudflare漏洞奖励项目的最高奖品就是件T恤,或许这家Web巨头将来会考虑换个奖品吧。

不难看出,基础服务商对自身业务安全性的重视程度还有待提高,否则很难激励这些漏洞猎手(白帽)帮助其发现那些可能正在被攻击者默默利用的漏洞。

完整披露:同样可能受影响的网站列表可从这里( https://github.com/pirate/sites-using-cloudflare/blob/master/README.md )获取。

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章