2024 年度补丁分析:点我
给大家分享一个好消息,经过一年的研究,我现在在 Google BugHunters 平台上总排名 43,2024 年度第 6 名,Android Program 第 10 名!感谢各位一年陪伴!
最后更新时间:2025/02/24 更新内容:更新 2025-02 并添加状态更新
状态更新:由于本人健康问题,预计近期对电子产品的使用将会受限,此博客跟我的频道可能会更新缓慢,尝试联系我可能无法连通或回复缓慢,建议关注我的频道获取最新状态
2025-02-01
可能的被在野利用漏洞:CVE-2024-53104,内核中 USB 模块的越界写入
Framework
CVE-2024-49721 EoP High 1
见 CVE-2024-49721 InputMethodSubtypeArray 反序列化漏洞分析
CVE-2024-49743 EoP High 1 2 3
这个漏洞比较复杂,后续会单独发文章解析,敬请期待
CVE-2024-49746 EoP High 1 2
Parcel::continueWrite 中的 fd 处理问题,看起来是会错误 close 掉不该被关闭的 fd?还加了很多溢出的检查
CVE-2025-0097 EoP High 1
WindowManagerService transferTouchGesture 中除了校验 token 还需要校验 calling uid 跟 owner uid 相等。只影响 15
CVE-2025-0098 EoP High 1
TaskFragmentOrganizerController 内会检查 activity 的 pid 与注册 organizer 的时候的 calling pid 是否相等,如果不相等说明不是同一个进程,这个时候不发送 activity token 以避免它泄露。但是这个检查存在缺陷,因为如果 app 进行 binder transact 的时候指定了 FLAG_ONEWAY,说明这是一个异步调用,这个时候被调用者拿到的 calling pid 会是 0,以此可以泄露出 pid 是 0 的 ActivityRecord 的 token。什么时候 ActivityRecord 的 pid 是 0?怀疑是 activity 所属的进程已经退出了的时候。只影响 15。
CVE-2025-0099 EoP High 1
CompanionDeviceManagerService 新增的 getBackupPayload 和 applyRestoredPayload 这两个函数没有权限检查,应该加上 uid 校验,只允许 system 身份调用。
CVE-2023-40133 ID High
CVE-2024-0037 ID High
1
检查 Autofill 相关的 Slice 中的 Icon URI 是否属于当前用户,避免跨用户泄漏。这个应该是去年就放过一次,不知道为什么又放了一遍
CVE-2023-40134 ID High
CVE-2023-40135 ID High
CVE-2023-40136 ID High
CVE-2023-40137 ID High
CVE-2023-40138 ID High
CVE-2023-40139 ID High
1
检查 Autofill 相关 RemoteViews 中 URI 是否全部属于当前用户,避免跨用户泄漏。这个去年也放过一次,同样搞不懂为什么又放
CVE-2025-0100 ID High 1
此漏洞由我发现并报告。
SystemUI MediaProjectionPermissionActivity 使用 getCallingPackage 获取调用者然后校验其权限,如果是特权应用就跳过确认环节。但是 getCallingPackage 的返回结果实际上可以被伪造,补丁改成了更准确的 getLaunchedFromPackage。
这里有一个好玩的点,就是 getCallingPackage 返回的是哪个 app 会收到当前 Activity 返回的结果,所以可以被伪造,但是 SystemUI 需要把 IMediaProjection 返回给调用者然后调用者才能使用它开始录屏,伪造 getCallingPackage 实际上会导致应用收不到返回的 binder 自然也就无法完成后续利用。那么这个看起来触发条件和可用性相悖的漏洞是怎么被利用的呢?这里先卖个关子,读者可以先自己思考思考。
CVE-2024-49741 DoS High 1
此漏洞由我发现并报告。AppWidgetServiceImpl 中限制一个应用最多可以创建 20 个 host,每个 host 可以拥有 200 个 widget,这个补丁之前是完全没有限制的,所以可能发生超大数据量导致 DoS。
Platform
CVE-2025-0094 EoP High 1
禁止 work profile 打开多用户管理页面,看漏洞描述是可以移除 work profile?
System
CVE-2025-0091 EoP High 1
在 Settings 应用中的账号管理页面里,禁止启动带有 content URI 的 intent。跟 Self-changing Data Type - CVE-2024-40676 漏洞分析 是同一类漏洞,去年那篇文章一直没发就是为了等这个漏洞审核,可惜 duplicate 了 😭
CVE-2025-0095 EoP High 1
Settings AppTimeSpentPreference 中使用一个只有 Action 的隐式 Intent 启动 Activity,可能会被恶意应用劫持。补丁给这个 intent 加上了 setPackage。
CVE-2025-0096 EoP High 1
nfc 模块里面有个 malloc 的 size 写小了,只影响 15
CVE-2024-49723 ID High 1 2
移除 Conscrypt 的 3DES 支持,只给 15 更新了
CVE-2024-49729 ID High 1
fs_mgr/libdm/dm.cpp 中 redact 掉可能的敏感信息,否则会导致其在 bug report 过程中被 dump 出来,泄漏原始加密密钥。
2025-01-01
这个月补丁好多,算是解答了上个月的“为什么这么少”的疑问
大家新年快乐!一直在等补丁链接,等了一个月还没放,只能先发一个不完整版的了
注:本月补丁链接未放出 以下部分补丁来源为手动还原
2025/02/24 更新:官方公告里已经放出补丁链接 建议去看官方公告里的;官方公告里移除了 CVE-2023-40108 CVE-2023-40132,不知道为什么
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 RCE Critical
CVE-2024-43771 RCE Critical
CVE-2024-49747 RCE Critical
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 不一样,所以不会再要求输入一遍锁屏密码?