Bug en mod_proxy (CVE-2011-3368) de Apache
Este pasado miercoles se público otra vulnerabilidad en Apache, en este caso en el modulo de proxy. Tal como podemos ver en el mensaje del anuncio si se usa incorrectamente las directivas RewriteRule o ProxyPassMatch es posible que estemos permitiendo que un cliente haga hacer peticiones al servidor web.
Suponiendo que tengamos la siguiente directiva con ProxyPassMatch:
ProxyPassMatch /media(.*) http://imagenes.systemadmin.es$1
Un cliente podría realizar la siguiente petición:
http://systemadmin.es/media@127.0.0.1/server-status
Esto haría que el servidor realizase la siguiente petición:
http://imagenes.systemadmin.es@127.0.0.1/server-status
Por lo tanto, podríamos estar exponiendo datos privados aúnque tengamos limitado de la siguiente forma el /server-status, ya que es el propio servidor que se conecta a dónde le indicamos.
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
Esto se produce por el formato de la URL, lo podemos consultar en el RFC1738:
<scheme>://<user>:<password>@<host>:<port>/<url-path>
La petición que se genera esta indicando que la parte que definimos en la configuración corresponde al usuario, mientras que el servidor permitimos que lo introduzca el usuario (después de la @). Por ejemplo:
$ curl -I http://systemadmin.es@google.com HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Thu, 06 Oct 2011 14:47:02 GMT Expires: Sat, 05 Nov 2011 14:47:02 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 219 X-XSS-Protection: 1; mode=block
Así, en este caso estamos indicando que se conecte a “google.com” usando el usuario “systemadmin.es“. Únicamente modificando la directiva para obligar a que incluya siempre al principio la barra:
ProxyPassMatch /media/(.*) http://imagenes.systemadmin.es/$1
Por lo que la petición se generaría en el servidor que se indica en la directiva forzosamente:
$ curl -I http://systemadmin.es/@google.com HTTP/1.1 404 Not Found Server: nginx Date: Thu, 06 Oct 2011 14:47:09 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive
El uso de la @ para indicar el servidor, engañando al usuario es algo que ya hace tiempo que se usa. Por ejemplo, Firefox cuando detecta que se le esta indicando un usuario a usar en una web que no requiere de autenticación avisa al usuario indicando claramente cual es el servidor al que realmente se conecta:
Relacionados
Imprimir

21. October 2011 at 11:24 pm :
Muy buen POSTEO