2024 年度补丁分析:点我
给大家分享一个好消息,经过一年的研究,我现在在 Google BugHunters 平台上总排名 43,2024 年度第 6 名,Android Program 第 10 名!感谢各位一年陪伴!
最后更新时间:2025/01/28 更新内容:更新 2025-01
2025-01-01
这个月补丁好多,算是解答了上个月的“为什么这么少”的疑问
大家新年快乐!一直在等补丁链接,等了一个月还没放,只能先发一个不完整版的了
注:本月补丁链接未放出 以下部分补丁来源为手动还原
Framework
CVE-2024-49724 EoP High 1
AccountManagerService checkKeyIntent 加了个 setComponent 让 intent 变成显式 intent,防止 resolve 到 startActivity 期间某些影响 intent resolve 流程的因素发生改变,导致 TOCTTOU race condition。具体实例:Self-changing Data Type。
CVE-2024-49732 EoP High 1
CompanionDeviceManagerService 里新增的 enablePermissionsSync disablePermissionsSync getPermissionSyncRequest 三个 API 缺少权限检查,补丁限制只有 system uid 可以调用。只影响 15。
CVE-2024-49735 EoP High 1
存储 NotificationChannel 的时候,限制附带的 VibrationEffect 的大小。
CVE-2024-49737 EoP High 1
调用 startActivityInTaskFragment 的时候已经 clearCallingUid 了,之后在 AMS 里构造 SafeActivityOptions 的时候会拿到自己的 uid,改成调用的时候就主动按照已经记录的 calling uid/pid 构造 SafeActivityOptions 再传过去。只影响 13+。看了眼致谢信息,果然是 Michał Bednarski。
CVE-2024-49738 EoP High 1
Parcel::writeInplace() 在写入数据之前先校验数据。没太看懂咋触发,看描述是越界写。
CVE-2024-49744 EoP High 1
此漏洞由我发现并报告。
AccountManagerService checkKeyIntentParceledCorrectly 里只检查了 intent 的类型,没有检查再次反序列化后 intent 的类型,可以通过 bundle mismatch 的方式绕过。关于绕过了有什么用,可以查看这一篇: https://konata.github.io/posts/creator-mismatch/
注:这个漏洞看起来很明显,但实际上并不好利用,ChooseTypeAndAccountActivity 或者 AddAccountSettings 等常见利用点都已经在之前的 CVE-2023-20944 跟 CVE-2023-21124 的补丁里加上了 new Intent 使得我们伪造的 intent 并不会直接传递给 startActivity。那么如何触发这个漏洞呢?这里先留一个悬念,读者可以自己先思考思考。
CVE-2024-49745 EoP High 1
Parcel::growData 中如果现在的 data position 已经大于 data size 就直接返回。看漏洞描述是越界写。
CVE-2023-40108 ID High 1
SettingsProvider 中设置铃声的时候校验这个 URI 确实是一个音频文件。追代码可以看见后面会读取这个 URI 把它写进一个 cache dir 里,这里是以 SettingsProvider 的权限去读取,SettingsProvider 跑在 system_server 里所以是 system 权限,然后这个 cache file 可以通过调用 SettingsProvider 的 openFile() 打开,返回一个 InputStream 而不需要任何权限,所以这里是一个以系统权限读取任意 URI。
很早就知道的老问题了,属于有生之年系列,最早应该是 CVE-2022-20353 在 Settings 调用铃声选择器的时候加了校验,看代码可以发现 com.android.dialer.app.settings.DefaultRingtonePreference 也有类似问题(这个月的 CVE-2023-40132),而且铃声属于 Settings.System 组,可以被拿到读写系统设置权限的 app 手动触发。这次在根源上修复了,应该不会再有问题了。
CVE-2024-49733 ID High 1
此漏洞由我发现并报告。
Settings 的 ServiceListing 始终显示被启用了的服务,保证用户也能看见有些校验不通过但是已经被启用的服务。
感觉类型给错了,应该给 EoP 的
Media Framework
CVE-2023-40132 EoP High 1 2
跟上面的 CVE-2023-40108 是一个问题,不再重复解释了。这个补丁比上面那个补丁更早,是在运行在客户端的 RingtoneManager 里也加上文件类型检查,应该是给 com.android.dialer 或者其他 app 的情况用的。上面那个补丁应该也能覆盖这个漏洞的情况。
System
蓝牙开会了属于是
待分析漏洞:CVE-2024-49742 CVE-2024-49734
CVE-2024-43096 RCE Critical 1
蓝牙 GATT 协议栈 build_read_multi_rsp 函数中 MTU 等于 0 时的越界写入,补丁判断了这种情况直接返回。
CVE-2024-43770 & CVE-2024-43771 & CVE-2024-49747 & CVE-2024-49748 RCE Critical 1
四个漏洞都在 GATT 里,在四个不同的地方都没有检查 gatt_tcb_get_payload_size 的返回值是不是 0,而这个函数在 channel 已经被关闭的时候会返回 0,在后续造成越界写。
影响函数:
CVE-2024-43770 gatts_process_find_info
CVE-2024-43771 gatts_process_read_req
CVE-2024-49747 gatts_process_read_by_type_req
CVE-2024-49748 gatts_process_primary_service_req
CVE-2024-49749 RCE High 1
giflib 解析 gif 的过程中,判断 width 和 height 是否非法的 if 语句存在逻辑错误,变成了只有三项条件全部成立才认为文件非法,应该是三项条件里只要有一项成立就为非法。导致后续计算 size 的时候发生整数溢出进而越界写。
CVE-2024-34722 EoP High 1
蓝牙配对过程中的授权绕过问题,去年补丁就放过一次,看起来是没修复完
CVE-2024-34730 EoP High 1
蓝牙 HID 链接过程中的权限绕过问题
CVE-2024-43095 EoP High 1
改的地方很多,看起来是动态添加的权限相关的自动授权问题
In multiple locations, there is a possible way to obtain any system permission due to a logic error in the code. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is needed for exploitation.
1 | Fix Dynamic Permission group auto grant behaivor |
CVE-2024-43765 EoP High 1
悬浮窗覆盖漏洞再次限时回归。Document UI 这个 app 里隐藏遮盖窗体,防止点击劫持。
CVE-2024-43763 DoS High 1
一个蓝牙的逻辑 bug,应该只会造成功能异常?
CVE-2024-49736 DoS High 1
禁止在 DSU 模式下恢复出厂设置。可能是因为 DSU 用的 data 不一样,所以不会再要求输入一遍锁屏密码?