¿Cómo el parche Shellshock realmente evita el problema?

2

No puedo entender algo sobre el error de Shellshock: si estas funciones del entorno (cuya declaración comienza con " () ") se ejecutan en el inicio de la shell, ¿cómo evita el problema el parche?

Todavía podemos establecer alguna función a través de los encabezados HTTP, y la próxima vez que en el servidor alguien abra Terminal, por ejemplo (cuando se cargue bash), se ejecutará el cuerpo de la función, incluso cuando el analizador no se ejecute de forma arbitraria. Comandos después del cuerpo de la función (como en la versión no parcheada, donde invocamos a bash con ' bash -c : ' y obtenemos el RCE inmediatamente).

El nombre de la variable que contiene la función no debería importar.

¿cuál es la diferencia si será ' x ' o ' HTTP_COOKIE '? ¿Alguien me puede explicar?

    
pregunta programings 26.09.2014 - 09:29
fuente

1 respuesta

6

Bash tiene una característica por la cual interpreta algunas variables de entorno como definiciones de funciones. Por ejemplo, con la variable de entorno HTTP_COOKIE establecida en () { echo hello; } , bash analiza el valor de la variable como una definición de función, como si el script hubiera comenzado con HTTP_COOKIE () { echo hello; } . El cuerpo de la función no se ejecuta, a menos que el script llame a HTTP_COOKIE como un comando: es la función definición que se ejecuta.

La vulnerabilidad de Shellshock se debe a la interpretación de las variables como más que definiciones de funciones. Por ejemplo, si HTTP_COOKIE se establece en () { echo hello; }; echo pwned , bash analiza y ejecuta la definición de la función cuando se inicia, y felizmente ejecuta el resto del contenido de la variable, por lo que ejecuta la instrucción echo pwned .

Con el parche Shellshock, solo se aceptan definiciones de funciones bien formadas. Un valor como () { echo hello; }; echo pwned se rechaza porque contiene un código final después de la definición de la función.

El script debe escribirse con cuidado y no usar HTTP_COOKIE (o cualquier variable que tenga contenido que pueda ser elegido por un adversario) como un nombre de comando. Solo los nombres de variables que el script utiliza como comandos pueden llevar a la inyección de código: los nombres de variable que se usan como variables o no se usan en el script no son un problema.

Una variable de entorno definida en un script CGI no tiene influencia alguna en un shell iniciado en un terminal. Las variables de entorno afectan a los procesos y son heredadas por los subprocesos, no saltan de forma mágica a otros procesos que se ejecutan en la misma aplicación.

    
respondido por el Gilles 26.09.2014 - 11:43
fuente

Lea otras preguntas en las etiquetas