关注我们❤️,添加星标🌟,一起学安全! 作者:inSight@Timeline Sec 本文字数:815 阅读时长:2~3min 声明:仅供学习参考使用,请勿用作违法用途,否则后果自负
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
漏洞编号:CVE-2023-22809
由于Sudo中的sudoedit对处理用户提供的环境变量(如SUDO_EDITOR、VISUAL和EDITOR)中传递的额外参数存在缺陷。当用户指定的编辑器包含绕过sudoers策略的 " --" 参数时,拥有sudoedit访问权限的本地攻击者可通过将任意条目附加到要处理的文件列表中,最终在目标系统上实现权限提升。
sudo 1.8 到 1.9.12p1
复现环境系统版本为 Debian 4.6.4-1kali1 sudo版本为1.8.17p1
在实际复现中,试了 1.8 到 1.9.12p1其中多个版本的sudo,都未复现成功,如下图所示
结合以下官方修复漏洞的代码,推测系统对注入的双破折号进行了过滤
使用1.8.17p1版本复现成功。使用root权限编辑/etc/sudoers文件,添加
xxxx ALL=(root) NOPASSWD: sudoedit /etc/services
这么一行,其中xxxx是当前非root权限的用户名
必须对系统中的至少一个文件具有有限的sudo访问权限。
执行攻击命令:(如果sudoedit后面接的文件和sudoers中的不是相同的文件,系统会要求输入root密码)
export EDITOR="vi -- /etc/passwd"
sudoedit /etc/services
这样我们就拥有了对/etc/passwd文件可编辑的权限。
接下来把root账号的那一行配置信息改成test的,接着test账户就拥有了root权限,实现提权。
1、使用/etc/sudoers中的env_delete将环境变量添加到拒绝列表,如下所示。
Defaults!SUDOEDIT env_delete+="SUDO_EDITOR VISUAL EDITOR"
Cmnd_Alias SUDOEDIT = sudoedit /etc/services
root ALL=(root) NOPASSWD: SUDOEDIT
2、更新到最新版本的sudo。
https://www.vicarius.io/blog/cve-2023-22809-sudoedit-bypass-analysis
历史漏洞
本文分享自 Timeline Sec 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!