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

来源:互联网 发布:上海中医医院挂号 知乎 编辑:程序博客网 时间:2024/04/28 16:38

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来源的正确性


0 0
原创粉丝点击