APP中WebResourceResponse漏洞分析

2023-03-29 8,827


现在很多APP应用中都使用webview来进行页面的展示,甚至将webview做为主要显示组件,把所有的内容使用H5来呈现,同时webview也成为攻击者重点攻击的重要的攻击面。


webview它允许开发人员绕过标准浏览器安全性、WebView允许拦截应用请求并返回通过类实现的任意内容。恶意攻击者对这些功能的任何滥用都可能导致移动应用程序中的漏洞。


Webview的漏洞中包括了任意代码执行漏洞、跨域、密码明文保存等,这些安全问题可以直接导致用户敏感信息泄露,移动终端被恶意攻击者控制。


 

基础知识


 

webview使用过程中大部分是和html文件(javascript)打交道的。


WebView使用的3个关键流程点:

1、在界面中放置WebView控件;

2、在代码中设置WebView功能及需要加载的内容;

3、在APP配置中启用相关权限。


ResourceResponse是webview中的一个方法,它封装了Web资源的响应信息包括:响应数据流,编码,MIME类型,API21后添加了响应头,状态码与状态描述。通过从应用程序代码本身返回响应(包括状态代码、内容类型、内容编码、标头和响应正文)来模拟服务器,而无需向服务器发出任何实际请求。


//拦截资源请求 [Android 5.0(API 21)及以上可用]

//request:封装本次请求的详细信息(包括url、请求方法、请求头)

public WebResourceResponse shouldInterceptRequest(WebView view,WebResourceRequest request);


WebView在调用loadUrl后,会首先根据传入的URL获取响应,再将响应显示到页面上,这就是WebView的原理。


在获取响应过程中重新改变请求URL或者直接将响应替换。具体的替换在WebViewClient的WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)方法中,该方法用于根据请求去获取响应,如果返回值为null,那么android会根据请求去获取响应并返回,但是如果重写了该方法并返回了响应,那么WebView就会使用你的响应数据。


对于资源方面,只要构造出一个包含目标数据的WebResourceResponse对象,并将其返回,就实现了资源的替换。在需要使用本地资源替换远程资源的场景中,这个回调方法非常有用。当然,如果直接返回null,WebView将会正常地加载url对应的资源。


上面的代码中,如果请求 URL与给定模式匹配,则从应用资源或本地文件返回响应。攻击者就可以操纵返回文件的路径并通过 XHR 请求获得对任意文件的访问权限时,这就会存在漏洞风险。


如果攻击者发现一个简单的XSS或能打开Android应用程序内任意链接的能力,攻击者可以使用它来泄露敏感的用户数据,其中也可能包括访问令牌,从而导致完全帐户接管。


 

漏洞分析


 

在WebView中,容易出现的漏洞是执行任意javascript代码还有java代码的。


WebResourceResponse容易出现的漏洞点在于有2个关键点:


1、通过活动的WebView中打开任意URL

这个执行任意URL在android中一般存在AndroidManifest.xml和java代码中。在androidmanifest.xml文件中有 activity组件触发可以执行任意功能。




构造一个自己的 WebResourceResponse,实现用APP应用包里的本地文件替换掉要请求的网络图片。



2、通过webview中拦截web返回请求,可以对APP本地文件进行读取,从而存在敏感信息泄露风险


文件读取漏洞是由于Android应用程序对用户输入的文件名称没有进行安全校验而导致的一种安全漏洞,攻击者可以通过构造特殊路径访问Android系统中的文件。

 

小结


 

WebResourceResponse这个函数存在一定的安全风险,建议使用WebViewAssetLoader,它用于简化通过请求拦截从应用数据目录中加载 APK assets、resources 和文件的过程。这样可以在不停用 CORS 的情况下访问网络和本地资源。

 

本文作者:编码安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/198399.html

Tags:
评论  (0)
快来写下你的想法吧!

编码安全

文章数:12 积分: 20

编码安全、安全编码! 公众号《编码安全》

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号