HttpOnly Session Hijacking XSS: Explicación y PoC

    El atributo "HttpOnly" en las cookies HTTP es esencial para mejorar la seguridad de las aplicaciones web al mitigar el riesgo de robo de cookies y proteger los datos del usuario. Este atributo impide que las cookies sean accesibles desde scripts del lado del cliente, como JavaScript, limitando su accesibilidad únicamente a las solicitudes HTTP. Esto proporciona una capa adicional de defensa contra ataques, especialmente los de tipo Cross-Site Scripting (XSS), donde los atacantes inyectan scripts maliciosos en páginas web para robar cookies o realizar acciones no autorizadas.

    Cuando un servidor web envía una cookie al navegador de un usuario, esta se almacena generalmente como un archivo de texto en el dispositivo del usuario y puede contener información sensible como ID de sesión, preferencias de usuario o tokens de autenticación. Sin el atributo "HttpOnly", estas cookies son accesibles tanto para los scripts del lado del cliente como para los del servidor, lo que aumenta el riesgo de que un atacante las robe y secuestre sesiones.

    Al habilitar el atributo "HttpOnly", se restringe el acceso de las cookies a los scripts del lado del cliente. Esto significa que incluso si un atacante logra inyectar un código malicioso en una página web, no podrá leer ni manipular los datos de la cookie. Esto reduce significativamente la superficie de ataque y protege mejor la información del usuario.

    Por ejemplo, en una aplicación de banca en línea, después de que un usuario inicia sesión, el servidor establece una cookie de sesión con el token de autenticación. Si la cookie no está marcada con "HttpOnly", un atacante que inyecta un script malicioso en la página puede robar la cookie y acceder a la cuenta del usuario. Sin embargo, si la cookie está marcada con "HttpOnly", el script malicioso no podrá acceder a la cookie, evitando el acceso no autorizado.

    En resumen, el atributo "HttpOnly" es una medida de seguridad crucial que los desarrolladores web deben implementar para proteger las cookies y, por ende, la información sensible de los usuarios contra accesos no autorizados y actividades maliciosas.



PoC 



    Después de autenticarnos, vemos que tenemos un campo de entrada. Cuando presionamos enviar, descubrimos que esta entrada proporcionada por el usuario se refleja en el lado del cliente. Lo que nos indica que podemos empezar a  probar ataques de Cross Site Scripting (XSS).

    Podemos saber si podemos secuestrar la información de la sesión inspeccionando las cookies y viendo si el atributo HTTP/HttpOnly está habilitado, lo cual vemos que no esta habilitado(false).



    En esta caso inyectaremos un script de JavaScript para ver mediante un PopUp la cookie de sesión. Con esto acabamos de ver que podemos inyectar JavaScript y confirmamos que el atributo HttpOnly no esta configurado.

    
    Vamos a crear un script el cual va a robar la cookie de sesión y que nos la envíe a nuestro servidor web:


    Este código crea una aplicación web básica usando Flask. Importa varias utilidades de Flask y configura la aplicación para servir archivos estáticos desde una carpeta específica. La aplicación está en modo de depuración para facilitar el desarrollo.

    Define una ruta /<steal_cookie> que acepta solicitudes GET con un parámetro de URL. Cuando se accede a esta ruta, se ejecuta una función que devuelve una plantilla HTML llamada "evil.html"`. Finalmente, la aplicación se ejecuta en la dirección "0.0.0.0" y el puerto "1337".

    Instalaremos algunas dependencias para ejecutar nuestro script como "flask" y "requests"

    Una vez lo ejecutemos, vamos a inyectar inyectar un script de JavaScript el cual va a capturar la cookie y la va a enviar a nuestro localhost por el puerto 1337 como parte de la URL.


    Después de inyectar el script, vemos la cookie en los registros del servidor.



No hay comentarios:

Publicar un comentario