jueves, 9 de mayo de 2013

Ejecución de código arbitrario en servidores nginx

Greg MacManus ha descubierto y publicado un grave fallo de seguridad (CVE-2013-2028) en nginx, cuando se procesan peticiones HTTP "por bloques" (chunked transfer) que puede permitir a un atacante ejecutar código arbitrario.

nginx es un servidor web, open source y desarrollado casi íntegramente en el lenguaje C, lo que le proporciona un alto rendimiento aprovechando al máximo los recursos del sistema. Una prueba de ello es que viene por defecto instalado en algunas distribuciones para Raspberry Pi. También puede realizar la función de servidor Proxy inverso para HTTP, SMTP, POP3 e IMAP.

El error descubierto produce un desbordamiento de memoria intermedia basada en pila que generaría en una denegación de servicio del servidor. Al ser un desbordamiento de memoria, se podría producir una ejecución de código arbitrario en el lado del servidor con los permisos del servidor nginx.

Para solucionar el error se han incluido una comprobación para que el ta tamaño no sea inferior a 0 al realizar esta petición, en el archivo 'src/http/ngx_http_parse.c'

+    if (ctx->size < 0 || ctx->length < 0) {
+        goto invalid;
+    }
+

El fallo se ha descubierto en las versiones 1.3.9 (de noviembre de 2012) y 1.4.0 y corregidos en la 1.5.0 y la 1.4.1 respectivamente.

Como contramedida si no se desea actualizar el servidor por alguna razón, se puede incluir este código en cada uno de los bloques "server" de la configuración:

if ($http_transfer_encoding ~* chunked) {
        return 444;
    }

que evita que se use el tipo de transferencia por bloques.

Se puede actualizar a las nuevas versiones desde su página de descargas.

Más información:

nginx download

nginx - patch.2013.chunked

nginx security advisory (CVE-2013-2028)



Antonio Sánchez

3 comentarios:

  1. El Nginx es una maravilla. ¿Todavía se puede usar goto?

    ResponderEliminar
  2. Por poder, se puede, aunque no es recomendable.

    nginx lo usa para cosas muy concretas, ya que así ahorra líneas de código. Yo no soy nada partidario de su uso, ya que puede dar lugar al "código spaguetti".

    ResponderEliminar
  3. Se ha hecho público un exploit:
    http://1337day.com/exploit/20817

    ResponderEliminar