标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2025-2280]   作者: 凉笙 发表于: [2019-01-16]

本文共 [826] 位读者顶过

概述

在近期的一次安全分析过程中,我们在64位Linux系统内核里的createelftables()函数中发现了一个整型溢出漏洞,本地攻击者将可以通过一份SUID-root代码来利用这个漏洞,并获取到目标设备的完整root权限。

目前,受该漏洞影响的Linux发行版有Red Hat Linux企业版、CentOS和Debian 8。

漏洞分析

“argc”表示传递给execve()系统调用的命令行参数个数,个数受fs/exec.c中MAXARGSTRINGS的限制;“envc”表示传递给execve()的环境变量个数,个数同样受到MAXARGSTRINGS的限制;但是由于MAXARGSTRINGS为0x7FFFFFFF,所以我们可以让整数“items”发生溢出并让程序失效。

此时,我们就可以以增加用户态的栈指针,然后将用户态栈指针指向我们的参数和环境变量字符串,最终在用户模式执行SUID-root代码时重写这些字符串。

漏洞利用

在使用execve()运行SUID-root代码时,我们的“items”值为0x80000000,参数指针的大小约为0x80000000 * sizeof(char *) = 16GB,参数字符串为16GB,环境字符串也为16GB,因此我们的漏洞利用环境“只”需要2 * 16GB = 32GB内存,而并非3 * 16GB = 48GB或者更多,因为我们使用了一些小技巧来减少内存指纹。

下面这个图表代表了SUID-root代码开始执行后,我们的用户态栈结构:

此时,ld.so会使用handleldpreload()中fname[]缓冲区的数据重写“onebyte”环境变量中的部分数据,并让processenvvars()中的UNSECUREECVVARS等过滤器失效。

我们的POC代码能够利用createelftables()中的这个整型溢出漏洞,演示样例如下:

[出自:jiwo.org]

附件



评论

暂无
发表评论
 返回顶部 
热度(826)
 关注微信