Inicio / Alerta Temprana / Avisos Seguridad / Vulnerabilidad en Apache permite acceder a servidores internos

Vulnerabilidad en Apache permite acceder a servidores internos

Fecha de publicación: 
07/10/2011
Importancia: 
4 - Alta
Recursos afectados: 

Apache 1.3 y Apache 2 hasta la versión 2.2.20 están afectadas por esta vulnerabilidad.

Descripción: 

La empresa de seguridad "Context Information Security" ha descubierto una vulnerabilidad en el servidor web Apache cuando está corriendo como "Reverse Proxy" permitiendo a usuarios externos acceder a servidores internos.

Solución: 

Apache Foundation ya ha publicado una actualización de seguridad para la versión 2.2.21 que soluciona la vulnerabilidad.

Una solución temporal sería añadir una barra (/) extra a la regla rewrite como se indica en el ejemplo del último párrafo en el detalle del aviso.

Detalle: 

El módulo mod_rewrite de Apache proporciona un método flexible para analizar sintácticamente (parsear) y reescribir solicitudes web al vuelo mediante expresiones regulares. Un uso común de este módulo es emplearlo como balanceador de carga entre varios servidores web o para segregar el contenido dinámico del contenido estático cuando Apache se está ejecutando como "Reverse Proxy".

El problema radica en la forma en la que mod_rewrite resuelve determinadas solicitudes GET cuando se utiliza el símbolo @. Las implicaciones de esto permitirían que, por ejemplo, una petición de la siguiente forma:

GET @ServidorInternoNoAccesible/console HTTP/1.0

se convirtiese en la URL

http://ServidorInterno:80@ServidorInternoNoAccesible/console

La URL resultante apuntaría a ServidorInternoNoAccesible y tomaría ServidorInterno como usuario y 80 como password, solicitando la carga de la página console. El motivo de esta interpretación se debe a que el módulo mod_rewrite no discrimina determinadas solicitudes de acuerdo a la especificación URI (RFC 3986), la cual admite la siguiente estructura:

Estructura URI

Imágen extraída de www.contextis.com

Una vez realizada la solicitud, ServidorInternoNoAccesible ignorará dichas credenciales y respondería de forma legítima a la misma. El único prerequisito que un atacante debería conocer sería el nombre o IP del servidor no público al que se desea conectar, aunque estos podrían conseguirse mediante fuerza bruta.

Si el fichero de configuración de Apache contiene la siguiente línea:

RewriteRule ^(.*) http://ServidorInterno: 80$ [p]

en lugar de (fíjese en la barra después del puerto):

RewriteRule ^(.*) http://ServidorInterno: 80/$ [p]

sería susceptible de ser explotado desde Internet permitiendo por tanto que un usuario externo se conectase a cualquier servidor interno accesible por el proxy.