漏洞简介
sudo命令:以系统管理者的身份执行指令,配置文件:/etc/sudoers
漏洞形成的原因
配置文件中明确表明不允许以 root 用户进行访问,但通过该漏洞,恶意用户或程序仍可在目标 Linux 系统上,以 root 用户身份执行任意命令。
对应格式及注释如下:
漏洞影响版本:sudo 1.8.28之前的所有版本
漏洞修复:将sudo包更新至最新版本
漏洞复现
漏洞复现环境
centos release 6.10
sudo 1.8.6p3
添加用户:useradd test
修改配置文件:vim /etc/sudoers
切换到test用户,查看id
使用sudo命令尝试执行了以下命令:均不成功!
漏洞利用:sudo -u#-1 或者 sudo -u#4294967295(-1 的补码,其内部是按无符号整数处理的)
通过以上方式绕过配置文件限制,以root身份成功执行命令!
漏洞原理分析
官方提交修复代码:https://www.sudo.ws/repos/sudo/rev/83db8dba09e7
进入lib/util/strtoid.c中发现,对id为-1做了限制,表示禁止改变
llval 变量为解析后的值,不允许 llval 为 -1 和 UINT_MAX(4294967295)
接下来打算深入分析一下的小伙伴可参考:https://paper.seebug.org/1057/