Ionic项目中引入极光推送导致的高危问题记录
安全检测出的问题如下:
3.3.2 四大组件配置安全规范检测
3.3.2.1 Activity 最小化特权检测
检测目的
检测应用 Activity 权限攻击
重要等级
高
危害
应用组件如果存在权限攻击漏洞则该组件能够被外部的其他组件直接调
用,这样就可能产生泄露隐私数据或者应用程序崩溃等漏洞。恶意应用
可以传递有害数据或者命令给受害的 Broadcast Receiver,而 Receiver 接
收到有害的数据或者命令时可能泄露数据或者做一些不当的操作。也有
可能 Receiver 去开启其它的 Activity 或者 Service,从而产生更大的危
害。 Activity 被恶意应用开启,可能有一下危害:修改程序的状态或者
数据;用户被欺骗(比如用户点击一个恶意应用的 Setting,恶意应用开
启受害应用的设置,此时用户以为在修改恶意应用的 Setting,这样受害
应用的设置可能被用户无意识的修改);被调用的 Activity 可能返回隐
私的信息给恶意应用,造成数据泄露;可能会是应用程序崩溃,造成拒
绝服务等漏洞。
检测结果
高危
检测详情
总共检测 Activity 配置代码【4】条;
检测到未进行正确配置的代码【1】条;
检测到正确配置的代码【3】条
未进行正确配置的代码为:
activity android:exported="true"
android:name="cn.jpush.android.service.JNotifyActivity"
android:taskAffinity="jpush.custom" android:theme="@android:01030010"
正确 Activity 组件配置的代码为:
activity android:exported="false" android:launchMode="3"
android:name="de.appplant.cordova.plugin.localnotification.ClickReceiver"
android:theme="@android:0103000F"
activity android:exported="false"
android:name="cn.jpush.android.ui.PopWinActivity"同智签安全检测评估报告
android:theme="@7F0B0000"
activity android:configChanges="0x000000A0" android:exported="false"
android:name="cn.jpush.android.ui.PushActivity"
android:theme="@android:01030006"
解决方案
设置组件 EXPORTED=False 并且尽量不包含任何的 Intent Filter。
3.3.2.2 Service 最小化特权检测
检测目的
检测应用 Service 权限
重要等级
中
危害
Service 执行的操作一般比较敏感,比如更新数据库、提供事件通知等,
因此一定要确保访问 Service 的组件有一定的权限。否则可能被恶意应用
提供获取重要信息的漏洞,没有声明任何权限的应用即可在没有任何提
示的情况下启动该服务,完成该服务所作操作,对系统安全性产生极大
影响。
检测结果
中危
检测详情
总共检测 service 身份配置代码【3】条;
检测到未进行正确配置的代码【2】条;
检测到正确配置的代码【1】条;
未进行正确配置的代码为:
service android:enabled="true" android:exported="true"
android:name="cn.jpush.android.service.DaemonService"
service android:name="cn.jiguang.cordova.push.PushService"
android:process=":pushcore"
正确 service 组件配置的代码为:
service android:exported="false"
android:name="cn.jpush.android.service.PushService"
android:process=":pushcore"
解决方案
在主配文件里面给 Service 设置权限,一般设置 Exported 属性为
False。不要轻易给未知名的 Service 传递 Intent。
3.3.2.3 Broadcast Receiver 最小化特权检测
检测目的
检测应用 Broadcast Receiver
重要等级
高
危害
Broadcast Receiver 设计的初衷是从全局考虑可以方便应用程序和系统、同智签安全检测评估报告
应用程序之间、应用程序内的通信,所以对单个应用程序而言 Broadcast
Receiver 是存在安全性问题的,比如恶意程序可以不断的去发送你所接
收的广播,这样会造成应用被攻击,有可能导致应用直接退出,处理逻
辑出错等问题。
检测结果
高危
检测详情
总共检测 receiver 配置代码【7】条;
检测到未进行正确配置的代码【1】条;
检测到正确配置的代码【6】条;
未进行正确配置的代码为:
receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver"
正确 receiver 组件配置的代码为:
receiver android:exported="false"
android:name="de.appplant.cordova.plugin.localnotification.TriggerReceiver
"
receiver android:exported="false"
android:name="de.appplant.cordova.plugin.localnotification.ClearReceiver"
receiver android:enabled="true" android:exported="false"
android:name="cn.jpush.android.service.PushReceiver"
receiver android:exported="false"
android:name="cn.jpush.android.service.AlarmReceiver"
receiver android:exported="false"
android:name="cn.jpush.android.service.SchedulerReceiver"
...
此处省略【1】条数据
...
解决方案
广播发送方通常选择给每个发送 Broadcast Intent 授予 Android 权限;
接收方不但需要符合 Intent filter 的接收条件,还要求 Broadcast
Receiver 也必须具有特定权限(给发送方授予权限要一致)才能接收
( 双 层 过 滤 ) 。 尽 量 使 用 LocalBroadcastManager,LocalBroadcastManager 只会将广播限定在 当前应用程序中。
以上问题都是未设置android:exported="false"导致的,如果将true改为false或者默认设置false属性,对极光推送无影响,只是可能影响页面的拉起功能,比如点击通知栏消息拉起页面。如果安全检测要求很严格的话,可以设置为false。