首页 > 社交 > 科普中国

关于Android

常驻编辑 科普中国 2022-09-25 漏洞   生命周期   函数   组件   布局   加载   界面   参数   代码   方法
8fJ拜客生活常识网

  • 错误地实施 isValidFragment:

检查存在漏洞的类是否包含或沿用了实施 isValidFragment 的方式(即在所有代码路径中返回 True)。如果确实是这样,请更新该类,以检查是否存在允许的 Fragment 类列表。例如:如果 PreferenceActivity 应该允许使用 MyFragment 类而不得使用其他 Fragment,请按照如下方式实施检查:8fJ拜客生活常识网

public boolean isValidFragment(String fragmentName) {
	return MyFragment.class.getName().equals(fragmentName);

}
  • targetSdkVersion 小于 19 并且未实施 isValidFragment:

如果应用目前在清单中将其 targetSdkVersion 设为小于 19 的值,并且存在漏洞的类不包含 isValidFragment 的任何实施方式,那么漏洞便来自于 PreferenceActivity。8fJ拜客生活常识网

:由于Fragment可以加载APP内的任意未导出组件,因此Fragment注入漏洞可攻击面比较广8fJ拜客生活常识网

0x02 经典Setting Fragment Inject漏洞之绕过旧密码验证修改密码

首先我们来看一个经典的老洞,虽然现在没有了,但漏洞产生的原理,还是值得思考,而且修复的方式并不一定代表再新的版本中就不存在,这取决于开发人员的安全能力8fJ拜客生活常识网

Android 4.4之前版本的Fragment绕过PIN码攻击原理8fJ拜客生活常识网

  • 导出的PreferenceActivity的子类中,没有加入isValidFragment方法,进行fragment名的合法性校验,攻击者可能会通过设置Intent的extra,实现动态修改PreferenceActivity的初次显示的Fragment,来绕过限制,访问未授权的界面

8fJ拜客生活常识网

攻击条件8fJ拜客生活常识网

  • Android 4.3及之前版本
  • 有Activity继承PreferenceActivity类并且被声明成export=true

攻击面8fJ拜客生活常识网

  • 在Java中,当一个对象被构建的时候,这个类的静态构建函数和对象的构建函数都被执行,如果这两个函数包含特定的代码, 则可以触发攻击,由于构建出来的对象需要转换成Fragment对象,所以当产生的对象不是Fragment类型则会出异常
  • 但是,如果这个对象刚好是一个Fragment类型时,PreferenceActivity能展现对应的界面,可以绕过某些验证而直接呼出对应的界面

手工检测8fJ拜客生活常识网

  • 反编译APK,检索到继承PreferenceActivity的子类,查看子类是否重写了isValidFragment方法,Activity是否对外暴露(exported)

相关知识8fJ拜客生活常识网

  • PreferenceActivity两个重要的Intent Extra

这两个参数可以决定当前的PreferenceActivity首次显示的Fragment

相关阅读:

  • 不锈钢水槽漏洞怎么补
  • 用卢布买天然气存“漏洞”?企业竟可“绕开”制裁购买俄
  • 经过两个交易日之后,金州勇士目前的阵容名单如何?有什么
  • 对于疫情在极短时间内复现的新情况,要快上加快,堵上漏洞
  • 满是漏洞!电商平台;帮;未成年无限制游戏代充
  • 事以密成!高手表面人畜无害,实则鹰视狼顾
  • 直面问题
  • 什么是CSRF
  • 常见安全漏洞修复方法
  • 储户近200万巨款存入交通银行不翼而飞 人脸识别漏洞成
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。