已發(fā)現(xiàn)Linux sudo命令中的漏洞,該漏洞可能允許非特權(quán)用戶以root用戶身份執(zhí)行命令。幸運的是,此漏洞僅在非標準配置中有效,并且大多數(shù)Linux服務(wù)器不受影響。
在獲得此漏洞之前,重要的是要掌握一些有關(guān)sudo命令如何工作以及如何進行配置的背景信息。
在Linux操作系統(tǒng)上執(zhí)行命令時,非特權(quán)用戶可以使用sudo
(超級用戶身份)命令以root用戶身份執(zhí)行命令,只要它們已被授予權(quán)限或知道root用戶的密碼即可。
sudo命令還可以配置為允許用戶通過向/ etc / sudoers配置文件添加特殊指令來以其他用戶身份運行命令。
例如,以下命令允許用戶`test`以root身份以外的任何用戶身份運行/ usr / bin / vim和/ usr / bin / id命令。
test ALL = (ALL, !root) /usr/bin/vimtest ALL = (ALL, !root) /usr/bin/id
為了使“ test”用戶執(zhí)行上述命令之一,他們將使用帶有-u參數(shù)的sudo命令來指定運行用戶。例如,以下命令將以vibleing-test用戶身份啟動vim。
sudo -u bleeping-test vim
在Linux中創(chuàng)建用戶時,將為每個用戶分配一個UID。如下所示,用戶“ test”的UID為1001,“ bleeping-test”用戶的UID為1002。

啟動sudo命令時,用戶可以使用這些UID代替用戶名。例如,下面的命令將再次以“測試”的形式啟動VIM,但這一次是通過提供用戶的UID來啟動的。
sudo -u#1002 vim
sudo漏洞
蘋果安全研究員Joe Vennix 發(fā)現(xiàn)了一個錯誤,該錯誤允許用戶通過在sudo命令中使用-1或 4294967295 UID以root用戶身份啟動允許的sudo命令。
例如,即使在/ etc / sudoers文件中明確拒絕了“ test”用戶,以下命令也可以利用該錯誤以root身份啟動/ usr / bin / id用戶。
sudo -u#-1 id
下面說明了如何將這個錯誤與/ usr / bin / id命令一起使用以獲取root特權(quán)。

盡管此錯誤功能強大,但重要的是要記住,只有通過sudoers配置文件為用戶提供了對命令的訪問權(quán)限,它才能起作用。如果不是這樣,并且大多數(shù)Linux發(fā)行版默認情況下都沒有,那么此錯誤將無效。
發(fā)起攻擊
為了真正利用此漏洞,用戶需要為能夠啟動其他命令的命令配置一個sudoer指令。
在上面的示例sudoers指令中,我們有這樣的命令;VIM命令!
test ALL = (ALL, !root) /usr/bin/vim
在VIM中,用戶可以使用:!啟動另一個程序。命令。例如,如果在VIM中,您可以輸入!ls 以ls
在當前文件夾中執(zhí)行命令。
如果我們使用 sudo -u#-1 vim
命令利用此漏洞,則VIM將作為root啟動。然后可以通過執(zhí)行!whoami
命令來確認。

既然VIM是作為root啟動的,那么從該VIM執(zhí)行的所有命令也將作為root運行。
這可以很容易地用于啟動根外殼程序,然后可以在受感染的系統(tǒng)上執(zhí)行所需的任何命令。下面的視頻說明了這種攻擊。

盡管此錯誤顯然很強大,但仍只能在不會影響絕大多數(shù)Linux用戶的非標準配置下使用。
對于確實為用戶使用sudoers指令的用戶,應(yīng)盡快升級到sudo 1.8.28或更高版本。