之前一直在看的每月补丁分析的博客 https://wrlus.com/ 看起来是不再更新了,想了想反正自己每个月也要去追着看,干脆写一下分析得了,方便自己后面找。
本人很菜,分析的大部分都是 Java 层漏洞,大佬别骂我 QAQ
最初发表在我的 telegram 频道。每月补丁都会在此文中更新。
最后更新时间:2024/11/11 更新内容:更新 2024-11
2024-11-01
Framework
CVE-2024-40660 EoP High 1 2
看起来是和 CVE-2024-34743 类似的问题,引用拷贝写成了值拷贝。
CVE-2024-43081 EoP High 1
此漏洞由我发现并报告。
此漏洞是 CVE-2024-0046 的变体,当时的补丁只限制了系统 app 不能被安装为 instant app,很容易能想到除了系统 app,设备管理 app 也不应该被限制,直接又提了个报告。补丁加上了 device admin app 和被保护的 app 的检测。
CVE-2024-43085 EoP High 1
USB 传输模式切换超时的时候,如果当前处于 Accessory 模式,不应该继续保持在这个模式,以阻止 USB 设备继续通过 Android Open Accessory 协议和 Android 设备进行交互。
Android Open Accessory 文档:https://source.android.com/docs/core/interaction/accessories/protocol
CVE-2024-43093 EoP High 1
此漏洞由 LSPosed 团队报告。
在传入的 URI 中插入 Unicode 可忽略代码点可绕过 /sdcard/Android/data 访问限制。技术细节:https://t.me/vvb2060Channel/855
CVE-2024-43082 ID High 1
设置新用户头像时检查返回的 URI,避免出现跨用户读取。
这个地方我之前尝试过利用,但是没成功,没能拦截到任何一个 intent,不知道漏洞的作者是怎么做到的。看补丁只给 12 12L 更新了,可能是安卓大版本的行为差异导致。
CVE-2024-43084 ID High 1
NotificationManagerService 检查 notification URI 的时候,如果它带有 Person 对象,不仅要检查它的 Icon URI 还要检查 mUri。
CVE-2024-43086 ID High 1
如果账号的 authenticator uid 发生改变,清掉对应账号类型的所有数据。看起来是 AccountManagerService 里的数据能悬空。
System
CVE-2024-43091 RCE High 1
libskia 的一个整数溢出问题,之前的代码只检查了 dst->computeImageSize()
的结果没溢出,但下面分配了 size 乘三倍的内存,这里有可能发生溢出导致分配到的内存空间小于预期,进而发生越界写。
CVE-2024-29779 EoP High 1
没太看懂,看起来是代码里实现了 Keymint3 的 ATTESTATION_ID_SECOND_IMEI 但是忘记启用的样子
CVE-2024-34719 EoP High 1
蓝牙组件里禁止传入的 AttributionSource 是 null 的情况,因为蓝牙依赖 AttributionSource 检查调用者权限,传 null 的时候不会触发 AttributionSource 反序列化也就不会触发权限校验流程。
题外话:这个 bug 的 id 是 242996380,估计都是两年前的了,这个处理速度,我也不直接评价了,我就给四个字,令人咋舌
CVE-2024-40661 EoP High 1
device admin 不允许主动授予隐私相关的权限,比如录音照相和位置权限,这个检查要把权限的权限组一起纳入检查,而不是只检查权限名。
CVE-2024-43080 EoP High 1
此漏洞由我发现并报告。
Settings AppRestrictionsFragment 接收 app 传回的原始 intent 之后不能直接传给 startActivity,避免在 AIDL 调用过程中出现类型混淆污染后续数据。
更多可参考 https://konata.github.io/posts/creator-mismatch/
CVE-2024-43087 EoP High 1
Settings AccessibilitySettings 显示无障碍服务列表的时候会过滤 service label 和 activity label 相同的服务,导致其被隐藏不显示而仍然拥有无障碍权限。
这个处理看不懂原本是干啥的,完全多此一举,补丁就是删掉了对应代码。
CVE-2024-43088 EoP High 1
此漏洞由我发现并报告。
Settings 中 AppInfoBase 是一个 base fragment,接收调用者指定的 user handle 然后直接使用,全程没进行任何检查,导致可以指定任意用户从而代表其他用户修改其 app 的权限。补丁加了个检查保证调用者必须要有 INTERACT_ACROSS_USERS_FULL 权限。
这个漏洞是我之前编写 Android 平台常见安全漏洞类型 的时候注意到 CVE-2023-21107 这个相似的漏洞,顺便搜索了一下涉及的 Intent.EXTRA_USER_HANDLE 还有没有其他地方有引用,然后就让我发现了这个一模一样的漏洞,属于是白捡天上掉下来的钱了。
CVE-2024-43089 EoP High 1
MediaProvider 中,app 尝试重命名文件时需要检查其权限,以免在 MediaProvider 数据库中留下虚假的记录,让 app 可以读写原本不属于它的文件。
CVE-2024-43090 ID High 1
此漏洞由我发现并报告。
Android 有一个功能叫做 keyboard shortcuts helper,其实现是系统向当前前台 app 收集可用快捷键,然后交由 SystemUI 把它渲染出来,其包含着一个隐藏的 Icon 对象,可以使用反射进行修改。补丁表示这个功能不应该由 app 使用,直接清空了所有 app 提供的 icon。
CVE-2024-43083 DoS High 1
WiFi 模块中忘记校验提供的 WifiConfiguration 中的多个字段,可能引发拒绝服务,应该是内存资源耗尽。最近这种漏洞是真的多,几乎每个月都能看见。
2024-10-01
Framework
CVE-2024-0044 EoP High 1 2
是不是感觉这个 CVE 号很熟悉?对,这个漏洞在三月公告里就放过一次。后面我发现原补丁给的修复并不充分重新发送了一个报告,给这个三月份就应该被修复的漏洞续命到了十月。
更多细节可以参考我的 PoC & writeup: https://github.com/canyie/CVE-2024-0044
CVE-2024-40676 EoP High 1
AccountManagerService checkKeyIntent 内添加新的检查,拒绝所有 data 带有 content URI 的 intent。
好暴力的补丁,让人摸不着头脑,一开始以为是 URI grant,仔细研究之后发现还不是,问题比较复杂,利用非常精妙,准备以后单独写一篇文章描述这个问题(挖坑+1)。
更新:已经给出完整分析,可查看 http://blog.canyie.top/2024/11/07/self-changing-data-type/
CVE-2024-40675 DoS High 1
把 URI 解析成 Intent 的时候检查里面每个字段的结尾分号是否存在,不存在则直接终止解析并抛出 URISyntaxException。
System
CVE-2024-40673 RCE High 1
Java ZipFile API 拒绝文件头无效的 zip 文件。更多请参阅发现者的博客:https://wrlus.com/android-security/cve-2024-40673/
CVE-2024-40672 EoP High 1
设置向导结束之前不允许打开 ChooserActivity,避免 FRP 绕过。
CVE-2024-40677 EoP High 1
设置向导结束之前不允许打开“应用电池用量”的管理页面,避免 FRP 绕过。
CVE-2024-40674 DoS High 1
插入 WifiConfiguration 的时候,如果 SSID 以引号开头,之前的代码不会检查它的长度,可以导致拒绝服务。补丁就是加上了这种情况的检查。只影响 14。
2024-09-01
这个栏目不如改叫每月安全补丁提交信息翻译 都没啥分析了
已知被在野利用漏洞:CVE-2024-32896
Framework
CVE-2024-32896 EoP High 1 2
恢复出厂设置时,在重启到 recovery 之前删除 data 分区加密密钥,保证重启失败(比如按音量键导致设备提前进入 bootloader 模式而非 recovery)时设备数据也无法被恢复。此漏洞已知正在被数据取证公司在野利用。
CVE-2024-40658 EoP High 1
libstagefright 中处理 HDR10+ 视频的一个越界写入问题。
CVE-2024-40662 EoP High 1
解析 uri 时移除 scheme 中的 “://” 字符串。
System
CVE-2024-40650 EoP High 1
设置应用中编辑 wifi 信息时限制最长只能输入 500 个字符,看漏洞描述是能 crash Settings 从而绕过 FRP
CVE-2024-40652 EoP High 1
设置向导结束之前如果尝试启动系统设置,直接关闭
CVE-2024-40654 EoP High 1
补丁链接跟五月份的 CVE-2024-23707 是一样的,不知道为什么又放了一遍
CVE-2024-40655 EoP High 1
绑定 CallScreenService 超时了也需要 unbind。
CVE-2024-40657 EoP High 1
Settings 加载应用定义的账号配置页面时,由于是直接解析 xml 然后加载,android:fragment 这个属性也会生效,从而可以调起 Settings 内的任意 fragment。
CVE-2024-40656 ID High 1
ConnectionService createConference 忘了检查传入的 StatusHints 是否包含跨用户的 icon。
CVE-2024-40659 DoS High 1
RKP app 的 RemoteProvisioningService 限制只能 system server 才能 bind。
这个漏洞我们很早就注意到了,但是研究之后觉得没有安全风险就没报,结果是高危漏洞,痛失 7000 😭 虽然没看懂咋触发 DoS,看描述是可以为其他应用上传密钥从而持久禁用相关功能。
关于 RKP 的功能说明:https://t.me/vvb2060Channel/812
2024-08-01
可能被在野利用的漏洞:CVE-2024-36971,内核的一个 UAF 漏洞
(严重怀疑打错了,可能想写的是 CVE-2024-34735)
Framework
CVE-2023-20971 EoP High 1
PermissionManagerServiceImpl 中,有个判断看是不是尝试移除非动态的权限,结果只有个 log 忘了 return。
这个 CVE 去年在 Pixel 六月公告就出现过,当时评的是 moderate,给 13 更新了,结果这次奇怪地给 14 也更新了,补丁是今年创建的,里面的 android id 也跟公告里的对不上,翻 CVE 描述也是说问题在 updatePermissionTreeSourcePackage 里而非补丁改的 removePermission,怀疑根本就不是同一个问题,不知道为啥复用了 CVE ID。
Summary:privilege escalation - obtain dangerous system permissions silently utilizing the
<permission-tree>
element
Details:In removePermission of PermissionManagerServiceImpl.java, there is a possible way to obtain dangerous permissions without user consent 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 not needed for exploitation.
In updatePermissionTreeSourcePackage of PermissionManagerServiceImpl.java, there is a possible way to obtain dangerous permissions without user consent 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 not needed for exploitation.Product: AndroidVersions: Android-13Android ID: A-225880325
CVE-2023-21351 EoP High 1
跟 CVE-2024-0034 类似,给 Android 14 以下系统的,绑定到 TextToSpeech Service,Job Service,Print Service,Sync Service 和 MediaRoute2Provider Service 的时候指定 flag 阻止 BAL
(早不给,这都24年8月了才给)
CVE-2024-34731 EoP High 1 2 3 4 5
同时修改了五个模块(health HAL、libmediatranscoding、neuralnetworks、keystore2、nfc)的代码,看起来是对 Binder DeathRecipient cookie 的管理问题。
去翻了一下文档,AIBinder_unlinkToDeath 的文档里有这句话:
Be aware that it is not safe to immediately deallocate the cookie when this call returns. If you need to clean up the cookie, you should do so in the onUnlinked callback, which can be set using AIBinder_DeathRecipient_setOnUnlinked.
CVE-2024-34734 EoP High 1
锁屏的时候下拉状态栏,点开 Active apps,里面会显示当前活跃的应用,右边有个 Stop 按钮停止进程,用这种方式可以杀掉 VPN app。应该改成先解锁再显示。
CVE-2024-34735 EoP High 1
补丁链接跟 CVE-2023-21351 是一样的。
CVE-2024-34737 EoP High 1
限制 app 一分钟只能修改 60 次 PiP aspect ratio,否则 “could result flood of PiP resizing requests and freeze the PiP window”。怀疑是导致 pip 窗口渲染异常,使得其不可见,从而在用户无感知的情况下长期持有前台权限。
setAspectRatio 文档:https://developer.android.com/reference/android/app/PictureInPictureParams.Builder#setAspectRatio(android.util.Rational)
CVE-2024-34738 EoP High 1
如果调用者没有 GET_APP_OPS_STATS 特权,不返回被标记了 restrictRead 的 Op。简单搜索只找到 ACCESS_RESTRICTED_SETTINGS 一项是 restricted 的,不知道具体有什么作用。
CVE-2024-34739 EoP High 1
设置向导未完成时,插入 USB 设备不弹出 activity,避免 FRP 绕过。
CVE-2024-34740 EoP High 1 2
FastDataOutput 内会检查一次写入的字符串数据不能超过 65535 个字节,但 BinaryXmlSerializer 中 attributeBytesHex 与 attributeBytesBase64 两个方法会按照 byte[] 写入,走这条路径是没有检查的。这两个方法会将 value 的长度作为一个 unsigned short 写入,如果 length > 65535 就会丢失高位的数据,之后将 value 作为 byte[] 整体写入。下次开机时使用 BinaryXmlPullParser 读取并解析该文件,先读数据长度(unsigned short)再读对应大小的数据,会导致数据没被完全消耗完,后续解析出来的数据被污染,合理利用可以实现注入。
CVE-2024-34741 EoP High 1
WindowState setForceHideNonSystemOverlayWindowIfNeeded 内要检查父窗口的属性,否则 SAW 窗口下的其他类型子窗口不会被隐藏
CVE-2024-34743 EoP High 1
surfaceflinger 内遍历 states 时写成了值拷贝,然后 sanitize 事实上不会影响到原来的对象,应该改成用引用。
CVE-2024-34736 ID High 1
StagefrightRecoder 在音源为麦克风且视频源为 surface(设备画面?)时禁用 B 帧支持,否则会出现不同步。音视频超出了我的知识体系,没办法啊~~
CVE-2024-34742 DoS High 1
更改逻辑保证数据始终被写入到 device_owners2.xml 。只影响14,应该跟之前的 CVE-2024-0047 是类似的问题。
System
CVE-2024-34727 ID High 1
蓝牙 sdp_utils.cc 中检查 p_attr->attr_len_type 是否为预期,防止后续缓冲区溢出。
2024-07-01
已知被利用漏洞:Arm Mali GPU Kernel Driver Use-After-Free Vulnerability CVE-2024-4610
(Android 安全公告未发出警告,信息来源于 CISA Known Exploited Vulnerabilities Catalog)
Framework
CVE-2024-31320 EoP Critical 1 2
CompanionDeviceManagerService 处理配对请求时接受一个 AssociationRequest,里面包含一个变量 mSkipPrompt
可以跳过用户确认,原本预期这个值只应该由系统设置,但代码里出现逻辑错误,mayAssociateWithoutPrompt
返回 false 时没有覆盖掉 app 设置的值。只影响 Android 13 以前。
这个严重给的名副其实,可惜我的 CVE-2024-31318 没给严重 😭
CVE-2024-31331 EoP High 1
调用 setMimeGroup
成功后要发送 ACTION_PACKAGE_CHANGED 广播。不懂不发送会有什么问题。漏洞描述:
In setMimeGroup of PackageManagerService.java, there is a possible way to hide the service from Settings due to a logic error in the code. This could lead to local escalation of privilege with User execution privileges needed. User interaction is needed for exploitation.
CVE-2024-34720 EoP High 1
有新进程连接到 Zygote 时校验其 UID,确保是 system UID。原本 selinux policy 会限制只允许 system server 连接到 zygote 进程,但是对 app zygote 这个限制不够严格,两个 app zygote 进程可以相互连接然后发送伪造命令。
更多关于 app zygote 可以参考 android:usesAppZygote
和 ZygotePreload
的文档,我之前的检测 magisk 那篇文章也有简单提及。
CVE-2024-34723 EoP High 1
MediaSession ParcelableListBinder 只允许塞入指定类型的对象,防止后台启动绕过。这个问题之后会单独写一篇文章讲解。
System
CVE-2024-31332 EoP High 1
如果当前用户被设置了 DISALLOW_ADD_WIFI_CONFIG
,不显示 WifiDppConfiguratorActivity 和 AddNetworkFragment。
CVE-2024-31339 EoP High 1
statsd 中,MultiConditionTrigger 可能会开启一个新线程 executorThread,该线程会持有外部资源引用,应该在 MultiConditionTrigger 被销毁时 join 这个线程保证它执行完毕。应该是 race condition 导致 UAF 的问题。
CVE-2024-34722 EoP High 1
蓝牙组件的问题,似乎是逻辑 bug。看不懂,告辞~
1 | Fix an authentication bypass bug in SMP |
CVE-2024-34721 ID High 1
MediaProvider 中插入文件时,对文件路径没有被显式指定的情况缺乏检查,导致可以插入到其他用户的储存。听起来挺有意思的,后续可以复现玩玩。
2024-06-01
这个月竟然一个 critical 都没有,奇迹啊
Framework
CVE-2023-21266 EoP High 1
禁止第三方应用通过 killBackgroundProcesses() 杀死其他应用的进程。看 CVE 描述是能一直杀 play 保护服务的进程从而绕过 play 保护。去年 10 月就放过一遍了,不知道为什么又放了一遍。
CVE-2024-31310 EoP High 1
强制自动填充服务必须声明对应的 intent-filter。没有追详细调用链,猜测是为了防止 serviceComponent 被任意指定,调用到未导出的 service?
更新:漏洞描述指出了细节:用户选择它为自动填充 app -> apk 更新,新的 apk 里这个服务缺失 intent-filter -> 系统自动重绑定该服务 -> 用户去设置里查看时,由于此时该 service 没有 intent-filter,该 app 不会被显示出来。
Summary: App can continue to fill input fields in the device even if user has not selected it as default Autofill service app.
Details: In newServiceInfoLocked of AutofillManagerServiceImpl.java, there is a possible way to hide an enabled Autofill service app in the Autofill service settings due to improper input validation. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is needed for exploitation.
CVE-2024-31316 EoP High 1
AccountManagerService 在修改返回的 bundle (具体是三处 remove 敏感信息的地方)之后重新检查 bundle 内的 intent 是否合法。简单想了一下,没想到 lazy bundle 加持下能怎么利用,猜测是在非 lazy bundle 的场景下,按照 mismatch 对象、被移除的键值对、恶意 intent 这个顺序放置来绕过 checkKeyIntentParceledCorrectly
?
CVE-2024-31317 EoP High 1
如果设置的 hidden api exemptions 含有非法字符,不把它传递给 zygote,防止干扰参数解析。此漏洞可被用于伪造 uid 等参数,在任意 app 上下文中执行任意代码。
https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html
CVE-2024-31318 EoP High 1
此漏洞由我发现并报告。
CompanionDeviceManagerService onShellCommand() 内没有检查调用者权限,然后直接调用了同样没有权限检查的内部接口,造成越权访问,并直接造成权限提升。修复为把 onShellCommand()
改成重写 handleShellCommand()
,因为 Binder.onShellCommand()
会先检查调用者 uid 确保必须是 root/shell。
关于这个漏洞的一点点番外:
通过分析提交历史,我发现这个函数以前其实是有一个权限检查的,但是在 Android 14 的一个提交 https://cs.android.com/android/_/android/platform/frameworks/base/+/7a8f22792e45630bff14eb8b276c7649b0d79097 里被人删掉了。所以这其实是一个只影响 Android 14 的漏洞(这下新版本魔人大失败了)。
由于我不是 Google 员工,没法直接知道这个人这么做的原因,我这里只能猜测一下:可能是眼花了把这里看成已经在用 handleShellCommand 了,可能是觉得权限检查重复(Android 12 的时候这块代码在 ShellCmd 构造函数里),或者干脆就是 git 出了 bug 把这行给意外移除了,类似那个 gotofail 漏洞。
继续追踪提交历史,我发现了一个更搞笑的:2020 年,同样的系统服务,同样的 onShellCommand,曾经出现过一个一模一样的漏洞 CVE-2020-0227 https://android.googlesource.com/platform/frameworks/base/+/84cccfe6cdbc57ee372ee1a0fea64c7a11c53766^!/#F1 。
嗯,让你不写回归测试,白给赏金了这下。
时间线:
- 2023.10.4 Android 14 正式发布
- 2023.11.25 我注意到此漏洞
- 2023.11.26 构建了 PoC 并向 Android 安全团队反馈
- 2024.2.10 Google 确认此漏洞并将严重程度评级为高。对,你没看错,两个半月
- 2024.5.21 Google 通知我补丁将在下个月发布,并分配 CVE-2024-31318
- 2024.6.3 已经过去了 190 天,补丁终于发布
CVE-2024-31319 EoP High 1
NotificationListenerService 修改 notification channel 的 sound 时,校验它是否有权限访问这个 uri。
(漏洞类型不应该给 ID 吗,为啥给了个 EoP?)
CVE-2024-31322 EoP High 1
对于被卸载的应用,把其提供的 AccessibilityService 从已启用的服务列表里面移除。我记得这个问题以前好像处理过一次,向上追了一下,只有在 onUserStateChangedLocked()
有机会调用到这里,猜测此漏洞是在管理员用户卸载其他用户的应用而对应用户处于非活跃状态的时候触发?
CVE-2024-31324 EoP High 1
如果窗口没有隐藏动画,需要立即隐藏它。说实话,没怎么看懂,看 CVE 描述是通过以竖屏模式启动 activity 然后旋转到横屏模式可以绕过点按劫持保护,似乎是逻辑漏洞。留给有缘人分析复现吧~~
1 | Hide window immediately if itself doesn't run hide animation |
CVE-2024-31325 EoP High 1
SystemUI 解析 notification message/conversation 相关的图片 uri 时需要使用对应用户的 context。不确定在什么时候能触发。
(看起来漏洞类型应该给 ID 才对?还有为什么放 framework 里而不是 system?)
CVE-2024-31326 EoP High 1 2
Android 14 设备管理相关的配置存储方式发生变化,而又没有正确迁移相关配置,导致设备从旧版本更新到 14 之后设备管理员做出的限制丢失。具体来说是截图策略(screen capture policy)、lock task 配置、user restrictions 这三个。
CVE-2024-31312 ID High 1
如果设置锁屏隐藏通知,隐藏 media carousel(媒体操作面板?)。
CVE-2024-31314 DoS High 1
ShortcutService 可能会调用 UsageStatsManager.reportShortcutUsage()
,对调用频率添加限制,防止拒绝服务。
System
CVE-2023-21113 EoP High 1 2 3
如果 AttributionSource 反序列化不是因为 binder 调用被触发,清空所有权限状态。
CVE-2023-21114 EoP High 1 2 3
WiFi 模块中先把 AttributionSource 从 bundle 提取出来再把任务交给工作线程处理。由于 android 13 引入的 lazy bundle 优化,对于 parcelable 类型只有在被实际访问的时候才会触发反序列化,而原来的代码中 bundle 里的 AttributionSource 在工作线程而非 binder 线程中被访问,触发反序列化时 Binder.getCallingUid()
等方法返回的是 system server 自己的信息,造成权限绕过。
CVE-2024-31311 EoP High 1
libstatssocket 内检查 AStatsEvent 的 lastFieldPos 必须小于 bufSize。
1 | // Side-effect: modifies event->errors if field has too many annotations |
CVE-2024-31313 EoP High 1
消息队列里检查越界情况。
CVE-2024-31315 EoP High 1
NotificationListenerService rebind 及所属包更新的时候,如果此时该服务不再被权限保护(没有声明 android:permission
),不要 bind 它。(这也算漏洞?CVE 描述又看不了,不清楚有没有其他触发场景)
查看描述后发现和上面的 CVE-2024-31310 是类似的:用户打开权限 -> apk 更新,新的 apk 里这个服务不再被 permission 保护 -> 系统自动重绑定该服务 -> 用户去设置里查看时,由于此时该 service android:permission
配置不对,该 app 不会被显示出来。
Summary: App can read all notifications of the device without requiring any permission.
Details: In multiple functions of ManagedServices.java, there is a possible way to hide an app with notification access in the Device & app notifications settings due to improper input validation. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is needed for exploitation.
CVE-2024-31323 EoP High 1
悬浮窗覆盖漏洞限时返场,这次是 Health Connect 这个 app 里。只影响 14。
CVE-2024-31327 EoP High 1
补丁链接和 CVE-2024-31313 是一样的。
2024-06-05
Kernel
CVE-2024-26926 EoP High 1 2
内核 binder 驱动里 binder_get_object()
检查 offset 必须按 4 字节对齐。
2024-05-01
Framework
CVE-2024-0024 EoP High
创建用户时限制将用户名、账号名、账号类型这三个字符串的长度,否则长度可能会超出 BinaryXmlSerializer 的写入限制,导致后续 user restrictions 写入失败,创建出没有限制的用户。
疑问:我在今年1月4号就已经在 aosp 上看见了这个提交,为什么现在才放在安全公告里?
CVE-2024-0025 EoP High
发送非 PendingIntent 类型的 IntentSender 时避免携带 allowlist token。因为这个时候传入的 IIntentSender 实际上可能是 app 的一个 binder,再在上面调用 send 实际上相当于把 allowlist token 直接发送给了 app,然后这个 token 可以用来绕过很多的后台限制。
大概猜测一下利用方法:
创建一个自定义 IIntentSender
把它塞进一个 PendingIntent 里(PendingIntent 存放着一个 IIntentSender,这是它的真正实现)
把 PendingIntent 放进 notification deleteIntent 里
发送 notification 然后立刻取消,触发 deleteIntent 执行
PendingIntent.send() 把内部的 IIntentSender 传递到 sendIntentSender,因为这个 IIntentSender 不是 PendingIntentRecord,所以 IIntentSender.send() 被调用,此时会直接把 allowlist token 发给 app
妙啊,太妙了
疑问:1月4号我也看见了这个补丁,为什么现在才发出来?
CVE-2024-23705 EoP High
在 CVE-2024-0024 补丁的基础上限制 accountOptions 的大小,防止类似的问题。
CVE-2024-23708 EoP High
让系统发出的 toast 优先显示,保证其他应用不能通过发送大量 toast 的方式延后系统 toast 显示。同时把粘贴剪贴板文字的 toast 的显示时长加到 long。
System
(跳过 CVE-2024-23709)
CVE-2024-23706 EoP Critical
android health 相关的功能,禁止插入 record types 为空的 changelog。对这模块不是很熟,没看懂能干啥,也没看懂为啥定级这么高,待进一步分析。CVE 描述:In multiple locations, there is a possible bypass of health data permissions due to an improper input validation. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is not needed for exploitation.
CVE-2024-0043 EoP High
在 PermissionController 后端禁止给 work profile 中的应用授权监听通知。
更新:据反馈,此漏洞触发方式是通过 companion device watch role 自动授予相关权限。
注:官方公告里放的补丁链接似乎是错的,正确的应该是 https://cs.android.com/android/_/android/platform/packages/modules/Permission/+/47a06cd49981d3fbe58158e9252f0a825aa109cd
CVE-2024-23707 EoP High
系统设置里 SearchResultTrampoline 把原来的用 getCallingActivity 判断调用者改成用 getLaunchedFromPackage,前者返回的是哪个 activity 会收到 onActivityResult 回调,后者返回的是实际启动 Activity 的人(Pending intent 按创建者算)
2024-04-01
这次补丁给我的感觉就是,像愚人节特辑
Framework
CVE-2024-23710 EoP High
如果一个 app 和特权 app 共享 UID,并且设置了 sharedUserMaxSdkVersion 且处于生效状态,那么 sharedUserId 的设置是无效的,这个时候不应该把它标记为特权 app
CVE-2024-23713 EoP High
NotificationManagerService migrateNotificationFilter 内如果传入的 disallowApps 并没有被安装就跳过它。猜测问题是可以传入超长字符串阻止 mRequestedNotificationListeners 被序列化,从而阻止数据变更被保存?
CVE-2024-0022 ID High
CompanionDeviceManagerService requestNotificationAccess 没有检查传入的 user id,而是留了个 TODO 在那里(写到一半想着先这样完事然后就忘了?),然后直接用这个 user id 取得一个 PendingIntent 并返回,然后发送这个 pending intent 实际上可以跳到对应用户的通知访问管理页面。这个问题我很早就注意到了,但是反馈被标 duplicate 了。
CVE-2024-23712 DoS High
AppOpsService 里过滤未被定义的 proxyAttributionTag (这啥?),同时把一个包里最大能定义的
System
CVE-2024-23704 EoP High
如果当前用户有 DISALLOW_ADD_WIFI_CONFIG 这个限制,不允许打开 WifiDialogActivity。
CVE-2023-21267 ID High
去年12月的补丁,原问题是有 app pining 的时候尝试按电源键 lockdown 会因为逻辑错误跳过锁屏。原来的补丁有问题,回滚了之后修复了问题重新提交。
CVE-2024-0026/CVE-2024-0027 DoS High
大量 snoozed notifications 可能导致的拒绝服务问题(这个问题不是修过几次吗怎么又来了?)。判断 snooze notification 数量是否超限的时候要把已经存进文件里的(mPersistedSnoozedNotifications 和 mPersistedSnoozedNotificationsWithContext)一并纳入计算。还修复了 repostGroupSummary 方法里没有把通知从 mPersistedSnoozedNotifications 和 mPersistedSnoozedNotificationsWithContext 里移除的问题,会导致不需要的通知数据始终被序列化,可能被滥用导致资源耗尽拒绝服务。
2024-03-01
Framework
(跳过了 CVE-2024-0049/CVE-2024-0050/CVE-2024-0051,三个都是 libstagefright 中的内存错误)
CVE-2024-0044 EoP High
过滤应用的“安装者包名”(可以通过 pm install -i 指定)里的非法字符。此漏洞细节:攻击者可以在“安装者包名”内插入换行符,之后系统会把该字段原样写进 /data/system/packages.list 里,伪造出新的条目,之后可以通过伪造的条目欺骗 run-as 从而获得受害应用的权限,可以操作内部目录等。
发现者的博客写的很清楚了:https://rtx.meta.security/exploitation/2024/03/04/Android-run-as-forgery.html数据取证专用漏洞了属于是
CVE-2024-0046 EoP High
阻止系统应用被升级为 instant app(免安装应用 谷歌小程序)。免安装应用只能获得很小的一部分权限,攻击者可以利用该漏洞使特定系统应用的权限失效,从而绕过运营商限制。
CVE-2024-0048 EoP High
AccountManagerService 又上新补丁了。AccountManagerService 内部有一个超时机制,bind 到 Authenticator 后如果它长时间没响应就 unbind。搞笑的是,代码里根本没有任何地方启动这个机制,整个超时机制根本不会被触发。AccountManager API 最初在 Android 2.1 里加入,十几年过去了还能有这种问题,提前预定一个 2024 年最搞笑漏洞。
CVE-2024-0053 ID High
如果打印服务返回的自定义的打印机图标里的 URI 指向其他用户就把它过滤掉,防止看见其他用户的图像。最近这种漏洞真的好多好多。
CVE-2024-0047 DoS High
Android 14 中对设备管理(Android for Work 的功能)的重构中引入的 bug,设备管理员设置的 global restriction(对整个设备的限制)可能会被错误识别为 local restriction(对单个用户的限制),导致管理员无法撤销限制,设备功能受限。就算 bug 修好了,已经损坏的配置文件仍然是损坏的,为了让这些设备不清除数据就能正常工作还要加个 workaround。
System
(跳过了 CVE-2024-0039、CVE-2024-23717、CVE-2024-0045)
CVE-2023-40081 ID High
SystemUI 加载多媒体文件的图标时检查 URI 权限,防止跨用户读取
CVE-2024-0052 ID High
对 Android Health 这个功能不是很熟,看提交信息是如果调用者没有权限,部分 API 返回的数据要去除掉用户运动的路线信息。
2024-02-01
Framework
CVE-2024-0029 EoP High
DevicePolicyManagerService 里的逻辑 bug,保存禁止截屏的状态的时候只用了一个 int 保存被禁用的用户 id,在未受管用户启动的时候会覆盖掉之前设置的。
CVE-2024-0032 EoP High
DownloadStorageProvider 正确重写带有 includeHidden 参数的 queryChildDocuments()。
更多可参考 https://t.me/qianqianzhuang/4
CVE-2024-0034 EoP High
阻止壁纸服务从后台启动 activity。因为前台客户端绑定壁纸服务之后,会满足这一条豁免条件 “该应用的一项服务被另一个可见的应用绑定。绑定到该服务的应用必须保持可见,以便后台应用成功启动 activity。”
安卓 14 的 BAL 强化中限制了 target>=U 时必须指定 BIND_ALLOW_ACTIVITY_STARTS 才允许服务进程借用客户进程的状态启动,故该漏洞不影响 14
CVE-2024-0036 EoP High
startNextMatchingActivity 中设置 setAvoidMoveToFront 阻止后台启动 activity,具体可见 https://mp.weixin.qq.com/s/dbupJ3D-i0Da9ml1Pamu-w
这个接口漏了这么久都没人注意到确实挺难得的,当然我也没注意到,但是你看别人都没注意到,所以也不能怪我,你说是吧
CVE-2024-0038 EoP High
injectInputEventToInputFilter 中缺失调用者权限检查,只影响 14
CVE-2024-0041 EoP High
removePersistentDot 里的竞态条件,有可能导致 persistent dot 不会移除(然后会覆盖新显示的状态?)
CVE-2023-40122 & CVE-2024-0037 EoP High
检查自动填充相关传入的 URI,确保不会读取到其他用户的数据
CVE-2024-0040 ID High
MTP 协议处理中没有正确增大缓冲区大小,可能发生越界读
System
CVE-2024-0031 RCE Critical
蓝牙 GATT 协议栈里的越界写,理论可实现 RCE。这玩意真的几乎每个月都能搞一个 RCE 出来。
CVE-2024-0014 EoP High
该漏洞未公开补丁链接,似乎是 GMS 私有组件。漏洞描述:In startInstall of UpdateFetcher.java, there is a possible way to trigger a malicious config update due to a logic error. This could lead to local escalation of privilege with no additional execution privileges needed. User interaction is not needed for exploitation.
CVE-2024-0033 EoP High
libbinder 打开 memfd 时指定 F_SEAL_GROW | F_SEAL_SHRINK 阻止后续其他进程更改大小造成错误
CVE-2024-0035 EoP High
TileService 返回 null 时正确释放资源,阻止绕过后台启动前台 activity 的限制。更多可以参考 https://wrlus.com/android-security/bindservice-error-handle/
CVE-2023-40093 ID High
升级 pdfium 到 Chrome 114.0.5735.130 的
CVE-2024-0030 ID High
蓝牙组件里不充分的检查可能造成越界读
2024-01-01
Framework
CVE-2023-21245 EoP High
阻止在设备设置向导完成之前进入锁屏,可以插入一张需要 PIN/PUK 码解锁的 SIM 卡复现。应该是可以绕过恢复出厂保护(FRP,Factory Reset Protection),也就是所谓的激活锁。
CVE-2024-0015 EoP High
保证 DreamService 配置的 settingsActivity 属于应用自身,防止调用到非公开的 activity 造成 launch anywhere。向上搜索可以发现 SettingsLib 的 DreamBackend launchSettings() 这个方法会直接 startActivity,这里在 Settings 里运行所以是 system 权限。
题外话:DreamService 是 Android 4.2 加入的,十几年过去了,相关代码在2024年1月还能出现这么简单直接的漏洞确实有点不可思议。这个补丁早在2022年就创建了,而且更新的版本列表里并没有最新的14,于是我去看了下14的代码发现确实已经合进了这个补丁,然后我搜索这个补丁,发现这个漏洞早在2022年就被确认并被授予 CVE-2022-20550 这个编号,但是谷歌当时不知道怎么想的只给了 moderate 评级然后只给 pixel 修了。。。
CVE-2024-0018 EoP High
libstagefright 里无符号数运算不当导致意外结果的漏洞。
CVE-2024-0019 ID High
System UI 进程重启后,如果在重启之前有应用在进行敏感操作,并且现在还没结束,那么仍然应该显示隐私指示器。
System
CVE-2024-0021 EoP High
禁止工作空间(work profile)内的应用监听通知,只给 13 14 更新了,应该是以前正常的功能,大版本迭代不小心引入。
CVE-2024-0017 ID High
Camera2 如果是被其他 app 启动,而且启动它的这个 app 没有位置权限,返回的照片 exif 信息里不应该包含位置信息。之前的代码里有做判断,但是有问题,getCallingPackage 返回 null 的时候一律判定为不是 app 启动不需要过滤,但是如果 app 用 startActivity 而非 startActivityForResult ,getCallingPackage 本来就会返回 null,算是逻辑 bug。
CVE-2024-0020 ID High
设置铃声的时候检查传入的 URI,防止指向别的用户的数据。最近这种问题似乎很多很多。
2023-12-01
可能在野被积极利用的漏洞:CVE-2023-33063、CVE-2023-33107、CVE-2023-33106
Framework
CVE-2023-40077 EoP Critical
libstagefright 里的 UAF 问题
CVE-2023-40076 ID Critical
CredentialManagerUi 跑在 system_server,且创建 PendingIntent 的时候没有指定用户,默认会去用 context 对应的用户,然后指向 USER 0,其他用户拿到这个 PendingIntent 然后 send 就能跳转到主用户的凭据管理页面。不知道为什么定级这么高
CVE-2023-40079 EoP High
ShortcutService 启动 app 给出的 IntentSender 时指定 MODE_BACKGROUND_ACTIVITY_START_DENIED 防止 BAL
CVE-2023-40089 EoP High
DevicePolicyService.getCredentialManagerPolicy 需要传入 userId。感觉这个漏洞的实际影响情况可能是有跨用户权限的进程需要拿到其他用户的东西但是因为之前的设计问题所以拿不到?
CVE-2023-40094 EoP High
keyguardGoingAway 这个方法没检查调用者权限,然后所有 app 都能调用这个方法解除锁屏。
CVE-2023-40095 EoP High
又是一个忘了指定禁止 BAL 造成的 BAL bypass,这次是 requestGeofence 。
CVE-2023-40096 EoP High
更改的文件比较多,看起来是设置录音权限为仅前台时应用退到后台还会继续录音的问题。
CVE-2023-40103 EoP High
看提交信息是用 ApkAssets 的时候改成用基于引用计数的指针,防止 UAF/double free
CVE-2023-45774 EoP High
ShortcutService 校验传入的 uri。看 cve 描述是能指定其他用户的图像。
CVE-2023-45777 EoP High最看不懂的一集
给了两个提交,第一个提交和九月份的 CVE-2023-35669 补丁是一样的,当时这个漏洞描述是 “there is a possible way to control other running activities”,第二个提交只是把弃用不带类型的 getParcelable 改成类型安全的,然而底下明明就有手动的类型检查,我觉得缺这个提交也没法利用,不知道为什么又分配了一个 CVE。看这个 CVE 的描述是能 Launch Anywhere ,不知道怎么能做到。
AccountManagerService 里使用不带参数类型的 getParcelable()
方法可能会导致反序列化出非预期的对象,调用到其他类的构造方法,导致 parcel 数据被修改,绕过 checkKeyIntentParceledCorrectly
的缓解措施。PoC: https://github.com/michalbednarski/TheLastBundleMismatch
CVE-2023-21267 ID High
在 lockdown 模式始终展示锁屏。看起来是有 app pinning 的时候尝试 lockdown 会因为逻辑错误跳过显示锁屏。
CVE-2023-40073 ID High
Notification style 相关的 uri 校验
CVE-2023-40081 ID High
MediaDataManager URI 校验。截止目前已经是第三个了。
CVE-2023-40092 ID High
ShortcutService 多个函数检查 user id,防止跨用户操作
CVE-2023-40074 DoS High
PersistableBundle 忽略无效数据,防止拒绝服务。
CVE-2023-40075 DoS High
限制能通过 addDynamicShortcuts 添加的快捷方式的数量。
System
这里面大部分洞都是比较传统的内存损坏,所以跳过了很多漏洞。
CVE-2023-40088 RCE Critical
蓝牙相关,com_android_bluetooth_btservice_AdapterService free callbackEnv 这个指针后没有置空,可能发生 UAF。不知道是不是我的错觉,总感觉近几个月能 RCE 的漏洞好像变多了。
CVE-2023-40097 EoP High
禁止创建目标为 Chooser 的快捷方式。没看懂有什么意义,看 CVE 描述是 URI grant。
CVE-2023-21394 ID High
添加 phone account 时检查给定的 URI,防止跨用户读取图片。嗯,第四个了。
CVE-2023-35668 ID High
又是 URI 相关的跨用户读取,这次还是 Notification 里……
CVE-2023-40098 ID High
看起来是有个叫 priority conversation widget 的东西,其他用户添加这个 widget 能看见主用户的通知。解决方法就是不让其他用户添加。