ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cve-2021-3156-sudo堆溢出简单分析

2021-01-27 19:01:50  阅读:438  来源: 互联网

标签:args .. ++ user sudo 2021 cve NewArgv


调试方式

首先从github下载代码

https://github.com/sudo-project/sudo/archive/SUDO_1_9_5p1.tar.gz

编译

tar xf sudo-SUDO_1_9_5p1.tar.gz 
cd sudo-SUDO_1_9_5p1/
mkdir build
cd build/
../configure --enable-env-debug
make -j
sudo make install

调试

gdb --args sudoedit -s '\' `perl -e 'print "A" x 65536'` 

gdb加载执行后进程会crash,这时候就可以对有漏洞的源码位置下断点,因为漏洞代码貌似是动态加载的,直接下断点下不到,crash之后就可以下了

断点命令

b ../../../plugins/sudoers/sudoers.c:964
b ../../../plugins/sudoers/sudoers.c:978

漏洞成因

调试用poc

sudoedit -s '\' 112233445566

漏洞位于 set_cmnd 函数中,关键代码如下

	    /* Alloc and build up user_args. */
	    for (size = 0, av = NewArgv + 1; *av; av++)
		size += strlen(*av) + 1;
	    if (size == 0 || (user_args = malloc(size)) == NULL) {
	
	    if (ISSET(sudo_mode, MODE_SHELL|MODE_LOGIN_SHELL)) {

		for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
		    while (*from) {
			if (from[0] == '\\' && !isspace((unsigned char)from[1]))  // 关键逻辑!!!
			    from++;
			*to++ = *from++;
		    }
		    *to++ = ' ';
		}
		*--to = '\0';
	    }

进入该函数时NewArgv的结构如下

NewArgv[0]: sudoedit
NewArgv[1]: \
NewArgv[2]: 112233445566

首先会计算 NewArgv 1-2 两个参数的长度 2 + 13 = 15 .

因此user_args分配的内存大小为 15 字节

然后会把 NewArgv 1-2 的数据拷贝到user_args里面,拷贝过程中如果 from[0]\,且 from[1] 不是空格就会from++

			if (from[0] == '\\' && !isspace((unsigned char)from[1]))  // 关键逻辑!!!
			    from++;

所以在处理NewArgv[1]时,from[0] 就是 \from[1]\x00 ,会通过这个判断让 from++ ,然后后面会再次from++.

			*to++ = *from++;

之后from就指向了NewArgv[1]字符串\x00后面的一个字符,我们看看调试时NewArgv[1]后面时什么

可以看的NewArgv[1]后面紧跟着的时NewArgv[2]

所以会再次进入while循环把NewArgv[2]拷贝到user_args

然后处理NewArgv[2]再次把NewArgv[2]拷贝到user_args

因此最终结果就是 NewArgv[2] 被拷贝了两次,实际的写入数据长度为26字节

这个漏洞是一个堆溢出,不过写的数据需要是非\x00,如果user_args分配的内存比较小(比如15字节)的话,其后面是unsorted bin,如果分配的比较大的话(使用原始的poc)其后面跟的是top chunk,感觉都不是很好利用。

感觉需要花一些时间捋一捋代码的逻辑,看看有没有什么其他的想法。

参考链接

https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit

标签:args,..,++,user,sudo,2021,cve,NewArgv
来源: https://www.cnblogs.com/hac425/p/14336484.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有