您的位置:首页 > 移动开发 > Android开发

Android静态安全检测 -> Fragment注入攻击漏洞

2016-11-22 18:10 627 查看
Fragment注入攻击漏洞 - PreferenceActivity类

一、API

1. 继承关系

【1】java.lang.Object

【2】android.content.Context

【3】android.content.ContextWrapper

【4】android.view.ContextThemeWrapper

【5】android.app.Activity

【6】android.app.ListActivity

【7】android.preference.PreferenceActivity

2. 主要方法

【1】isValidFragment(String fragmentName) 

         返回Boolean(子类应当重写这个方法,并对fragment进行校验判断)

【2】onCreate(Bundle savedInstanceState),onDestroy(),onStop()

【3】参考链接

https://developer.android.com/reference/android/preference/PreferenceActivity.html#isValidFragment(java.lang.String)

3. PreferenceActivity两个重要的Intent Extra

【1】
extra
域包含
PreferenceActivity
要动态加载的
Fragment


PreferenceActivity.EXTRA_SHOW_FRAGMENT
(’:android:show_fragment’)


【2】
extra
域包含传给该
Fragment
的参数

PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS(’:android:show_fragment_arguments’)

4. Fragment与Activity的关系

【1】一个Activity提供了一个单一的屏幕和一些功能(例如,浏览器的书签管理器)

          一个Fragment可以被认为是sub-activity,这是应用程序UI的一个小部分

【2】Fragments能够灵活的允许在不同的activities重用,当一个Fragment实例在Activity里面驻留耦合时,不同实例可以嵌入到不同的Activity中

【3】Fragment和Activity的关系图



【4】参考链接

http://wolfeye.baidu.com/blog/android-fragment-injection/

http://bbs.pediy.com/showthread.php?t=183459&highlight=fragment

二、触发条件

1. 继承自PreferenceActivity类

【1】对应到smali语句中的特征

.super Landroid/preference/PreferenceActivity;


2. 判断子类中是否重写isValidFragment方法

【1】对应到smali语句中的特征

r'\.method.+isValidFragment\(Ljava/lang/String;\)Z'


3. 判断Activity是否对外暴露(exported属性为true)

三、漏洞原理

【1】导出的PreferenceActivity的子类中,没有加入isValidFragment方法,进行fragment名的合法性校验,攻击者可能会绕过限制,访问未授权的界面

【2】更多内容

http://drops.xmd5.com/static/drops/mobile-8165.html

四、修复建议

【1】如果应用的Activity组件不必要导出,或者组件配置了intent filter标签,建议显示设置组件的“android:exported”属性为false

【2】重写isValidFragment方法,验证fragment来源的正确性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息