腾讯qq客户端,里面声明了如下的一个acitivity
<activity android:name=".activity.ForwardRecentActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:configChanges="locale|keyboardHidden|orientation" android:alwaysRetainTaskState="true" android:windowSoftInputMode="adjustPan"> <intent-filter> <action android:name="com.tencent.intent.QQ_FORWARD" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
根据android 的官方说明,如果acitity,默认没有声明export,其在声明了filter,该acitity将默认发布出去。
攻击着,采用显示intent调用component: com.tencent.mobileqq com.tencent.mobileqq.activity.ForwardRecentActivity
能够唤起页面,这个里面含有最近联系人信息,且点击 qq好友能够看到好友分组全部信息,信息泄漏(此时用户可以不处于登录状态)
1:登录qq
2:注销 qq
3:发送一个intent,可以唤起页面【里面有历史聊天人员】
4:可以点击,[qq好友] 按钮,看到所有的分组和qq好友信息【泄漏】。
Intent qq = new Intent(); ComponentName com = new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.ForwardRecentActivity"); qq.setComponent(com); startActivity(qq);
修复方案:
1、业务上控制,当前页面进行拦截,如果发现没有登录,跳转到登录页面
2、如果该activity只是qq内部使用,建议将sign级别的签名或者干脆就不要暴露出去,即添加android:exported="false"