保护Android Intent中的额外数据

use*_*703 7 android android-intent android-4.2-jelly-bean

我正在使用Intent在新任务中启动一个新的Activity.此Intent在其附加内容中携带该Activity所需的一些私有数据.其他应用程序不应读取此数据.我们已经调查过这些数据是否确实没有泄露.我们发现通过使用getRecentTasks()中的RecentTaskInfo,任何具有GET_TASK权限的任意应用程序都可以读取这些额外数据.这不是很安全.一旦发现这个泄漏,我们就停止了搜索.这些数据泄露的方式有多少?而且,我如何确保其他应用程序无法读取额外数据?

bas*_*ske 8

从Android 4.1.1开始,添加了一项额外的权限,以防止额外的第三方应用使用RecentTaskInfo.此权限(android.Manifest.permission.GET_DETAILED_TASKS)只能由系统获取.如果没有此权限,额外的内容将在baseIntent通过之前返回之前被换出RecentTaskInfo.

来自提交的评论http://androidxref.com/4.2.2_r1/history/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#8238e717df4bc5eebf15f97172d68af3599a95bb:

添加新的签名级权限以获取任务的详细信息.

第三方应用程序现在无法访问与任务相关的意图的额外内容,以防止其中的私有数据泄漏.

更改ID:I95af9e181ac42557bc8b981807e7ddd266a88d0e

因此,似乎正在努力使意图更安全地传输敏感信息.我不知道是否还有其他方式可以泄漏这些额外的东西,但至少从JB上来看,额外的东西似乎没问题.


Com*_*are 6

此Intent在其附加内容中携带该Activity所需的一些私有数据

为什么?将标识符传递给附加组件中的私有数据,其中将这些标识符解析为该私有数据(例如,数据库查询)只能由活动完成.

我们发现通过使用getRecentTasks()中的RecentTaskInfo,任何具有GET_TASK权限的任意应用程序都可读取此额外数据

是的,我近两年前写过关于这个的博客,其他人甚至可能在那之前做过.

这些数据泄露的方式有多少?

所有启动其他组件的请求都是通过OS进程进行的,因此数据一直"泄漏"到操作系统.

而且,根据你Intent对它的处理方式,你可能会以其他方式泄露它(例如,将Intent自己作为一个传递Parcelable给其他应用程序).

而且,我如何确保其他应用程序无法读取额外数据?

你不能.同样,不要将私有数据放在活动附加项中,而是使用可用于获取私有数据的标识符.