Vulnerabilidades HTTP: cómo identificarlas y proteger tu sitio web

Vulnerabilidades HTTP: cómo identificarlas y proteger tu sitio web

Lorena Fernández

Los sitios web forman parte de nuestro día a día. Gracias a los mismos, podemos acceder a la información que necesitamos y es posible realizar todo tipo de actividades. Sin embargo, existen varias actividades en la web que requieren el manejo de datos personales, o bien, cualquier tipo de dato que sea de carácter sensible. La seguridad de cualquier sitio web, incluyendo las aplicaciones web, más que nunca es un aspecto importante no sólo para quien está encargado del desarrollo, sino también, para los usuarios finales. Esta guía os va a explicar todo sobre las vulnerabilidades HTTP, las cuales pueden resultar casi tan severas como las XSS (Cross-Site Scripting), por citar un ejemplo.

Recordemos que la base de la web es el Lenguaje Marcado de Hipertexto, es decir, HTML. Desde sus comienzos, se ha presentado como una excelente alternativa para desarrollar páginas web. A lo largo de los años, su evolución se ha dado a pasos agigantados. Miles de librerías se encuentran a disposición de los desarrolladores para ajustar los sitios web de acuerdo al propósito original del proyecto. Por desgracia, no están exentos de las amenazas y riesgos de seguridad, sobre todo si se trata de los usuarios finales.

¿Qué es el protocolo HTTP?

Igualmente, debemos recordar y consideramos bueno el énfasis en la definición del protocolo HTTP. Así también, para qué sirve. Es un protocolo de comunicación. Su función esencial es la transmisión de datos a través de la WWW (World Wide Web). Es uno de los componentes esenciales de la arquitectura de la web. En el año 1999, se publicó la primera versión de la documentación del protocolo, con el RFC 2616, este protocolo se lanzó con la versión 1.1. A lo largo de los años se han ido lanzando diferentes versiones, y la última versión disponible es HTTP/3 que sucederá a la actual HTTP/2 que se utiliza ampliamente en la gran mayoría de webs de Internet.

El esquema esencial de funcionamiento consiste en lo siguiente: un cliente (usuario de la web) intenta realizar una conexión mediante una petición. Dicha petición envía un mensaje con un formato determinado al servidor web. Ese servidor web es el que aloja al sitio o servicio web del cual necesitamos información. Si la conexión se da de forma exitosa, el servidor web responde a esa petición mediante una respuesta positiva. Esto es algo que se da múltiples veces al día cada vez que visitas a tus sitios web favoritos.

Vulnerabilidades HTTP (+HTML)

El conjunto conformado por HTML y HTTP cuenta con varias aplicaciones con fines maliciosos, o que, simplemente, no se comportan de la manera que uno esperaría. En consecuencia, se convierten en importantes vulnerabilidades que atentan contra la integridad del sitio o aplicación web. Sobre todo, en cuanto a la seguridad de dicho sitio o aplicación.

Campos de formularios ocultos

Una de las prestaciones conocidas de HTML es que existe un atributo de formularios que permiten que campos u objetos se marquen como ocultos (hidden). ¿Esto cómo se refleja en una página? Al abrir una página web, el usuario solamente podrá completar los campos visibles, lo demás está oculto. Por supuesto, la mayoría de los usuarios no percibirá que precisamente existen campos de formularios ocultos. El peligro de esto es que el desarrollador de la página podría utilizar este atributo para implementar campos ocultos en formulario que le permitirían almacenar datos de carácter sensible en el servidor web. En muchos casos, es innecesario hacer esto.

En consecuencia, la ética profesional de cada desarrollador determinará si es adecuada la utilización de este particular atributo.

<html>
<input type="hidden" id="precio" name="precio" value="200">
<html>

Más arriba, es posible visualizar un ejemplo de aplicación de campos de formularios ocultos. Este es un supuesto campo oculto que almacena información de precios. Generalmente, en una tienda web, los distintos precios se manejan del lado del servidor. En este caso, dichos datos se manejan del lado del usuario. Es como si fuera que este campo oculto actúa como un supuesto servidor web que almacena datos de cualquier tipo. Aunque a simple vista, esto resulte bastante práctico tiene su riesgo, principalmente porque será posible que el propio usuario manipule los distintos precios simplemente desde el navegador.

Recuerda que es posible visualizar el código fuente de una página web desde el navegador. Google Chrome es el navegador que utiliza la mayoría de las personas y el atajo para acceder a la consola de desarrolladores es «CTRL + Mayús + I«. Con esto podrás hacer, entre otras cosas, guardar una copia en tu ordenador de la página web o valerse de un web proxy para manipular cualquier dato de una página web, sobre todo los campos de formularios.

Volviendo al ejemplo, gracias a los campos ocultos se puede manipular el precio del lado del usuario y aplicar el precio que uno quiera antes de finalizar la compra. Por ende, es recomendable no aplicar este tipo de atributos a los campos de formularios, más aún si se trata de sitios web que manejan valores.

URLs mágicas

Uno de los conceptos esenciales de HTML es la URL. Sus siglas en inglés significan Uniform Resource Locator. Es lo que generalmente la gente conoce como link o enlace a una página web cualquiera. En desarrollo web existe un curioso concepto de los enlaces mágicos o URLs mágicas. El estándar HTTP permite que un desarrollador web proporcione datos adicionales que sean relevantes en una URL en forma de verbos o par de claves. Estos datos adicionales, ya sean verbos o par de claves, son componentes esenciales de una URL mágica. Lo que se hace es administrar datos sensibles y/o importantes entre el cliente y el servidor web.

http://www.misitioweb.com?OpDEfgtRDBc&action=view

Más arriba vemos un ejemplo de una URL mágica. Aparentemente, no hay nada raro. Pero, lo que viene después de «.com/OpDEfgtR…» es el verbo o par de clave que lleva consigo estos datos que son tan relevantes para la comunicación entre el cliente y el servidor web. Ahora bien, ¿qué datos se podrían almacenar en URLs mágicas? Pueden ser contraseñas, claves de tipo PIN, números de cuenta bancaria, tarjetas de créditos, cookies de las distintas sesiones en una web y mucho más.

Este es otro caso de una supuesta aplicación práctica de manejo de datos pero que, sin embargo, puede ser bastante más peligrosa. Un cibercriminal puede interceptar la comunicación entre el cliente y el servidor web para poder decodificar la información disponible en ese verbo o par de claves en la URL. Con los recursos disponibles hoy en día, no será tarea muy difícil.

Cookies predecibles

A pesar de que es algo difícil evitar asociar la palabra cookie con las deliciosas galletas que todos conocemos, las cookies en la web juegan un papel esencial en la navegación día tras día. Están diseñadas de manera que puedan almacenar datos persistentes del lado cliente, es decir, en el propio dispositivo del cliente. Desde nuestro navegador, podemos administrar nuestras cookies en cualquier momento, y es que, sobre todo, nos ayuda a autenticar nuestra identidad en los distintos servicios web.

from http import cookies

cookieVal= 0
def getCookie():
c = cookies.SimpleCookie()
c['usercookie'] = cookieVal
cookieVal += 1
return c

El problema empieza cuando las cookies son desarrolladas con una lógica de generación predecibles. Es muy difícil que hoy en día se aplique algo así pero no debemos descartar el hecho de que muchas páginas web podrían tener este agujero de seguridad. Supongamos que una página web cualquiera (ver el ejemplo que está más arriba) genere cookies de sesión y a medida que se vayan generando cada una de ellas, el incremento se da de uno en uno. Es decir, cookie con valor «1», cookie con valor «2», cookie con valor «3» y así sucesivamente.

Fijándonos mejor en el código de ejemplo, esta es la línea que hace que el valor de la cookie, que está almacenado en la variable cookieVal, se incremente de a uno:

cookieVal += 1

Las cookies predecibles permiten que un cibercriminal logre acceder a las sesiones web de múltiples usuarios sin la necesidad de conocer las credenciales de acceso. Si una página web ha generado 1000 cookies con la lógica que acabamos de demostrar, si un cibercriminal logra tener control del sitio web, lograría apropiarse de 1000 sesiones de usuarios de dicha página. En consecuencia, es esencial que como desarrollador web apliques las mejores prácticas a la hora de trabajar con las cookies. Recursos gratuitos como los que podemos encontrar en Mozilla Developer Network son útiles, prácticos y accesibles a cualquiera que necesite garantizar las seguridad de las cookies. Puedes acceder a este recurso web en español sobre las cookies HTTP.

No queda dudas de que sin HTML y HTTP, la web así como la conocemos no existiría. Sin embargo, no se salva de las vulnerabilidades. Esto significa que más que nunca, es importante conocer respecto a las vulnerabilidades citadas y manejarlas para tener un efectivo control de las mismas. Como resultado, las páginas web que llegues a desarrollar serán más robustas en cuanto a la seguridad y al final de cuentas, se traduce en tranquilidad y confianza para el usuario que cada vez más se encuentra expuesto a ciberataques.