
Exploit y parche para CVE-2016-1240
1.Instala Tomcat 7 en la máquina virtual
sudo apt-get install tomcat7
2.Si el primer paso falla, establece JDK_DIRS="/usr/lib/jvm/java-8-oracle" y añade las declaraciones “export JAVA_HOME=/usr/lib/jvm/java-8-oracle” y “export CATALINA_HOME=/usr/share/tomcat7”. Luego reinstala Tomcat 7
3.Configura una contraseña inicial para el usuario de Tomcat
sudo passwd tomcat7
4.Asigna el shell de inicio de sesión al usuario de Tomcat
sudo usrmod -s /bin/bash tomcat7
5.Establece el shell del usuario de Tomcat 7
ssh tomcat7@localhost
1.Crea los scripts de exploit attack.sh en /tmp a través del shell del usuario Tomcat7 y luego haz ejecutables los códigos de exploit
touch attack.sh
chmod +x attack.sh
2.Ejecuta el código de exploit
./attack.sh
3.Reinicia el servidor Tomcat para comprobar el resultado del ataque.
sudo service tomcat7 restart
4.Comprueba el ID del usuario
id
Entonces el ataque debería tener éxito y el euid debería ser 0, que es root.
# Run the catalina.sh script as a daemon
set +e
touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
chown $TOMCAT7_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
start-stop-daemon --start -b -u "$TOMCAT7_USER" -g "$TOMCAT7_GROUP" \
-c "$TOMCAT7_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
-x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
status="$?"
set +a -e
return $status
El código anterior es la clave para escalar privilegios. Como se ejecuta con privilegios de root, puede hacer cualquier cosa que queramos. Luego necesitamos cambiar el propietario de catalina.out al usuario de tomcat7. Después de reiniciar Tomcat, podemos leer el archivo al que catalina apunta.
Específicamente, cuando Tomcat se reinicia, cambiará el propietario de catalina.out al usuario de Tomcat, y el reinicio es invocado por el init de Linux. Aprovechando el init de Linux, podemos usar symlink para cambiar el propietario de cualquier archivo al usuario de tomcat. Si hacemos un symlink de catalina.out a cualquier archivo, podríamos operar cualquier archivo del sistema con el privilegio root que otorga catalina.out. Esto es una explotación típica de secuestro de DLL.