将Android App上线前送检,安全检测漏洞修复(目录仅对ionic/cordova类混合APP有效)
低风险
1. BroadcastReceiver组件暴露 导出的广播可以导致数据泄漏或者是越权。
如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。
中风险
1.android:debuggable 属性的设置可能会引起 被动态调试的风险。
在AndroidMainifest.xml中最好不设置android:debuggable属性置,而是由打包方式来决定其值。
如果设置了 android:debuggable=”true” 那么在正式打包时 把它设置成false;但是Android Studio提示需要设置上 tools:ignore="HardcodedDebugMode"
2.android:allowBackup 属性的设置可能会引起用数据被任意备份的风险
开发者务必将 allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。
<application
android:allowBackup="false"
android:debuggable="false">
......
</application>
高风险
1.WebView组件系统隐藏接口未移除漏洞
platforms/android/app/src/main/java/org/apache/cordova/inappbrowser/InAppBrowser.java文件 inAppWebView = new WebView(cordova.getActivity());下添加
inAppWebView.removeJavascriptInterface("searchBoxJavaBridge_");
inAppWebView.removeJavascriptInterface("accessibility");
inAppWebView.removeJavascriptInterface("accessibilityTraversal");
2.android主机名/证书 弱校验风险
platforms/android/app/src/main/java/com/skspruce/ism/mobile/cordova/CordovaPluginWifi.java 文件 public void getWebVersion(){ }内注释try里面的X509TrustManager函数,并设置 OkHttpClient client = new OkHttpClient.Builder()
// .hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager)
.build();
3.Android平台WebView控件跨域访问高危漏洞,同1:platforms/android/app/src/main/java/org/apache/cordova/inappbrowser/InAppBrowser.java文件 inAppWebView = new WebView(cordova.getActivity());下添加
inAppWebView.getSettings().setAllowFileAccessFromFileURLs(false);
inAppWebView.getSettings().setAllowUniversalAccessFromFileURLs(false);
4.Webview绕过证书校验漏洞
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java文件下
if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
// debug = true
handler.proceed();
// Webview绕过证书校验漏洞,生产环境用handle.cancel();
// handle.cancel();
return;
}else{
// debug = false
handler.cancel();
super.onReceivedSslError(view, handler, error);
}
CordovaPluginWifi.java 文件下
import android.content.pm.ApplicationInfo;
将OkHttpClient client = new OkHttpClient.Builder().hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager).build();替换成:
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
// Debug忽略HTTPS校验
final String packageName = cordova.getActivity().getPackageName();
final PackageManager pm = cordova.getActivity().getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
clientBuilder = clientBuilder.hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager);
}
OkHttpClient client = clientBuilder.build();
本文介绍了在Android App上线前的安全检测漏洞及其修复方法,包括BroadcastReceiver组件的权限控制,避免android:debuggable和android:allowBackup带来的风险,修复WebView的相关漏洞,以及正确处理SSL证书校验。确保混合型App如Ionic/Cordova的安全性。

1296

被折叠的 条评论
为什么被折叠?



