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 代码分析

notion image
分析可以发现,这部分源码位于frameworks/base/core/java/android/net/Uri.java,方法static Uri readFrom(Parcel parcel) 用于反序列化Parcel对象,构造Uri对象,该方法由Uri.CREATOR.createFromParcel 调用。
而具体的改动对path 的校验更加严格,使用makeAbsolute 将路径转换为绝对路径,通过分析代码可以发现,如果原本的路径以"/" 开头则直接返回,否则将在开头添加"/" 构造新的path返回。
而继续分析Android对测试样例部分的改动可以发现一些线索,即添加了一些关于@ 字符的Uri测试样例。
notion image
 

0x03 CVE 复现

直接对其测试样例代码在未修补的Android11版本上进行测试,因为writeString8 为HiddenAPi,无法直接调用,所以使用LsposedAndroidHiddenApiBypass绕过,然后反射调用。
观察第一条日志https://google.com/@evil.com != https://[email protected] ,可以看到,错误的构造了https://[email protected] 这样的链接,将导致直接访问evil.com 而非google.com ,同时还可以绕过对HostAuthority的检测
💡
这与通过反射调用HierarchicalUri这个私有构造函数,传入构造好的 authority 和 path, 创建一个任意可控的Uri实例这样的攻击方法类似,只不过是通过Parcel进行构造。
如果使用构造出的Uri写入到Parcel再转为Uri是一样的效果
 

0x04 漏洞修复

上文提到修复主要使用makeAbsolute 将路径转换为绝对路径,通过分析代码可以发现,如果原本的路径以"/" 开头则直接返回,否则将在开头添加"/" 构造新的path返回。
修复后漏洞无法复现,测试样例全部通过。
但是通过反射调用HierarchicalUri这个私有构造函数,传入构造好的 authority 和 path, 创建一个任意可控的Uri实例这样的漏洞还未修复,即还是可以构造而言的Uri实例。因此建议只接收String Uri 或者在修复Parcel转为Uri的情况下使用Parcel作为指定接收对象。
 
LaunchAnyWhere漏洞分析ByteCTF2022 MITM复现
  • Twikoo