描述
Android应用程序使用隐式意图传输敏感数据的其他应用程序。
扩展描述
因为一个隐式意图不指定一个特定的应用程序来接收数据,任何应用程序可以通过使用一个意图过滤器处理的意图,意图。这可以允许不受信任的应用程序获得敏感数据。有两种不同的标准广播意图,命令和粘性。
命令广播意图传递的一系列注册接收器的顺序优先宣布的接收器。恶意接收方可以给自己一个高优先级,造成拒绝服务进一步通过阻止广播传播链。还有恶意数据修改的可能性,作为一个接收器也可能改变数据在意图传递给下一个接收方之前。下游组件无法断言早些时候没有改变的数据链。
粘性广播意图保持在最初的广播。老粘性意图将再次播放任何新的接收器注册它在未来,大大增加信息的机会接触。同时,粘性广播不能保护权限,可能适用于其他类型的意图。
此外,任何广播意图可能包括一个URI引用数据接收组件通常没有权限访问。发送方的意图可以包括特权授予接收方读或写访问特定的URI中包含的意图。恶意接收方拦截这个意图也将获得这些特权,可以读或写的资源在指定的URI。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
保密
|
可能是不可信的,其他应用程序可以读取数据,通过意图。 |
|
完整性
|
应用程序可以处理响应来自不受信任的应用程序在设备上,这可能导致执行意外或未经授权的操作。 |
|
示范例子
示例1
这个应用程序想要创建一个用户帐户在几个受信任应用程序使用一个广播意图:
目的意图= new意图(); intent.setAction (“com.example.CreateUser”); 意图。putExtra(“用户名”,uname_string); 意图。putExtra(“密码”,pw_string); sendBroadcast(意图);
这个应用程序假定只有受信任应用程序将监听行动。恶意应用程序可以注册这个动作,拦截用户的登录信息,如下:
IntentFilter过滤器= new IntentFilter (“com.example.CreateUser”); MyReceiver接收机= new MyReceiver (); registerReceiver(接收机、过滤);
当广播包含敏感信息,创建一个allowlist的应用程序可以使用应用程序的清单文件接收行动,或通过编程的方式将每个目的意图接收器。
示例2
这个应用程序与web服务接口,需要一个单独的用户登录。它创建一个粘稠的意图,所以未来还受信任的应用程序使用web服务将知道当前用户是谁:
目的意图= new意图(); intent.setAction (“com.example.service.UserExists”); 意图。putExtra(“用户名”,uname_string); sendStickyBroadcast(意图);
IntentFilter过滤器= new IntentFilter (“com.example.service.UserExists”); MyReceiver接收机= new MyReceiver (); registerReceiver(接收机、过滤);
粘性的广播可以读任何应用程序在任何时候,所以不应该包含敏感信息,比如用户名。
示例3
此应用程序发送一个有序广播,让其他应用程序打开一个网址:
目的意图= new意图(); intent.setAction (“com.example.OpenURL”); 意图。putExtra (“URL_TO_OPEN”, url_string); sendOrderedBroadcastAsUser(意图);
广播链可能改变数据的任何应用程序内的意图。这个恶意应用程序改变URL指向一个攻击网站:
公开课CallReceiver BroadcastReceiver{延伸
@Override 公共空间onReceive(上下文语境,意图意图){
字符串Url = intent.getStringExtra (Intent.URL_TO_OPEN); attackURL = "www.example.com/attack?”+Url; setResultData (attackURL); } }
最后接收应用程序将打开攻击URL。在可能的情况下,意图发送给特定的受信任应用程序而不是使用广播链。
示例4
这个应用程序发送一个特殊目的的国旗允许接收应用程序读取数据文件进行备份。
目的意图= new意图(); intent.setAction (“com.example.BackupUserData”); intent.setData (file_uri); intent.addFlags (FLAG_GRANT_READ_URI_PERMISSION); sendBroadcast(意图);
公开课CallReceiver BroadcastReceiver{延伸
@Override 公共空间onReceive(上下文语境,意图意图){
用户数据Uri = intent.getData (); stealUserData(用户数据); } }
任何恶意应用程序可以注册以接收此意图。因为FLAG_GRANT_READ_URI_PERMISSION包括目的,恶意接收方代码可以读取用户的数据。
潜在的缓解措施
实施阶段:
如果应用程序只需要沟通与自己的组件,然后目标始终是已知的,可以使用一个显式意图。 |
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
引用
|