Kernel提权逻辑漏洞总结
漏洞 影响模块 漏洞成因 copy fail crypto/aead 4字节page-cache覆写 Dirty Frag crypto/aead xfrm rxrpc 4/8字节page-cache覆写 Fragnesia xfrm espintcp 1字节page-cache覆写 PinTheft net/rds double free CIFSwitch cifs description检验逻辑缺失 DirtyDecrypt rxrpc/rxgk CoW检查缺失 ssh-keysign-pwn ssh 访问权限控制逻辑缺失 dirtyclone net/core page-cache覆写 peditCoW net/sched page-cache覆写 IonStack rtmutex stack uaf bad epoll epoll UAF powerVR powervr oob write page...
内核模块依赖图
内核模块的依赖是装载时的大问题。大部分时候可以通过 Modules.deps 或者 Modules.order 进行依赖模块的自动加载。但是有时候可能没有这些依赖配置(例如树外编译),以及其加载过程不透明(不知道到底是哪个符号依赖于哪个模块)。 modtree对树外编译模块依赖写了一个简单的脚本,仓库地址:https://github.com/Eknight-Eutopia/mod_tree效果如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253msm-kgsl ├── socinfo │ └── smem ├── llcc-qcom │ └── socinfo │ └── smem ├── qcom-dcvs │ └── dcvs-fp │ ├── qcom-rpmh │ │ ├── qcom-ipc-logging ...
Android NoMali 驱动模拟
安卓mali驱动模拟。 环境配置 arm mali_kbase源码 linux-kernel 6.12.93 源码 busybox qemu-aarch64-system aarch64-linux-gnu-gcc 编译编译 linux-kernel 源码(linux 6.12.93 版本)编译mali源码 123456KDIR=/mnt/Data/Android/mali_fuzz/external/linux-6.12.93 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \ CONFIG_MALI_MIDGARD=m \ CONFIG_MALI_EXPERT=y \ CONFIG_MALI_REAL_HW=n \ CONFIG_MALI_NO_MALI=y \ CONFIG_MALI_NO_MALI_DEFAULT_GPU=\"tMIx\" 模拟busybox相关配置参考之前的内容,buildroot 也可以(适配...
Android KGSL 加载流程解析
跟着源码和qemu模拟过程研究下KGSL模块的加载流程。 环境配置 真机xiaomi 14 pro设备树(pineapple 6.1.75) qcom-kernel 源码:KERNEL.PLATFORM.4.0.r12-00400-kernel.0.xml graphic-kernel 源码 模拟流程 获取目标模块依赖树以及设备树; 加载目标模块所有依赖模块,先满足目标模块能够insmod的条件; 通过源码或者IDA反编译分析目标模块以及依赖模块需要的硬件属性,添加设备树设置; 记录硬件属性的数据流 硬件属性分为必要/非必要,均可以存储到数据库中 设备树应该为dts格式,而非dtb反编译 设备树每一个节点 qcom 有官方说明 txt 注意设备树地址是否与virt本身冲突,冲突部分需要进行地址迁移,同时在 QEMU 侧注册相应 MMIO...
Android Qcom KGSL模块编译
Environment SetupPull qcom-kernel12repo init -u https://git.codelinaro.org/clo/la/kernelplatform/manifest -m KERNEL.PLATFORM.5.0.r28-00700-kernel.0.xmlrepo sync create soft link vendor/qcom 1ln -s vendor/qcom ../qcom Pull graphics-kernelsimply clone it from codelinaro 12git clone https://git.codelinaro.org/clo/la/platform/vendor/qcom/opensource/graphics-kernel.gitgit checkout gfx-kernel.lnx.16.0.r10-rel Additional dependenciesmm-drivers1234cd...
SJTU26校赛出题记录
此次出题过于执着于防AI以及AI agent工具使用,反而忽略了碳基古法解题的做题体验,线上赛看大家问卷反馈也是发现此次出题效果很差,在此向大家谢罪 XD。 【Stack UAF】NekoGarden题目预期难度:简单题目评价:该题目是一道防 agent 题目,虽然是在第三天凌晨就被 b0ar 大佬拿下一血(结合该选手其他题目解题情况合理怀疑是编排了很强力的 agent 自动解题。但是整场比赛七天下来在最后两天放出提示后才两解(另一解看wp应该是真人手打的),基本上可以认为是防住了 AI 大人。但是没想到的是把真人也防住了,导致最后解数太低(该题目预期难度简单,考验手动调试),实在惭愧。 起因是看到一个漏洞:CVE-2024-23354该漏洞是内核中 kgsl gpumem 逻辑中,op 结构体 op->data 成员被赋值为栈上变量地址,可以通过提前kill进程导致栈对应函数提前释放。因此考虑在用户态对此种情况进行复现,通过 pthread_t 的生命周期管理导致子线程函数提前退出然后触发栈上变量UAF。这也就是这道题目的由来,题目的漏洞点在于...
CVE-2026-21385漏洞复现
实验环境 小米15 (snapdragon 8 Elite) 漏洞分析漏洞位于 kgsl 驱动上,相关 patch commit 有关 kgsl 的基本介绍可以阅读:Attacking the Qualcomm Adreno GPU 根据其描述可知为整数下溢。在 kgsl_sharedmem.h 中 kgsl_memdesc_get_align 函数内容如下 123456789101112/* * kgsl_memdesc_get_align - Get alignment flags from a memdesc * @memdesc - the memdesc * * Returns the alignment requested, as power of 2 exponent. */static inline intkgsl_memdesc_get_align(const struct kgsl_memdesc *memdesc){ return FIELD_GET(KGSL_MEMALIGN_MASK,...
Kernel-PWN-Race
uffd(userfaultfd)该功能在 5.11 版本后变成需要 root 权限。 1int sysctl_unprivileged_userfaultfd __read_mostly = 1 该值在较新版本中会默认为 0。可以通过命令验证是否开启 1234$ cat /proc/sys/vm/unprivileged_userfaultfd 1$ sysctl vm.unprivileged_userfaultfdvm.unprivileged_userfaultfd = 1 不过该功能十分好用。userfaultfd 为用户可以为特定地址注册 page handler ,当 内核触发特定地址 pagefault 时,就会阻塞进而执行 handler 内容。从而可以在让内核读写时暂停,然后开启另一个线程进行篡改,实现 race。 1 punch hole在 CTF 题目中,如果关闭了 userfaultfd 以及 fuse 情况下,同时时间竞争窗口较小,可以通过该方法来扩大时间窗口。其基本原理是 fallocate 系统调用支持对 打开文件的对应内存打洞,即...
Android-GPU-Driver
两个主流的安卓GPU驱动,ARM Mali 以及 Qualcomm Adreno MaliGPU driverGPU 驱动作为安卓内核模块,其可以用于实现 LPE。在 Android 内核中 GPU 软件技术栈依赖于进程中 HAL 模型,其与 GPU 内核模块通信的 API 和 用户空间驱动直接运行在 app 上下文中,避免了 IPC 的使用。其导致第三方应用可以直接访问内核模块提供的接口。如果存在漏洞,第三方应用可以直接进行漏洞利用。 攻击面:GPU driver,GPU Firmware在 Mali GPU 驱动架构中,每一个 client 进程维护了一个上下文。当 client 进程 打开 /dev/maliX 设备文件,GPU 驱动就会给其创建一个 GPU 对象 kbase_file 结构体,通过 handshake 相关 ioctl 系统调用,可以初始化 kbase_file->ctx 结构体对象。 模拟可以使用 Cuttlefish 以及 2025年 39c3 上的一个议题来实现对 gpu...
ebpf入门
eBPF(extended Berkeley Packet Filter),ebpf 支持程序在不修改内核源码,或添加额外内核模块情况下运行,添加内核新功能。 架构 用户态 用户编写 ebpf 程序,可使用 ebpf 汇编或者 ebpf 特有 c 语言编写; 使用 llvm/clang 编译器,将 ebpf 程序编译为 ebpf 字节码; 调用 bpf() 系统调用将 eBPF 字节码加载到内核 内核态 ebpf 字节码到内核时,内核会先对其进行安全验证; 使用 JIT (Just In Time)将 字节码编译为本地机器码; 根据 eBPF 程序功能,将机器码挂载到内核的不同运行路径上(例如跟踪内核运行状态的ebpf 程序会挂载在 kprobes 的运行路径上)。当内核运行到这些路径上,就会触发执行相应路径上的 eBPF 机器码; 原文拿来和 JAVA 的 AOP 概念做类比,这里由于本人没有 java 基础,所以不再赘述,感觉只是挂钩函数功能而已,欢迎评论区指正...
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)