CVE-2019-14287 linux sudo root
- 在 Sudo before 1.8.28
- 當前身分有 sudo
Background
- 在
sudo -l
時可以列出像下面這個格式的東西(as user: as group) nopassword:commands
- 像是
(ALL:!root) /bin/bash
就是可以以所有的 user 身分、除了 root 以外的 group 執行 /bin/bash,就可以用這樣的指令切換身分執行 command (ALL:ALL) /bin/ping
就可以用sudo -u#1234 /bin/ping
來用 user id 1234 的身分執行 ping
成因
主要問題是發生在 system call 的 setresuid
中,在 sysdeps/unix/sysv/linux/i386/setresuid.c
可以看到他的 code
,他在 code 中有一段是會檢查傳進去的 ruid、euid、suid 是不是 = -1,不等於的話才會 assign 這些值,否則就會沿用 default 的 0 (也就是 root),造成這個問題。
在 patch 的地方他們就是在 sudo 的 lib/util/strtoid.c
裡面把多加個檢查避免 id == -1 或是 UINT_MAX(4294967295) (line 76)
PoC
用 sudo -u#-1 <可執行的 command>
就可以提權了
Reference
CVE-2019-14287 linux sudo root
https://wiiwu959.github.io/2021/09/30/2021-09-30-CVE-2019-14287/