type
status
date
slug
summary
tags
category
icon
password
0x01 引言
在
Google2023年-5月
安全公告中,Framework
部分CVE中有一个编号CVE-2022-20338
的漏洞,类型为Eop,查看具体代码改动,发现是对android.net.Uri
的修复。影响范围为未更新2023五月补丁的11, 12, 12L
设备0x02 代码分析
分析可以发现,这部分源码位于
frameworks/base/core/java/android/net/Uri.java
,方法static Uri readFrom
(Parcel parcel)
用于反序列化Parcel
对象,构造Uri
对象,该方法由Uri.
CREATOR
.createFromParcel
调用。而具体的改动对
path
的校验更加严格,使用makeAbsolute
将路径转换为绝对路径,通过分析代码可以发现,如果原本的路径以"/"
开头则直接返回,否则将在开头添加"/"
构造新的path
返回。而继续分析Android对测试样例部分的改动可以发现一些线索,即添加了一些关于
@
字符的Uri测试样例。0x03 CVE 复现
直接对其测试样例代码在未修补的
Android11
版本上进行测试,因为writeString8
为HiddenAPi,无法直接调用,所以使用Lsposed
的AndroidHiddenApiBypass绕过,然后反射调用。观察第一条日志
https://google.com/@evil.com != https://google.com@evil.com
,可以看到,错误的构造了https://google.com@evil.com
这样的链接,将导致直接访问evil.com
而非google.com
,同时还可以绕过对Host
和Authority
的检测这与通过反射调用
HierarchicalUri
这个私有构造函数,传入构造好的 authority
和 path, 创建一个任意可控的Uri实例这样的攻击方法类似,只不过是通过Parcel进行构造。如果使用构造出的
Uri
写入到Parcel
再转为Uri
是一样的效果0x04 漏洞修复
上文提到修复主要使用
makeAbsolute
将路径转换为绝对路径,通过分析代码可以发现,如果原本的路径以"/"
开头则直接返回,否则将在开头添加"/"
构造新的path
返回。修复后漏洞无法复现,测试样例全部通过。
但是通过反射调用
HierarchicalUri
这个私有构造函数,传入构造好的 authority
和 path, 创建一个任意可控的Uri实例这样的漏洞还未修复,即还是可以构造而言的Uri实例。因此建议只接收String Uri 或者在修复Parcel转为Uri的情况下使用Parcel作为指定接收对象。- 作者:LLeaves
- 链接:https://lleavesg.top//article/CVE-2022-20338
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章