type
status
date
slug
summary
tags
category
icon
password
漏洞信息
漏洞信息:
Product: Magisk
CVE: N/A (not yet assigned)
Reporter: @vvb2060
Initial Report Date: 2024-08-01
Patch Date: 2024-08-21
Disclosure Date: 2024-08-24
Affected Versions: Manager v7.0.0 ~ Canary 27006
First Patched Versions: Canary 27007
Issue/Bug report: topjohnwu/Magisk#8279
Bug-introducing CL: https://github.com/topjohnwu/Magisk/commit/920b60da19212dd8d54d27ada77a30067ce50de6
Bug Class: Unsafe Dynamic External Code Loading
Weakness Enumerations:
易受攻击的设备
- 未预装 GMS 的设备
- 签名验证实现损坏的设备(例如被 CorePatch 禁用)
注意:此问题已在 Canary 27007 中修复,方法是在加载 GMS 之前确保它是系统应用。但是,在预装了 GMS 但签名验证实现已损坏的设备上(例如 CorePatch),仍有可能利用此问题。
漏洞分析
Magisk 是一套用于定制 Android 的开源软件。在 canary 27007 版本之前,在安装
ProviderInstaller.java
时,由于缺少验证,存在一种将任意代码加载到 Magisk 应用程序中的方法。这可能导致本地权限提升,从而使攻击者无需额外权限即可获得 root 访问权限。利用此漏洞无需用户交互。Magisk原本在
app/shared/src/main/java/com/topjohnwu/magisk/ProviderInstaller.java
的代码逻辑如下。当一个应用程序调用 createPackageContext
方法并传入 CONTEXT_IGNORE_SECURITY
和 CONTEXT_INCLUDE_CODE
标志,然后调用 getClassLoader()
获取类加载器时,可能会导致代码执行漏洞。攻击者可以通过冒充一个未被占用的包名(包名抢注)来利用这个漏洞。com.google.android.gms.common.security.ProviderInstallerImpl
是 Google Play 服务的一部分,用于确保 Android 应用程序使用最新的安全提供程序。具体来说,它用于更新设备上的安全提供程序(如 SSL/TLS 提供程序),以确保应用程序能够使用最新的安全协议和修复已知的安全漏洞。如果设备并没有安装google
服务或签名验证损坏的情况下,可以通过安装一个恶意App,其中包括伪造的GMS
包,只需要实现ProviderInstallerImpl
即可加载执行任意代码。Magisk 假设从GMS加载代码始终是安全的,但攻击者可以创建具有相同软件包名称的虚假恶意应用程序。启动Magisk应用程序时,恶意代码将在Magisk应用程序中执行。由于Magisk应用程序始终被授予root访问权限,因此攻击者可以悄悄获得 root 访问权限并以
root
权限执行任意代码,而无需用户同意。查看
POC
的ProviderInstallerImpl
实现如下,即由Magisk本身执行su
进行提权,然后通过Parcel将读写ParcelFileDescriptor
传递回去。装入恶意App,然后强行停止Magisk和恶意App,重新先后打开Magisk和恶意App即可实现本地提权。
漏洞修复
综上,对应的修复方法就是验证GMS是否为系统应用,是则允许加载,否则不允许。
‣
在
app/shared/src/main/java/com/topjohnwu/magisk/ProviderInstaller.java
中添加对GMS包是否是系统应用的校验,仅当为系统应用时才允许加载类。- 作者:LLeaves
- 链接:https://lleavesg.top//article/MagiskEop
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章