谷歌研究人員披露云服務(wù)商Cloudflare漏洞,致多家著名網(wǎng)站將用戶隱私會(huì)話密鑰及個(gè)人信息泄露至陌生人瀏覽器。
Cloudflare幫助公司企業(yè)推廣網(wǎng)站和在線服務(wù)。由于一個(gè)編程錯(cuò)誤,幾個(gè)月來,Cloudflare的系統(tǒng)在特定條件下會(huì)將服務(wù)器內(nèi)存中的內(nèi)容隨機(jī)泄露到網(wǎng)頁。這意味著,如果你訪問Cloudflare托管的網(wǎng)站,你瀏覽器頁面里可能會(huì)隱含有其他人的某些網(wǎng)頁流量?jī)?nèi)容。該漏洞與心臟出血(Heartbleed)的原理類似,因此被稱為“Cloudbleed”云出血。
Cloudflare軟件代碼中一個(gè)字符的錯(cuò)誤——該用“>”的地方敲了個(gè)“=”,引發(fā)了該安全大錯(cuò)亂。
Cloudflare托管著Uber、OK Cupid和Fitbit等等很多網(wǎng)站。訪問Cloudflare托管的任意網(wǎng)站時(shí),有時(shí)候就會(huì)被糊一臉陌生人Uber、OK Cupid和Fitbit會(huì)話中的敏感信息。就好像去餐廳點(diǎn)餐,本來收拾好的桌子,服務(wù)員過來不僅遞給你菜單,還一股腦塞你一堆前桌食客皮夾里的東西,什么鑰匙、銀行卡之類的。
該泄露會(huì)在網(wǎng)頁含有不成對(duì)HTML標(biāo)簽的特定組合時(shí)被觸發(fā),擾亂Cloudflare的代理服務(wù)器,導(dǎo)致服務(wù)器吐出屬于其他人的數(shù)據(jù)——即便該數(shù)據(jù)是HTTPS保護(hù)的。
通常,這些被注入的信息不會(huì)被注意到,都是隱身在網(wǎng)頁源碼中的,但安全研究員注意到了——逃逸的數(shù)據(jù)漂洋過海來到了谷歌緩存及其他網(wǎng)絡(luò)爬蟲機(jī)器人手里。
發(fā)現(xiàn)時(shí)間線
上周,在研究一個(gè)小項(xiàng)目的時(shí)候,谷歌零日計(jì)劃安全團(tuán)隊(duì)成員,英國(guó)漏洞獵手塔維斯·奧曼迪,首先發(fā)現(xiàn)了該錯(cuò)誤。他在谷歌搜索引擎爬取的緩存頁面中,發(fā)現(xiàn)了大量數(shù)據(jù),其中包括會(huì)話和API密鑰、cookie,以及口令。這些密鑰可被用于以別人的身份登錄服務(wù)。
在問題解答中,奧曼迪說:“我們發(fā)現(xiàn)的東西太不好了,我都取消了好幾個(gè)周末計(jì)劃,在星期天還跑到辦公室弄工具清除它們。”
“我已經(jīng)通知了Cloudflare我正在干的事情。大型交友網(wǎng)站的私密消息、著名聊天服務(wù)的完整消息、在線口令管理器數(shù)據(jù)、成人視屏網(wǎng)站的畫面、酒店預(yù)訂數(shù)據(jù)……都能找到!所有東西,包括全部HTTPS請(qǐng)求、客戶端IP地址、所有的響應(yīng)、cookie、口令、密鑰、數(shù)據(jù),全都有。”
奧曼迪稱,谷歌團(tuán)隊(duì)反應(yīng)迅速,很快就清理了隱私信息,Cloudflare則召集了團(tuán)隊(duì)處理該事件。他初步確定了泄露源是Cloudflare的ScrapeShield應(yīng)用,也就是阻止網(wǎng)絡(luò)爬蟲從網(wǎng)站批量拷貝信息的應(yīng)用,但問題似乎并沒有那么簡(jiǎn)單。
Cloudflare已經(jīng)持續(xù)泄露客戶HTTPS會(huì)話好幾個(gè)月了。Uber、1Password、FitBit、OK Cupid等等都中招了。
——塔維斯·奧曼迪 2017年2月23日
23日下午,Cloudflare發(fā)布了非常詳細(xì)的事件報(bào)告:Email Obfuscation、Server-Side Excludes 和 Automatic HTTPS Rewrites 程序是罪魁禍?zhǔn)住?/p>
該公司在決定為其邊緣服務(wù)器開發(fā)新的HTML解析器的時(shí)候,問題來了。該解析器是用Ragel(有限狀態(tài)機(jī)編譯器)寫的,并轉(zhuǎn)成了C語言代碼。該代碼存在緩沖區(qū)溢出漏洞,網(wǎng)頁上的不成對(duì)HTML標(biāo)簽就可觸發(fā)。下面這段代碼本應(yīng)能阻止程序復(fù)寫內(nèi)存,卻因?yàn)橹羔槞z查漏洞而未能履行使命:
/* generated code. p = pointer, pe = end of buffer */
if ( ++p == pe )
goto _test_eof;
問題出在:如果指針p在別的地方變得比緩沖區(qū)末尾指針pe大,那它就會(huì)跳過長(zhǎng)度檢查,讓緩沖區(qū)被額外的信息溢出。這就導(dǎo)致了上述網(wǎng)頁會(huì)話泄露問題。
該公司首席工程師在事件報(bào)告中稱:“漏洞的根源在于:是用等號(hào)運(yùn)算符來檢查是否到達(dá)緩沖區(qū)末尾,而指針是可以越過緩沖區(qū)末尾的。”
“但凡用的是 >= 而不是 ==,緩沖區(qū)越界問題都會(huì)被發(fā)現(xiàn)。”
要發(fā)生數(shù)據(jù)泄露,緩沖區(qū)必須以錯(cuò)誤的腳本或img標(biāo)簽結(jié)尾,且要小于4KB(否則Nginx會(huì)崩潰),還要運(yùn)行上述3個(gè)程序。
2016年9月22日,Cloudflare將該新的HTML解析器添加到了 Automatic HTTP Rewrites 中;今年1月30日,加到了 Server-Side Excludes 應(yīng)用中;2月13日,Email Obfuscation 里也添加了一部分。僅在 Email Obfuscation 中發(fā)生了嚴(yán)重的內(nèi)存泄漏,也正因如此,奧曼迪才能發(fā)現(xiàn)該漏洞。
Cloudflare的反應(yīng)不可謂不快,從奧曼迪處得知消息后,47分鐘內(nèi)就關(guān)閉了 Email Obfuscation。3小時(shí)后, Automatic HTTPS Rewrites 關(guān)閉。Server-Side Excludes 不能關(guān)停,但該公司稱已在3小時(shí)內(nèi)開發(fā)了補(bǔ)丁程序。
Cloudflare系統(tǒng)上的日志顯示:泄漏高峰期是在1月13至18日期間,但即便是在那期間,通過Cloudflare的HTTP請(qǐng)求中,也僅1/3,300,000泄漏了數(shù)據(jù)。該代理服務(wù)器漏洞影響了3,438個(gè)域名,150家Cloudflare客戶。該公司表示,直到確定了搜索引擎已清除緩存,才披露了此漏洞。
對(duì)于獎(jiǎng)品,奧曼迪笑言,Cloudflare漏洞獎(jiǎng)勵(lì)項(xiàng)目的最高獎(jiǎng)品就是件T恤,或許這家Web巨頭將來會(huì)考慮換個(gè)獎(jiǎng)品吧。
不難看出,基礎(chǔ)服務(wù)商對(duì)自身業(yè)務(wù)安全性的重視程度還有待提高,否則很難激勵(lì)這些漏洞獵手(白帽)幫助其發(fā)現(xiàn)那些可能正在被攻擊者默默利用的漏洞。
完整披露:同樣可能受影響的網(wǎng)站列表可從這里獲取。