小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞

  • A+
所属分类:移动安全
小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞点击上方蓝字关注我们


小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞


概述


MIUI(米柚)是小米公司旗下基于Android系统深度优化、定制、开发的第三方手机操作系统。Powerkeeper应用程序是一款预装在一系列MIUI设备上的系统app。

研究人员在Powerkeeper应用程序中发现了一个任意文件覆盖漏洞,该漏洞是由于其配置文件提取的不安全实现导致的,具有篡改配置文件权限的攻击者能够以系统用户身份在设备上写入任意文件。

此外,由于配置文件是使用纯HTTP连接下载的,没有进行完整性检查。这使得同一网络上的攻击者可以通过MITM中间人攻击篡改可下载的配置文件。

技术细节


Powerkeeper应用程序的“CloudUpdateJobService”通过“com.miui.powerkeeper.utils.ThermalStoreUtils”类中定义的“downLoadConfigureDefault”函数在后台检查更新,这会触发设备上配置的热更新。

配置文件是从“http://file.market.xiaomi.com/download/<exloc>”下载的,其“exloc”值是从另一个托管在https://ccc.sys.intl.xiaomi.com/api/v1/base/profile/thermal/thermal_config_path/<type>”的CDN服务器中读取的。

由于配置文件是通过纯HTTP连接下载的,应用程序中没有对其进行额外的完整性检查,使得同一网络上的攻击者可以通过MITM中间人攻击篡改可下载的配置文件。

下载配置文件后,会通过“FileUtil.unZipFile”函数进行不安全解压缩,该函数由“com.miui.powerkeeper.utils.ThermalStoreUtils”类中定义的“unZipConfig”函数触发。不安全解压函数的代码片段如下所示:

entry = (ZipEntry)entries.nextElement();if(!entry.isDirectory()) {    v5 = zipfile.getInputStream(entry);    bis = new BufferedInputStream(v5);    File v8 = new File(unzip_dir + File.separator + entry.getName());    File v0_13 = v8.getParentFile();    if(v0_13 != null && !v0_13.exists()) {        v0_13.mkdirs();    }
fos = new FileOutputStream(v8); v0_10 = new BufferedOutputStream(fos, 0x800); byte[] v1_4 = new byte[0x800]; while(true) { int v2_2 = bis.read(v1_4, 0, 0x800); if(v2_2 == -1) { goto label_200; }
v0_10.write(v1_4, 0, v2_2); }}

从以上代码片段中可以看出,解压缩的文件路径是通过字符串连接构建的,使用zip条目的路径,并且没有对文件路径进行检查。这将构成“Zip Slip”漏洞,该漏洞其实也是目录遍历的一种,可通过应用程序解压恶意的压缩文件来进行攻击。利用该漏洞,攻击者能够以系统身份覆盖应用程序的合法可执行文件或配置文件。

请注意,通过将“android:sharedUserId”属性设置为“android.uid.system”,Powerkeeper应用程序也以系统用户身份运行。这可能会导致严重的系统漏洞,因为攻击者可能会覆盖系统用户拥有的文件(如果不受 SELinux 保护)。

影响


同一网络上的攻击者可以滥用Powerkeeper应用程序以系统用户的身份在设备上写入任意文件。


缓解措施


建议受影响的用户尽快检查上述的不安全实现,确保在执行任何敏感文件操作之前会对文件路径进行验证,还可以对下载的配置文件实施完整性检查。小米已于2021年4月13日获悉此安全漏洞,该漏洞被记录为CVE-2021-0501。


小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞

END



小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞


好文!必须在看

本文始发于微信公众号(SecTr安全团队):小米MIUI Powerkeeper应用程序中的Zip Slip任意文件覆盖漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: