Fragment Injection漏洞杂谈

路人甲 2015-08-21 10:23:00

0x00 背景


13年的时候,IBM的安全研究人员发现了1个Google框架层的漏洞Fragment注入漏洞,该漏洞可以导致Android手机的PIN码被重置,大家应该对图1不陌生。这个漏洞之后,业界对该漏洞的影响没有进一步的探讨,本文将对该漏洞进行进一步的探讨,欢迎拍砖。

0x01 Fragment注入漏洞详情


Android Framework提供了android.preference.PreferenceActivity这个类来对preference进行展示,我们可以继承这个类来展示preference,并进行扩展。基类中会接收Intent数据,并进行一定检查,其中两个比较重要:

PreferenceActivity.EXTRA_SHOW_FRAGMENT (’:android:show_fragment’) and PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS (’:android:show_fragment_arguments’)。第一个extra域包含PreferenceActivity要动态加载的Fragment,第二个extra域包含传给该Fragment的参数。Fragment也可以通过Fragment.getActivity这个函数来获取传进来的参数。PreferenceActivity会调用Fragment.instantiate来动态加载Fragment.这个函数通过反射来加载Fragment,并把它变成Fragment对象。如图2所示。

任何继承自PreferenceActivity并对外导出的组件,都会受到攻击。恶意app可以传:android:show_fragment这个extra值来指定要动态加载的类。在PreferenceActivitycontext里,通过dalvik.system.PathClassLoader函数来动态加载类,由于没有对请求的app进行校验,恶意app可以动态加载有漏洞app里面的任何类(包括未导出类),使得恶意app可以访问有漏洞app的隐私信息。

0x02 Fragment注入漏洞利用


1.拒绝服务

由于通过该漏洞可以加载app里面的任何类,包括未导出类,如果未导出类对畸形消息处理不当,将会导致本地拒绝服务漏洞。下面以IRCCloud软件为例。

com.irccloud.android.activity.PreferencesActivity组件对外导出:

com.irccloud.android.activity.PreferencesActivity组件继承自PreferenceActivity

由于没有对Fragment注入漏洞进行防御,可通过该漏洞加载app内任意不导出的组件。选择com.irccloud.android.fragment.ServerReorderFragment作为攻击目标:

ServerReorderFragment没有对畸形消息进行处理,导致拒绝服务,见下图。

2.远程命令执行

由于现在很多组件都是基于Webview来展示页面,并且Fragment组件应用越来越广,以后将会有越来越多的Webview组件是基于Fragment来展示。由于Fragment注入漏洞可以加载app内任意未导出组件,如果基于FragmentWebview组件存在addJavascriptInterface漏洞,将会导致远程命令执行漏洞。在市面上的app里找了下,发现很多Webview组件基于Fragment,但是继承自PreferenceActivity的组件是不导出的,因此下面将自己写个demo来验证下可行性。

MainActivity导出,并继承自PreferenceActivity

WebviewFragment导出js接口,并加载url。

利用Fragment Injection漏洞对WebviewFragment攻击。

通过Fragment Injection漏洞,WebviewFragment已加载恶意html,存在远程代码执行漏洞攻击,见图。

四、总结


由于可以加载app内的任意未导出组件,因此Fragment注入漏洞可攻击点还是挺多的。本文对Fragment注入漏洞进行抛砖引玉,希望大牛们能对该漏洞进一步开发。<sub>~</sub>~

评论

T

theone 2015-08-21 18:02:49

先mark下,细看

路人甲

真正的路人甲.

twitter weibo github wechat

随机分类

memcache安全 文章:1 篇
IoT安全 文章:29 篇
数据分析与机器学习 文章:12 篇
数据安全 文章:29 篇
Web安全 文章:248 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Article_kelp

因为这里的静态目录访功能应该理解为绑定在static路径下的内置路由,你需要用s

N

Nas

师傅您好!_static_url_path那 flag在当前目录下 通过原型链污

Z

zhangy

你好,为什么我也是用windows2016和win10,但是流量是smb3,加密

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

目录