CVE-2024-0015复现 (DubheCTF DayDream)
CVE-2024-0015复现 (DubheCTF DayDream)
WoodenmanDu 看雪学苑 2024-04-05 17:59
DayDream是DubheCTF的一个AndroidPwn题,当时就立了flag一定要复现这个题。
DayDream
◆简单说一下,DayDream这个模块是关于android的屏保,下面是google的开发文档。
https://developer.android.com/reference/android/service/dreams/DreamService
◆通过文档可以知道:我们能够写一个service继承自DreamService,实现自定义的android屏保,就像下面这样进行选择。
◆欸,大家可能注意到了,这个屏保选择旁边的设置按钮是什么呢?
◆嗷,文档说了,如果我们设置了meta-data
,就会出现按钮,点击按钮就会跳转到我们设置的Activity。
◆是随便跳吗?这个时候我们的漏洞就来了。
CVE-2024-0015
https://android.googlesource.com/platform/frameworks/base/+/2ce1b7fd37273ea19fbbb6daeeaa6212357b9a70%5E%21/#F1
◆这是当时比赛的hint链接,也是我们的漏洞补丁信息,其实官方已经说的很清楚了。
Fix vulnerability that allowed attackers to start arbitary activities
◆漏洞的效果就是能够造成任意的activity调用。
为什么会这样呢?
◆上面提到了,官方提供了一个能够调用activity的设置按钮。却忘记了对被调用activity进行验证,导致就算是其他app未导出experted=false
的activity也能够被调用执行。
◆一边猛加补丁,一边猛删接口。
Then
◆在diff中可以看到上述注释,补丁做了一件事情,确保被调用的组件和使用DreamService的是属于同一个apk。
◆OK,漏洞就说到这里,接下来我们去到比赛题目。
jadx打开,一共有三部分。
◆MainActivity,没什么信息。
◆FlagReceiver,提供了一个能够接收flag的广播。
◆SecretActivity,提供了一个readFile能够获取flag。
很明显,只要调用了SecretActivity,就可以得到flag。再结合上面对于CVE的说明,答案已经呼之欲出了。
不过不急,我们再看看server.py,这个文件也是在给我们提示怎么做。
server.py解读
由于我是环境关了以后复现,题目docker又缺文件,然后我改server.py又发现模拟器莫名跑不起来。最后索性找了个android12的模拟器敲命令,唉
流程还是很正常的,关键就是one_click
了。
OK,接下来我们要做的事情就是写一个apk,然后调用SecretActivity了,具体怎么写可以看上面的Dream Service 官方文档。
EXP
需要注意的是题目明确了包名
◆DreamService
◆androidmanifest.xml声明service(需要注意的是官方说了高API要申请权限)
◆核心的activity调用
执行效果
用户名联想是历史遗留问题:(
点击阅读原文,文末可获取
复现视频
附件,logcat里有那么多条是因为尝试了不止一次。
最后附上源码地址:
https://github.com/UmVfX1BvaW50/CVE-2024-0015
到此完结,如有错漏欢迎指教。
看雪ID:WoodenmanDu
https://bbs.kanxue.com/user-home-963723.htm
*本文为看雪论坛优秀文章,由 WoodenmanDu 原创,转载请注明来自看雪社区
#往期推荐
2、Large Bin Attack学习(_int_malloc源码细读 )
3、CVE-2022-2588 Dirty Cred漏洞分析与复现
4、开发常识 | 彻底理清 CreateFile 读写权限与共享模式的关系
球分享
球点赞
球在看
点击阅读原文查看更多