Get Mystery Box with random crypto!

magisk可能导致设备唯一标识符泄漏 受影响版本:27.0之前所有版本 | Magisk alpha

magisk可能导致设备唯一标识符泄漏

受影响版本:27.0之前所有版本,以及特殊情况下27003以后所有版本
受影响设备:Android11及更高设备

详情

Android11起系统限制用户应用使用netlink的RTM_GETLINK读取网卡mac地址,这是通过自定义SELinux添加标志位实现的,该修改被Linux上游拒绝,是Android特定修改。
在27.0之前,magisk使用上游libselinux库,因此该Android特定标志在修补sepolicy时丢失,导致未能正常启用限制,任何应用都可以读取mac地址。
在27.0后,magisk为所有设备无条件启用限制。但是部分升级了新内核的设备支持处理该标志,用户空间内的sepolicy却没有做好准备,导致全部进程都受到限制,直观表现是无法连接WiFi。
27003起,magisk解析旧sepolicy的标志,复制到新sepolicy,原问题得以解决。

magisk的sepolicy实时修补功能从内核读取当前sepolicy,修补规则后重新加载sepolicy。由于内核存在bug,Android特定标志不会报告给用户空间,magisk读取出的当前sepolicy永远没有此特定标志。因此在sepolicy实时修补后,限制被禁用,所有应用可以读取mac地址。
可以用 https://android-review.googlesource.com/c/kernel/common/+/3009995 修复此内核bug,但补丁由于不明原因被Google要求应该提交给Linux上游,随后又说应该删除此Android特定功能。总之,该补丁目前被Google拒绝合并,我们也无能为力。比起无法连接WiFi,实时修补sepolicy后会泄露mac地址显得可以接受。

利用情况

我们观察到流行应用正在使用RTM_GETLINK获取设备mac地址。至少一个应用通过判断Android11+设备依然能读取mac地址检测magisk。

建议

Android11之前的设备不受影响。其它设备应该升级到magisk 27.0。如果无法使用WiFi,升级到27003。在27003+时,不要使用sepolicy实时修补,检查所有模块和root应用,要求它们的开发者切换到sepolicy.rule。

相关链接

magisk导致mac地址泄露 https://github.com/topjohnwu/Magisk/issues/7636
magisk破坏了WiFi https://github.com/topjohnwu/Magisk/issues/7764
magisk复制Android特定标志到新sepolicy https://github.com/topjohnwu/selinux/commit/48fcf8bba0635dc597bef75994294fd055d9f0ba
内核中Android特定标志的实现(只处理了 policydb_read() 函数,忘记处理 policydb_write() 函数) https://android.googlesource.com/kernel/common/+/dc34c9f193fd4e3476e0e9331f5fdacce6fbc6fc https://android.googlesource.com/kernel/common/+/bdf56fbea560eea1e9c2793d69ba13cca2596d7d
内核修复补丁,处理了 policydb_write() 函数 https://android-review.googlesource.com/c/kernel/common/+/3009995

致谢

aviraxp https://t.me/qianqianzhuang/33