Qué es un ataque 'parameter tampering' o manipulación de URL
En un ataque de "parameter tampering" (manipulación de parámetros) el atacante modifica los valores de los parámetros que forman parte de una URL con el fin de obtener un resultado no autorizado o comprometer la seguridad de la aplicación. Aquí te explicamos con más detalle algunas cuestiones que debes conocer para evitarlo.
¿Qué es una URL y de qué está compuesta?
Para entender lo que es realmente un ataque de manipulación de parámetros, debemos tener claro qué es exactamente una URL. Una Uniform Resource Locator (URL) o Localizador de Recursos Uniformes es una dirección que se utiliza para acceder a una página web o a cualquier otro recurso en la red. En este sentido, los parámetros son valores que se pueden incluir en una URL para enviar información adicional a la página web. En este sentido, una URL está compuesta por los siguientes elementos:
- El nombre del protocolo: es, en cierta manera, el lenguaje que se usa para comunicarse en la red. El protocolo más usado es el HTTP (Protocolo de transferencia de hipertexto), que permite el intercambio de páginas Web en formato HTML. También pueden usarse otros protocolos (FTP, News, Mailto, etcétera).
- Nombre de usuario y contraseña: permite especificar los parámetros requeridos para acceder a un servidor seguro. No se recomienda esta opción ya que la contraseña circula en la URL sin previa codificación.
- El nombre del servidor: es el nombre de dominio de un ordenador que aloja el recurso solicitado. Tenga en cuenta que es posible usar la dirección IP del servidor.
- El número de puerto: es el número asociado a un servicio que le indica al servidor qué tipo de recurso se está solicitando. El puerto que se vincula con el protocolo en forma predeterminada es el número 80. Cuando el servicio Web del servidor se asocia con este puerto, puede o no especificarse este número.
- La ruta de acceso al recurso: esta última parte le indica al servidor dónde se encuentra el recurso, que generalmente es la ubicación (directorio) y el nombre del archivo solicitado.
Una URL tiene la siguiente estructura:
Protocolo | Contraseña (opcional) | Nombre del servidor | Puerto (opcional si es 80) | Ruta |
http:// | usuario:contraseña@ | es.ccm.net | :80 | /glossair/glossair.php3 |
Como te indicábamos, una URL permite enviar parámetros al servidor colocando un signo de interrogación después del nombre del archivo y luego los datos en formato ASCII. Esto permite buscar un recurso específico dentro de la propia web a la que nos dirigimos. Esto es un ejemplo de cómo se ve un parámetro en una URL:
http://es.ccm.net/forum/?cat=1&page=2
¿Qué es y qué implica una manipulación de parámetros de la URL?
- Al manipular ciertas partes de una URL, un hacker puede hacer que un servidor web le permita acceder a páginas web a las que supuestamente no tenía acceso. En sitios web dinámicos, los parámetros generalmente se transfieren a través de la URL de la siguiente manera:
http://target/forum/?cat=2
- La página web crea automáticamente los datos contenidos en la URL y, al navegar normalmente, el usuario simplemente hace clic en el vínculo propuesto por el sitio. Si un usuario modifica el parámetro manualmente, puede probar diferentes valores, por ejemplo:
http://target/forum/?cat=6
- Si el diseñador web no ha previsto esta posibilidad, es posible que el hacker pueda tener acceso a un área que, en general, está protegida. Es decir, la página puede brindar información en un mensaje de error. Además, esto puede ocasionar que la página web procese un caso imprevisto, por ejemplo:
http://target/forum/?cat=***********
¿Cómo se lleva a cabo una manipulación de parámetros de URL?
Posiblemente, un hacker pueda probar directorios y extensiones de archivos al azar para encontrar información importante. Algunos ejemplos clásicos:
- Búsqueda de directorios para poder administrar el sitio:
http://target/admin/ http://target/admin.cgi
- Búsqueda de una secuencia de comandos para revelar información sobre el sistema remoto:
http://target/phpinfo.php3
- Búsqueda de copias de seguridad. Generalmente se usa la extensión .bak, la cual no es interpretada por los servidores de forma predeterminada, por lo que podría visualizarse una secuencia de comandos:
http://target/.bak
- Búsqueda de archivos ocultos en el sistema remoto. En los sistemas UNIX, se puede acceder a los archivos creados por el sistema a través de la Web siempre que el directorio raíz del página Web corresponda al directorio de un usuario:
http://target/.bash_history http://target/.htaccess
¿Qué es el ataque cruce de directorio?
El ataque denominado cruce de directorio o cruce de ruta modifica la estructura de árbol de la ruta en la URL para hacer que el servidor tenga acceso a partes no autorizadas del sitio.
- Un ejemplo típico es cuando el usuario se ve obligado a retroceder en la estructura de árbol, especialmente cuando no tiene acceso al recurso:
http://target/base/test/ascii.php3 http://target/base/test/ http://target/base/
- En servidores vulnerables, el atacante simplemente puede retroceder por la ruta con varias cadenas de este tipo "../":
http://target/../../../../directory/file
- Los ataques más avanzados codifican ciertos caracteres, ya sea con la forma de codificación URL:
http://target/..%2F..%2F..%2Fdirectory/file
- O con la de notación Unicode:
http://target/..%u2216..%u2216directory/file
- Muchos sitios dinámicos transfieren los nombres de las páginas que se visualizarán como parámetros en una forma similar a la siguiente:
http://target/cgi-bin/script.cgi?url=index.htm
- Si no se realizan verificaciones, un hacker pude modificar la URL de forma manual para solicitar acceso a un recurso de página web al que no tiene acceso directo, por ejemplo:
http://target/cgi-bin/script.cgi?url=script.cgi
¿Qué tipo de contramedidas son necesarias?
Para proteger un servidor web contra manipulaciones de URL, es necesario supervisar las vulnerabilidades y aplicar las actualizaciones que regularmente provee el editor del servidor web. Además, una configuración detallada del servidor web impide que los usuarios naveguen por páginas a las que se supone que no tienen acceso. Por lo tanto, las siguientes contramedidas son importantes para garantizar una adecuada seguridad del sitio web:
- Impide la navegación por páginas que estén bajo la raíz del página web (mecanismo chroot).
- Deshabilita la visualización de los archivos de un directorio que no contiene un archivo índice ("Navegación de directorio").
- Elimina directorios y archivos inservibles (incluso los ocultos.
- Asegúrate de que el servidor proteja el acceso a directorios que contienen datos importantes.
- Elimina las opciones de configuración innecesarias.
- Asegúrate de que el servidor interprete las páginas dinámicas con precisión, incluso archivos de copias de seguridad (.bak);
- Elimina los intérpretes de secuencias de comandos innecesarios.
- Impide la visualización HTTP en páginas HTTPS accesibles.