Android 安全--WebView不校驗證書漏洞
阿新 • • 發佈:2019-02-01
繼承關係
java.lang.Object
繼承者 android.os.Handler
繼承者 android.webkit.SslErrorHandler
問題方法
cancel( )
停止載入問題頁面
proceed( )
忽略SSL證書錯誤,繼續載入頁面
觸發條件:
1. 呼叫SslErrorHandler類的proceed方法
【1】對應到smali語句中的特徵:Landroid/webkit/SslErrorHandler;->proceed()V
2. 方法名:onReceivedSslError
Android WebView元件載入網頁發生證書認證錯誤時,會呼叫WebViewClient類的onReceivedSslError方法,如果該方法實現呼叫了handler.proceed()來忽略該證書錯誤,則會受到中間人攻擊的威脅,可能導致隱私洩露
修復
- 不呼叫android.webkit.SslErrorHandler的proceed方法
- 當發生證書認證錯誤時,採用預設的處理方法SslErrorHandler.cancel(),停止載入問題頁面
Cordova問題程式碼
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
final String packageName = parentEngine.cordova.getActivity().getPackageName();
final PackageManager pm = parentEngine.cordova.getActivity().getPackageManager();
ApplicationInfo appInfo;
try {
appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
// debug = true
//handler.proceed(); 這裡是問題程式碼
handler.cancel();
return;
} else {
// debug = false
super.onReceivedSslError(view, handler, error);
}
} catch (NameNotFoundException e) {
// When it doubt, lock it out!
super.onReceivedSslError(view, handler, error);
}
}