Safari瀏覽器bug可引發XSS
研究人員發現一個Safari瀏覽器的bug,利用該bug可以繞過瀏覽器的過濾器,並進行XSS。之前也有研究人員發現過該漏洞,因此漏洞並不是第一次出現。
先看一個研究人員偶然發現腳本文件:
該文件的目的是重定向到手機APP,其中有重定向參數,檢查協議是否在黑名單中,如果不在黑名單中就重定向。為了成功利用該漏洞,需要創建一個可以以Javascript執行的鏈接,因為協議中沒有javascript。根據瀏覽器說明文件,這是不可能的。但與其他軟體一樣,瀏覽器並不會完全遵循說明文件。
研究人員首先關注的是重定向部分。因為使用了.toLowerCase(),那麼是否有可能將一些Unicode字元串在進行.toLowerCase()轉化時變成其他字元呢?一個協議被分成兩行是否可以正常運行呢?
重定向
研究人員選擇分析重定向而不是過濾器。一般來說域名和URL-handling可能會存在漏洞,所以研究開始了分析之旅:
打開console,寫一個函數來模擬繞過。
`//`在Javaccript中表示注釋,`%0a`是URL編碼的換行來繞過注釋。
幸運的是研究人員竟然發現成功了。因為黑名單中沒有指定空協議,因此可以繞過過濾器。
Final payload是:
`?redirect=javascript://%0aalert(document.domain)`。
該漏洞被報告給了許多使用SaaS服務的站點,許多使用該服務的子域名都受該漏洞的影響。許多廠商都了解到了該漏洞並進行了補丁修復。
引發新漏洞的補丁
因為SaaS廠商迅速提供了安全補丁,也就是說所有受影響的網站現在都安全了。但研究人員發現該補丁會破壞頁面原有的功能,因此研究人員猜測這是一個臨時補丁。
幾個月後,vpnMentor的write-up顯示臨時補丁被另一個更新的補丁代替,但這會導致新的XSS漏洞。
正則表達式
研究人員發現原來的payload還可以正常運行。第二個漏洞的補丁會導致第三個漏洞的出現,同樣的payload還可以正常起作用。但這並不是一個純DOM XSS,因為並不會在JS上讀取URL參數,而是在服務端反射。
最新解決方案
修復第三個漏洞的解決方案就是在黑名單中添加:』『 and 『: 』。研究人員認為應該沒有什麼可以繞過這個黑名單的。
// App redirects only.
if ([ "javascript:", "vbscript:", "http:", "https:", "data:", "ftp:", ":", " " ].indexOf(protocol)
window.top.location = validate("[injection]");
}
該函數需要支持不同的自定義APP協議,使其不可能使用白名單,而只能使用黑名單。
總結
黑名單從來都不是一個很好的解決方案。在進行漏洞修復時需要記錄漏洞出現的原因以預防漏洞再次出現。協議bug相關信息半年前就通知了蘋果公司,但Mac電腦和手機設備的Safari最新版本仍存在該漏洞。
※千面萬化的Android特洛伊木馬GPlayed
※NUUO網路視頻攝錄機Peekaboo漏洞:CVE-2018-1149、CVE-2018-1150
TAG:嘶吼RoarTalk |