CVE-2023-22809漏洞分析
一、漏洞简述
sudo允许系统管理员将权限委托给某些用户/用户组,能够以ROOT用户或其他用户身份运行部分/全部命令。
由于Sudo中的sudoedit对处理用户提供的环境变量(如SUDO_EDITOR、VISUAL和EDITOR)中传递的额外参数存在缺陷。当用户指定的编辑器包含绕过sudoers策略的 " --" 参数时,拥有sudoedit访问权限的本地攻击者可通过将任意条目附加到要处理的文件列表中,最终在目标系统上实现权限提升。除外,该漏洞还影响部分QNAP操作系统:QTS、QuTS hero、QuTScloud、QVP(QVR Pro设备)。
二、安芯网盾漏洞研究小组评估
漏洞类型:sudo提权
漏洞等级:高危
攻击复杂度:容易
权限要求:普通用户
影响范围:全局影响
数据保密性:数据泄露
影响对象数量级 :影响十万级
武器化:否
CWE-ID:CWE-269特权管理不当
CVSS3.1评分:
7.8(CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
补丁情况:官方补丁
ATT&CK攻击链分析:
安芯网盾安全产品覆盖情况:神甲已覆盖
三、漏洞影响范围
sudo 1.8.0到1.9.12p1版本,可以通过sudo -V命令查看。
QTS与QuTS hero受影响版本:
QTS < 5.0.1.2346 build 20230322
QuTS < hero h5.0.1.2348 build 20230324
四、漏洞分析
sudoers策略插件首先调用sudoers_policy_main()来处理的查找和验证使用sudoers_lookup()的策略。不过,在此功能结束后,策略成功验证时,使用名为find_editor()的编辑器查找方法重写命令。
该函数首先使用用户提供的三个环境变量SUDO_EDITOR、VISUAL和EDITOR执行编辑器查找文档。
如果存在,则将每个值发送到resolve_editor()进行解析。然而,后者不仅如此解析编辑器的路径,但也接受在最后的命令行中传递的额外参数类中的文件分开,这些参数放在双破折号参数之前原来的命令行。
然后使用生成的命令调用sudo_edit()函数。找到临时工作后可写目录(/var/tmp, /usr/tmp, /tmp或操作被取消),方法解析命令行提取要处理的文件列表。为此,前面的双破折号参数是用作分隔符,其右边的每个参数都被视为要处理的文件名。
在之前的环境中注入额外的双破折号时,这种行为会导致混乱用于查找编辑器的变量。
EDITOR='vim -- /path/to/extra/file'
使用这个值,命令行将被解析为:
vim -- /path/to/extra/file -- /path/from/policy
因此,假设采用以下策略,用户将能够通过编辑将权限升级到root系统中的敏感文件。
$ cat /etc/sudoers
user ALL=(ALL:ALL) sudoedit /etc/custom/service.conf
[...]
$ EDITOR='vim -- /etc/passwd' sudoedit /etc/custom/service.conf
sudoedit: --: editing files in a writable directory is not permitted
2 files to edit
sudoedit: /etc/custom/service.conf unchanged
$ tail -1 /etc/passwd
sudoedit::0:0:root:/root:/bin/bash
此漏洞允许被授权使用sudoedit编辑文件的用户编辑其他文件配置的RunAs用户。
五、漏洞复现
(一)复现环境
系统环境:Kylin V10 SP3
内核版本:4.19.90-52.15.v2207.ky10.x86_64
漏洞组件版本:sudo version 1.9.2
sudoers I/O plugin version 1.9.2
sudoers audit plugin version 1.9.2
(二)复现过程
1.修改/etc/soduers配置文件
进入/etc/sudoers文件,在文件末尾添加命令普通用户名 ALL=(ALL:ALL) sudoedit /etc/xml,/etc/xml位置可以替换为任意可执行的文件(例如:/etc/vim等)。
2.切换至普通用户,构造payload
需要说明的是,我们在环境变量中输入EDITOR='vim -- /path/to/extra/file'会被解析为vim -- /path/to/extra/file -- /path/from/policy进行执行。在环境中注入额外的双破折号时,这种行为会导致混乱用于查找编辑器的变量。
3.在普通用户下输入攻击代码
$EDITOR = 'vim -- /etc/passwd' sudoedit /etc/xml
命令执行后,就会打开/etc/passwd文件,修改此此文件就可以将普通用户提升至root权限。
4.修改/etc/passwd文件进行权限提升
5.验证
在普通用户下执行su root,成功获得root权限。
六、漏洞修补意见
使用sudoedit时,将受影响的环境变量添加到env_delete拒绝列表中。
Defaults!SUDOEDIT env_delete+="SUDO_EDITOR VISUAL EDITOR"
Cmnd_Alias SUDOEDIT = sudoedit /etc/custom/service.conf
user ALL=(ALL:ALL) SUDOEDIT
七、安芯网盾神甲检测及告警
安芯神甲能够准确识别CVE-2023-22809漏洞的攻击,成功拦截该攻击行为并在后台告警显示。