Lectura de archivos a través de páginas ASP

Reading time: 2 – 3 minutes

Bucle a Servidors.

Las páginas ASP programadas para la versión 5.0 del servidor
web de Microsoft (IIS) que hacen uso del método “Execute” pueden
permitir una escalada de directorios y dar acceso a la mayor parte de los
archivos del servidor.

El lenguaje ASP surge como una extensión al código HTML para
permitir un mayor dinamismo en la presentación de contenidos y obtener
una mayor potencia del servidor web. Pero si la programación de estas
páginas no se realiza de forma correcta puede producir graves problemas
que pueden permitir a un atacante la posibilidad de acceder a datos, robar
información e incluso llegar a tomar el control de la maquina.

Desde la aparición de la versión 5.0 de IIS muchos programadores
hacen uso del método “Execute” para desarrollar los sitios web sin
necesidad de usar “frames” o usar la directiva “#include”. De este modo es
más sencillo implementar plantillas HTML para facilitar el trabajo de
los desarrolladores.

EL problema se produce cuando se indica la página que debe de ser
cargada desde la propia URL, por ejemplo:

http://servidor/inicio.asp?file=/asp/home.asp

Mediante la modificación de la URL puede ser posible escalar directorios
mediante el uso de URL’s modificadas:

http://servidor/inicio.asp?file=../../WINNT/win.ini

Esto permitirá a un atacante acceder con permisos de lectura a muchos de
los archivos del servidor, o todos si no está usando el formato de
archivos NTFS.

Un segundo problema es una posible denegación de servicio si se solicita
el mismo archivo que hace la llamada al Server.Execute:

http://servidor/inicio.asp?file=inicio.asp

Esto provocaría que el script ASP entrara en un bucle infinito que le
llevaría a usar el 100% de la CPU y grandes cantidades de memoria
mientras el script no hiciera “time out”, generalmente a los 90 segundos de
haberse iniciado la petición.

Las posibles soluciones pasan por verificar que el archivo que se pasa al
método Execute no contienen cadenas como “../” o desactivar las “rutas
padre” en la configuración del propio servidor IIS.