|
UID大于INT_MAX的Linux用戶任意代碼執(zhí)行漏洞(CVE-2018-19788)
Linux操作系統(tǒng)中UID值大于2147483647的低權(quán)限賬戶可以未授權(quán)執(zhí)行任意systemctl命令。該漏洞存在于PolicyKit(polkit)中,PolicyKit是類Unix操作系統(tǒng)中定義策略、處理系統(tǒng)范圍內(nèi)權(quán)限和提供給非特權(quán)進(jìn)程與特權(quán)進(jìn)程通信方式的應(yīng)用級(jí)工具集,比如sudo。
該漏洞CVE編號(hào)為CVE-2018-19788,影響PolicyKit v0.115版本,這是大多數(shù)主流Linux發(fā)行版中預(yù)裝的版本,其中包括Red Hat, Debian, Ubuntu和CentOS。
漏洞是因?yàn)镻olicyKit沒有UID大于INT_MAX的低權(quán)限用戶的權(quán)限請(qǐng)求進(jìn)行適當(dāng)?shù)尿?yàn)證。INT_MAX是計(jì)算機(jī)程序中用于定義整數(shù)變量可以保存的最大值的常量,等于2147483647,十六進(jìn)制表示為0x7FFFFFFF。
也就是說(shuō),如果用戶在受影響的Linux操作系統(tǒng)中創(chuàng)建了UID大于INT_MAX值的用戶賬戶,攻擊者就可以利用PolicyKit組件來(lái)執(zhí)行任意的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)發(fā)布了該漏洞的PoC,用UID 4000000000證明了該漏洞。
t01.png (42.91 KB, 下載次數(shù): 60)
下載附件
保存到相冊(cè)
2019-5-20 15:43 上傳
在補(bǔ)丁發(fā)布之前,Red Hat建議系統(tǒng)管理員不要設(shè)置負(fù)值UID或大于2147483646的UID,以緩解該漏洞可能帶來(lái)的威脅。
|
|