Apktool任意文件写入漏洞分析 CVE-2024-21633

前置知识

在复现该漏洞前,有必要了解Apktool和resources.arsc相关的基础知识,方便理解后续POC的构造。

Apktool是一款流行的开源逆向工程软件,用于反编译和编译Android应用,因此,Apktool被许多其他逆向工程软件集成。

官网地址:

https://apktool.org/

项目地址:

https://github.com/iBotPeaches/Apktool

该工具可以将Android应用的apk文件反编译为可编辑的项目结构,同时也可以将编辑后的文件重新打包成apk文件,反编译和重打包操作分别对应工具的d、b两个参数。

图片

resource.arsc文件是apk打包过程产生的一个资源索引文件,该文件内容是Android项目的资源和资源索引信息,/res目录中除了values外的资源文件路径都会记录在resources.arsc中。

图片

漏洞介绍

CVE-2024-21633漏洞Apktool在2.9.1版本及之前的版本中存在漏洞。Apktool根据资源名称判断资源文件的输出路径,攻击者可以利用这一特点将文件放置在系统上指定位置。因而,攻击者可以写入或覆盖用户具有写入权限的任何文件,甚至是在知晓用户名的情况下写入文件到当前工作目录在用户目录下。

例如,名称为foo,路径为res/raw/bar的资源会被提取到res/raw/foo。但资源名称没有经过校验,因此将资源名称从foo更改为../../../../../../../../../../.. /../tmp/poc,最终会将res/raw/bar文件放置到Linux系统中的/tmp/poc中,同理Windows系统中也存在漏洞。

漏洞复现

该漏洞的复现参考了漏洞发现者在GitHub发布的文章,但作者没有说明POC如何构造,像jadx、AndroidStudio只能反编译apk,但无法直接编辑apk资源。最终选择使用MT管理器构造了apk,具体过程如下:

在安卓模拟器安装MT管理器,这是一款多功能的APK逆向工程软件,同时兼具文件管理器功能,可以用于汉化应用、替换资源、修改布局、修改逻辑代码、资源混淆、去除签名校验等等。

图片

将我们要构造POC的apk包也安装到模拟器,而后使用MT管理器提取apk包。

图片

点击提取后的apk包,选择查看。

图片

选中resources.arsc,并使用ARSC编辑器打开。

图片

找到raw目录下的type-info。

图片

在该文件中增加属性是realName,数值是路径穿越的POC,该文件中所见的id、name即为开头提到的resource.arsc文件中列出的资源名称和资源索引。

图片

之后保存修改,继续保存为工程,并进行编译。

图片

图片

在项目编译过程中漏洞实际上会被触发,因此上述过程只是对resource.arsc进行编译,接着将修改好的resources.arsc文件通过共享文件夹提取到电脑。

图片

使用压缩软件打开原始的apk包,删除其中的resources.arsc文件,再将修改好的resources.arsc替换进去。

图片

我们以集成了Apktool工具的移动安全检测框架MobSF为例复现该漏洞,在MobSF中上传构造好POC的apk文件。

图片

上传完成后查看tmp目录,发现POC构建的poc文件被上传到了系统tmp目录。

图片

但上传后的文件没有执行权限,此时仅仅是任意文件覆盖的漏洞。不过,漏洞作者在研究后发现MobSF使用jadx(另一款流行的软件逆向工程软件)作为其静态分析的一部分,它通过子进程调用jadx,但在此之前它会将jadx的权限更改为可执行文件。

因此,可以使用文件名为jadx的POC作为apk的res资源文件名,在其中写入任意脚本,再通过路径穿越覆盖jadx文件实现命令执行。

MobSF中上传的apk包位于/.MobSF/uploads/文件名MD5/apktool_out/res/raw,jadx的路径是/Mobile-Security-Framework-MobSF/mobsf/StaticAnalyzer/tools/jadx/bin/,需要六级目录的穿越。

图片

按上述步骤重新使用MT管理器构造POC如下。

图片

再保存重新编译打包,并上传到MobSF,上传后查看jadx文件是已经被成功覆盖为写入的命令。

图片

漏洞修复

该漏洞的修复方式很简单,新版的Apktool新增了路径穿越符号的检测代码。

图片

图片

参考资料

https://github.com/0x33c0unt/CVE-2024-21633

https://github.com/iBotPeaches/Apktool/security/advisories/GHSA-2hqv-2xv4-5h5w

作者:RoShine

2024年2月8日 

洞源实验室

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/378868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Conda历史版本下载地址和python对应关系

一、前言 因为Conda安装版本问题,带来了很多问题,虽然不能直接确定二者之间的关系,但是安装指定版本的conda,确实是一个比较好的方法。特此记忆。 二、下载地址 下载最新版本:Free Download | Anaconda 下载历史版本&#xff…

ssm+vue的校园一卡通密钥管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的校园一卡通密钥管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

【JS逆向八】逆向某企查网站的headers参数,并模拟生成 仅供学习

逆向日期:2024.02.07 使用工具:Node.js 加密方法:未知 / 标准库Hmac-SHA512 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加…

PdfFactory Pro软件下载以及序列号注册码生成器

PdfFactory Pro注册机是一款针对同名虚拟打印机软件所推出的用户名和序列号生成器。PdfFactory Pro是一款非常专业的PDF虚拟打印软件,通过使用这款注册机,就能帮助用户免费获取注册码,一键激活,永久免费使用。 pdffactory7注册码如…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

Java并发基础:LinkedTransferQueue全面解析!

内容概要 LinkedTransferQueue类实现了高效的线程间数据传递,支持等待匹配的生产者-消费者模式,基于链表的无界设计使其在高并发场景下表现卓越,且无需担心队列溢出,丰富的方法和良好的可扩展性满足了各种复杂应用场景的需求。 …

【Godot4.2】文件系统自定义控件 - FileSystemTree

FileSystemTree B站【Godot4.2】文件系统自定义节点 - FileSystemTree 概述 在Godot设计编辑器插件或应用程序时,可能需要涉及文件系统的显示,比如文件夹或文件的树形列表。 我们可以用Godot的Tree控件快速书写相应的功能,但是为了复用到…

华为OD机试C卷 - 最富裕的小家庭( Python C C++ JavaGo JS PHP)

题目描述 在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值。一个小家庭由一个节点及其直接相连的子节点组成。 现在给定一颗树,我们需要计算最富裕的小家庭的财富和。 输入描述 输入包括以下几行: 一个整…

Project2013下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件,不仅可以快速、准确地创建项目计划,而且可以帮助项目经理实现项目进度、成本的控制、分析和预测,使项目工期大大缩短,资源得到有效利用,提高经济效益。软件设计目的在于协助专案经理发…

2024年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)考试题

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批(项目负责人)考试考前必练!安全生产模拟考试一点通每个月更新广东省安全员B证第四批(项目负责人)考试题题目及答案!多做几…

基于AST实现一键自动提取替换国际化文案

背景:在调研 formatjs/cli 使用(使用 formatjs/cli 进行国际化文案自动提取 )过程中,发现有以下需求formatjs/cli 无法满足: id 需要一定的语义化; defaultMessage和Id不能直接hash转换; 需要…

MySQL篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、水平分区二、分库分表之后,id 主键如何处理三、存储过程(特定功能的 SQL 语句集)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

仰暮计划|“舅舅的大女儿失踪了,当时找遍了整个村庄,也报了警”

我的舅舅是1961年出生在一个偏僻的小山沟里,我只在很小的时候跟着我的妈妈回去过,我对于那里的印象很模糊,只有半镶在土窑里的小平房,门前的一条栽满樱桃树的很深的土沟,通往门前的陡峭的小路和露天的院子里那一颗茂盛…

LabVIEW动平衡测试与振动分析系统

LabVIEW动平衡测试与振动分析系统 介绍了利用LabVIEW软件和虚拟仪器技术开发一个动平衡测试与振动分析系统。该系统旨在提高旋转机械设备的测试精度和可靠性,通过精确测量和分析设备的振动数据,以识别和校正不平衡问题,从而保证机械设备的高…

图数据库 之 Neo4j - 环境搭建(2)

运行环境: centos7 Docker version 18.09.6 下载镜像 docker search neo4j docker pull neo4j 创建 neo4j 用户 # 创建 neo4j 用户 # -M 不创建用户的主目录 sudo useradd -M neo4j # usermod 用于修改用户属性命令 # -L 锁定用户,用户无法登录系统 user…

深入Pandas:精通文本数据处理的20+技巧与应用实例【第68篇—python:文本数据处理】

文章目录 Pandas文本数据处理方法详解1. str/object类型转换2. 大小写转换3. 文本对齐4. 获取长度5. 出现次数6. 编码方向7. 字符串切片8. 字符串替换9. 字符串拆分10. 字符串连接11. 字符串匹配12. 去除空格13. 多条件过滤14. 字符串排序15. 字符串格式化16. 多列文本操作17. …

Android Studio安装过程遇到SDK无法安装问题解决

首次打开studio遇到该类问题,需要下载SDK文件,后又发现SDK由于是Google源,无法进行正常安装,故转而进行SDK的镜像安装。 一、下载SDK Tools 地址:AndroidDevTools - Android开发工具 Android SDK下载 Android Studio…

c语言动态数组的实现

动态数组是在程序运行时动态分配内存空间的数组,可以根据需要随时改变大小。在C语言中,动态数组通常通过指针和malloc函数来实现。 使用malloc函数动态分配内存空间: int *arr; int size 10; arr (int*)malloc(size * sizeof(int));使用r…

【Java八股面试系列】并发编程-进程与线程

目录 进程 线程 线程和进程的区别 Java线程和操作系统的线程的区别 请简要描述一下进程和线程在Java中的关系,区别及优缺点?​编辑​编辑​编辑 并发和并行的区别 为什么要使用多线程? 线程的生命周期 什么是线程上下文切换? sleep() 方法和…

Java Stram 流对于返回对象的处理 (结束流)

Java Stram 流对于返回对象的处理 (结束流) package com.zhong.streamdemo.showdownstreamdemo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.*; import java.util.stream.Collectors; im…
最新文章