當前位置:
首頁 > 新聞 > Apache CVE-2017-7659漏洞重現及利用分析

Apache CVE-2017-7659漏洞重現及利用分析

近日,apache在其網站發布了最新的安全公告,其中涉及多個漏洞。針對CVE-2017-7659漏洞的介紹是這樣的:



A maliciously constructed HTTP/2 request could cause mod_http2 to dereference a NULL pointer and crashthe server process.

可以看到這是apache WEB伺服器(httpd)中的一個HTTP 2.0協議處理的漏洞。未然實驗室安全研究人員針對此漏洞的技術細節和利用方法進行了深入的研究,歡迎安全愛好者們一起分享和討論。


0x01補丁分析


在redhat的bugzilla上可以找到該漏洞:


https://bugzilla.redhat.com/show_bug.cgi?id=1463199


在github上有對該漏洞的修復提交:


https://github.com/apache/httpd/commit/672187c168b94b562d8065e08e2cad5b00cdd0e3


修改前後的代碼差異比較如下:


可以看到,修復內容很簡單,就是增加了對h2_request_rcreate函數返回值的判斷。官方推薦升級到2.4.26修復漏洞。


0x02漏洞成因


從https://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz

下載到有漏洞的伺服器代碼後,通過補丁的修改進行漏洞成因的逆向分析。


首先查看漏洞函數 h2_stream_set_request_rec,發現是調用h2_request_rcreat創建http 2.0請求的數據結構req,h2_request_rcreat執行失敗時req為空,此時在日誌函數ap_log_rerror中直接解引用req導致進程崩潰:



繼續查看函數h2_request_rcreate,看到首先會把req置為0,然後判斷4個變數

r->method**

,scheme

,r->hostname

,path**,任何一個為空則返回失敗,而此時req還是0,就會導致進程崩潰:


那麼這4個變數是哪一個為空導致的漏洞呢?scheme是先判斷了是否為空再賦值的,首先排除;path是從r->parsed_uri中解析出來,解析函數apr_uri_unparse在其它地方有多次使用,直覺path也不會為空;r->method保存請求的方法欄位,在HTTP請求中必須存在,因此也不應該為空;因此只有r->hostname,保存請求的主機名,也就是域名,可能為空。


我們知道,HTTP請求中,有2個地方可以表示主機名:


1) 請求的路徑以完整URL方式表示,URL中包含主機名,例如GET http://www.example.com/ HTTP/1.1,這裡主機名就是 www.example.com。伺服器中是在ap_parse_uri函數中解析這種主機名的


2) 在Host請求頭中包含主機名,例如:



GET / HTTP/1.1


Host: www.example.com


伺服器中是在fix_hostname函數中解析這種主機名的


分別審計 ap_parse_uri 和 fix_hostname 函數,發現如果請求中沒有Host頭,那麼r->hostname確實是空。但是伺服器也考慮到了這種情況,在 ap_read_request 函數中做了判斷:


這裡的判斷邏輯,如果滿足下面2個條件之一



1) r->hostname為空,且請求的HTTP版本大於等於1.1


2) 沒有Host頭,且請求的HTTP版本等於1.1


就會立刻回復400狀態碼的錯誤頁面,並不會觸發後面的漏洞。在注釋里也說明了,HTTP/1.1的RFC2616的14.23節中明確指明,HTTP/1.1請求必須包含Host頭。


但是,開發者是不是忘了什麼,HTTP還有1.0版本啊,且HTTP/1.0和HTTP/1.1的處理流程一樣,雖然HTTP/1.0確實沒有規定請求必須包含Host頭。

因此**

HTTP/1.0

請求是可以沒有Host

頭的,程序會一直按照流程執行,最終執行到h2_stream_set_request_rec

函數,此時r->hostname

為空,從而觸發漏洞。**


0x03漏洞驗證及漏洞利用


綜合上面的分析,該漏洞利用成功需要如下條件:



1) 伺服器支持HTTP/2


2) 請求是HTTP/1.0版本


3) 請求中沒有Host頭


伺服器配置


在server上要配置開啟HTTP/2功能,使用apache默認的站點配置,在配置文件中首先載入mod_http2.so:


然後加入下面配置,重新啟動apache httpd就可以了:



驗證POC


驗證時,我們首先起一個單一進程的apache httpd服務,方便驗證進程崩潰後的效果:



正常訪問,返回歡迎頁面:



將構造的POC通過burpsuite發送:


果然超時沒有響應,同時在伺服器上發現httpd進程已經崩潰:



再次訪問伺服器時,頁面已經無法訪問了:



漏洞利用


在上一節,我們已經驗證了在單一進程模式下,如何通過該漏洞導致apache伺服器異常終止。但是通常情況下apache伺服器在啟動時,會同時啟動多個工作進程:



而且當worker進程崩潰時,apache會自動啟動新的worker進程。那麼在真實的網路環境中,黑客會如何利用此漏洞對伺服器進行攻擊呢?


我們嘗試編寫了一個多線程(並發100個線程)的程序,同時發起多個畸形請求,以不斷觸發後台worker崩潰,並讓apache伺服器不斷陷入重新分配worker的處理之中:


執行腳本時,發起的請求:



請求發起後,我們發現,並不需要特別的並發連接,便可以讓伺服器進入拒絕服務狀態:



0x04 漏洞影響


在apache的漏洞公告中,只有2.4.25版本的httpd伺服器受此漏洞影響。但是根據未然實驗室的測試,從2.4.17開始的所有版本的httpd伺服器,受到這段POC攻擊時都會崩潰,而httpd也是從2.4.17版本開始支持HTTP 2.0協議的。因此可以說這個漏洞會影響httpd的所有支持HTTP 2.0的版本,未然實驗室強烈建議用戶更新到最新的2.4.26版本。


2.4.25之前的版本代碼與2.4.25版本不盡相同,以2.4.17為例,在h2_request_rwrite函數中:



收到攻擊POC後,r->hostname為空,因此req->authority也為空,而ap_strchr_c其實通過下面的宏進行定義的:


因此在上面的函數中,調用strchr的第一個參數為空,此時會導致進程崩潰。


0x05總結


apache在其HTTP Server 2.4.26版本修復了多個漏洞,業界普遍認為這些漏洞比較雞肋,難以利用。未然實驗室挑選其中個別漏洞進行了深入的分析和利用嘗試,發現其中有些漏洞其實影響還是很大,尤其是對於一些高價值站點。


本文討論的部分方法可能會造成目標網站拒絕服務,影響目標網站的業務正常運行,所以請勿對真實目標進行嘗試,否則由此引起的一切後果未然實驗室概不負責。


水平所限,文章內容難免有不足之處,歡迎大家指正。您可通過未然實驗室公共郵箱weiran.labs@huawei.com或關注我們的微信公眾號「WeiRanLabs」與我們聯繫,期待與各位專家交流。


*本文作者:華為未然實驗室,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

一個人的企業安全建設之路
FireEye發布調查報告,混淆技術成為了2017年攻擊者最喜歡用的技術之一
Petya真的沒那麼簡單!北約呼籲發起聯合調查,US-CERT發布警報
卡巴斯基創始人否認與俄羅斯政府有牽連,表示願意提供源代碼供核查
NSA的第七種武器|雙脈衝星(DoublePulsar) 後門詳細分析

TAG:FreeBuf |

您可能感興趣

千元級別甜點卡,重現當年470D輝煌—RX 580 2048sp 8GB開箱
Dior 2018春夏廣告大片:重現1960
Shox BB4重現球場!11月12日NBA球鞋賞析
經典重現!諾基亞帶來香蕉機 Nokia 8110 Reloaded | MWC 2018
創紀錄百達翡麗Ref.2499「The Asprey」腕錶重現拍賣場
La Mer、Cpb...低至8折+免稅!最高減$400!黑五價重現
優雅重現 | ZAC Zac Posen 2019年春夏系列發布
「為重現大音壓而生」Sennheiser IE 500/400 Pro耳道式耳機
iPhone12概念圖:重現5S經典設計 感覺華為Mate30沒戲了
庫里慘案重現!5場125+60+26卻只拿1200萬
AJ3「手稿」重現「黑水泥」配色,New Balance 全新聯名 990v3 發售在即!
森海塞爾IE 500/400 Pro耳塞 為重現大音壓而生
【Pre-SIHH 2019】重現Arceau 誕生年代的精緻優雅氣質:Hermès Arceau 78 腕錶
新品丨「為重現大音壓而生」Sennheiser IE 500/400 Pro耳道式耳機
雷克薩斯IS特別版官圖發布:3.5L V6重現 限量900台
新品|「精準重現音樂訊號」 Esoteric K-01Xs / K-03Xs SACD播放機
iPhone11基本確認,重現128GB版本,起步價給力
通過復刻改裝重現60年代的經典老車:911、E-type、野馬
重現元年魅力----Nike Air Max 95 OG | Xsneaker
顯卡刷BIOS提升性能重現江湖 3000塊的顯卡瞬間升值1000!