Pwn2Own华为iReader漏洞原理与利用分析
0×01 前言
这部分漏洞分析属于之前MWR InfoSecurity的研究员报告中的第三部分,同样该报告仅有漏洞的简单描述,具体的PoC也未详细给出。
相关阅读:
Pwn2Own华为HiApp漏洞原理与利用分析(上)
Pwn2Own华为HiApp漏洞原理与利用分析(下)
因此本文的目的依旧是去探索漏洞挖掘的思路,以下不代表漏洞作者思路,欢迎更好的想法,欢迎讨论。
附上2017 pwn2own mobile视频:
0×02 漏洞原理分析
同样的挖掘思路,依旧是从AndroidManifest.xml入手,寻找暴露的组件,并进行代码静态分析。
activity android:configChanges="keyboardHidden|layoutDirection|navigation|orientation|screenLayout|screenSize|smallestScreenSize" android:exported="true" android:label=" " android:name="com.zhangyue.iReader.online.ui.ActivityWeb" android:screenOrientation="portrait">
intent-filter>
data android:host="com.huawei.hwireader" android:scheme="hwireader" />
action android:name="com.huawei.hwireader.GLOBAL_SEARCH_CLICKED" />
category android:name="android.intent.category.DEFAULT" />
category android:name="android.intent.category.BROWSABLE" />
intent-filter>
activity>
切入com.zhangyue.iReader.online.ui.ActivityWebonCreate函数
protected void onCreate(Bundle arg8) {
...
this.mCoverViewManager = new OnlineCoverViewManager(((Context)this), this.k);
this.mCoverViewManager.setOnlineActivityOperation(((IOnlineActivityOperation)this));
this.mOnlineCoverView = this.mCoverViewManager.loadUrlOnNewCoverView("", true, this.getWebViewType());
this.mProgressWebView = this.mOnlineCoverView.getProgressWebView();
this.mWebView = this.mProgressWebView.getWebView();//获取webView实例类
...
boolean v0_1 = v2 == null || !v2.containsKey("isload") ? true : v2.getBoolean("isload");
String url = "";
if(v2 != null && (v2.containsKey("url"))) {
url = v2.getString("url"); //获取url参数的值
}
...
else if(!(this instanceof ActivityWeb)) {
if(url != null && !url.equals("")) {
this.c(url); // 加载url,最终调用loadRefreshUrl(String)函数
goto label_117;
}
this.loadNaviURL(this.c);
goto label_117;
}
}
/**
* 加载url,由参数uri控制
**/
protected void loadRefreshUrl(String arg2) {
this.g = arg2;
ActivityOnline.mNeedClearHistory = true;
if(this.mWebView != null) {