CVE-2023-48409 Mali GPU 整数溢出导致堆越界写

漏洞原语:假设分配的大小为 0x3004​, 会执行 copy_from_user(ptr-0x4000, from, 0x7004),导致越界写

由于 CONFIG_HARDENED_USERCOPY 如果 to 是 slab 中的地址,copy_from_user 会确保拷贝时不会跨越 slab 中的对象

static inline __must_check unsigned long
_copy_from_user(void *to, const void __user *from, unsigned long n)
{
unsigned long res = n;
might_fault();
if (!should_fail_usercopy() && likely(access_ok(from, n))) {
instrument_copy_from_user(to, from, n);
res = raw_copy_from_user(to, from, n);
}
if (unlikely(res))
memset(to + (n - res), 0, res);
return res;
}

利用思路:分配大内存让 kmalloc 从 页分配器中申请内存,绕过 CONFIG_HARDENED_USERCOPY

漏洞对象:pipe_buffer

struct pipe_buffer {
struct page *page;
unsigned int offset, len;
const struct pipe_buf_operations *ops;
unsigned int flags;
unsigned long private;
};

控制 page 指针做任意物理内存读写,而且 pixel 上 virt2page 直接可以写死,不像 x86 vmemap_base 是随机的(可能和物理地址随机化有关)

__u64 __virt_to_page(__u64 addr)
{
return ((((__u64)(((signed long long)((__u64)(addr) << 8) >> 8) + \
0x8000000000LL) >> 6) & 0x3FFFFFFFFFFFFC0LL) + \
0xFFFFFFFEFFE00000);
}

伪造思路:使用 CVE-2023-26083 泄露堆地址 kbase_kcpu_command_queue​ ,然后伪造结构体

struct pipe_buffer {
.page = virt_to_page(addr),
.offset = 0,
.len = 0x40,
.ops = kcpu_addr + 0x50, // 伪造空的 ops
.flags = PIPE_BUF_FLAG_CAN_MERGE,
unsigned long private = 0
};

然后释放 kbase_kcpu_command_queue​ 用 pipe_buffer 占位,就能够用 pipe_buffer 修改另一个 pipe_buffer.

CVE-2023-48409 Mali GPU 整数溢出导致堆越界写的更多相关文章

  1. Linux Exploit系列之二 整数溢出

    整数溢出 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出.整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代 ...

  2. gdk-pixbuf tiff_image_parse函数整数溢出漏洞

    受影响系统:gdk-pixbuf gdk-pixbuf 2.36.6描述:CVE(CAN) ID: CVE-2017-2870 gdk-pixbuf是一个用于以各种格式加载图像和像素缓冲处理的库. 使 ...

  3. Linux Kernel 整数溢出漏洞

    漏洞名称: Linux Kernel 整数溢出漏洞 CNNVD编号: CNNVD-201311-062 发布时间: 2013-11-07 更新时间: 2013-11-07 危害等级:    漏洞类型: ...

  4. windows下整数溢出分析

    0x00前言 整数溢出就是往存储整数的内存单位存放的数据大于该内存单位所能存储的最大值,整数溢出有时候间接导致缓冲区溢出.如JPEG溢出漏洞(MS04-028). 0x01整数溢出分类 整数溢出可以分 ...

  5. Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程

    1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...

  6. Mali GPU OpenGL ES 应用性能优化--基本方法

    1. 经常使用优化工具 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXlBcnJvdw==/font/5a6L5L2T/fontsize/400/fil ...

  7. PWN INTEGER OVERFLOW 整数溢出

    0x00      Preview Last few passage I didn't conclude some important points and a general direction o ...

  8. Linux (x86) Exploit 开发系列教程之二(整数溢出)

    (1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> #include <stdlib.h> void s ...

  9. BEC合约整数溢出漏洞还原与分析

    一.币圈一秒,人间一年 有道是币圈一日,人间一年.这个说法又得升级了,叫币圈一秒,人间一年. 前不久,币圈又出大事啦.BEC智能合约被爆出整数溢出漏洞,导致黑客能无限印币,在一次交易中,也就那么几秒钟 ...

  10. CVE-2012-0774:Adobe Reader TrueType 字体整数溢出漏洞调试分析

    0x01 TrueType 字体 TTF 字体是 Apple 和 Microsoft 两家公司共同推出的字体格式,现在已经广泛的运用于 Windows 操作系统,其中 PDF 文档也可以嵌入 TTF ...

随机推荐

  1. 阿里面试官常问的TCP和UDP,你真的弄懂了吗?

      前  言 作为软件测试,大家都知道一些常用的网络协议是我们必须要了解和掌握的,面试的时候面试官也非常喜欢问一些协议相关的问题,其中有两个协议因为非常基础,出现的频率非常之高,分别是 "T ...

  2. Tomcat——基本使用(下载、安装、卸载、启动、关闭)

    Tomcat--基本使用   1.下载安装(8.5版本为企业最常用版本)     下载地址:https://tomcat.apache.org/download-80.cgi          (官网 ...

  3. 音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的99八十一难

    <1>我的实验所使用的视频文件告知读者 1. 这是我在ubuntu环境上实验使用的视频文件, 我在windows上查看了详细信息,然后拖进ubuntu内,重命名为video-test.mp ...

  4. 离线安装MySQL

    离线安装mysql [下载地址](MySQL :: Download MySQL Community Server) 解压后依次执行如下命令 rpm -ivh mysql-community-comm ...

  5. 【赵渝强老师】Docker的日志

    Docker的日志分两类,一类是 Docker引擎的日志:另一类是容器日志.下面我们分别进行介绍. 一.Docker引擎的日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14 ...

  6. blocks 单调栈、单调队列题解

    blocks题解: 1.题面: 2.分析: 题意大概就是说,找一段最长的区间,并且这段区间的平均值>=k,那么我们可以对他的每一个值减去k,最终求和>=0即可. 那我们需要对每个可能的左端 ...

  7. 这个Linux你敢用吗?

    文中列出的命令绝对不可以运行,即使你觉得很好奇也不行,除非你是在虚拟机上运行(出现问题你可以还原),因为它们会实实在在的破坏你的系统.所以不在root等高级管理权限下执行命令是很好的习惯. 早晚有一天 ...

  8. HTTP常用返回结果状态码

    摘编自<图解HTTP> HTTP状态码负责表示客户端 HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作.状态码的职责是当客户端向服务器端发送请求时,描述返回的请求 ...

  9. Python-提高-1

    阅读目录 1.GIL(全局解释器锁) 2.深拷贝.浅拷贝 3.私有化 4.import导入模块 5.再议 封装.继承.多态 一.GIL(全局解释器锁) GIL面试题如下 描述Python GIL的概念 ...

  10. mysql重置id排列重新排序

    1.删除表中的原有的主键字段 ALTER TABLE table2 DROP id 2.表中重新创建一个字段 ALTER TABLE table2 ADD id int NOT NULL FIRST; ...