Airbnb y su Password Length Restriction que no tenía nada de Restrictive

Imagen 1. Airbnb logo.

Por fin me han dado full disclosure en este fallo y ahora puedo publicarlo.

Un fallo en la restricción de longitud de contraseña de Airbnb podía provocar que con un numero de peticiones concretas se pudiese tirar uno de sus servidores abajo, mejor dicho, que pudieses hacer un Denial of Service de toda la vida.

Como bien sabemos un DoS teniendo los medios para hacerlo puede llegar a resultar bastante sencillo y esto era lo que ocurría con Airbnb. Ellos tenían un sistema de restricción de longitud de contraseña, que tenia un máximo 128 caracteres, este sistema funcionaba correctamente en el proceso de creación de una cuenta y en el de cambio de contraseña, si te pasabas de los 128 caracteres el propio formulario te indicaba que no se podían insertar más.

Es decir, tenían un algoritmo para la restricción de la longitud de la contraseña client-side, pero se habían olvidado de la restricción server-side. Tras realizar diversas pruebas me di cuenta de que este fallo solo estaba en el proceso de creación de cuenta, así que para ir un poco más allá, me creé una cuenta respetando su máximo de caracteres para la password, para que la restricción client-side no saltase y antes de que la petición de creación de al cuenta saliese de mi PC, la capturé con el proxy ZAP Attack y modifiqué la password por una de 100.000 caracteres.

Imagen 2. Mi password de 100.000 caracteres.

Esta es la petición que capturé, como podéis detallar se observan los valores en texto plano:

Imagen 3. Petición capturada

Una vez capturada la petición, se puede modificar el valor de la contraseña en este proceso y con ello nos saltamos las restricciones client-side y si el server no tiene restricciones ¡estaríamos registrados con nuestra super password!

¿POR QUE TANTO REVUELO POR TU SUPER PASS?

El problema de esto es que como todos sabemos las passwords no se almacenan en texto plano (O AL MENOS NO SE DEBERÍA), se almacenan hasheadas con algún algoritmo criptográfico (DSA, SHA, MD5), esto hace que cada vez que iniciemos sesión con nuestro usuario y su super password el servidor tenga que hashear la super contraseña y contrastarla con el hash que tiene en su base de datos, esta labor consume bastante recursos del servidor, bastante recursos con respecto a lo que un simple inicio de sesión tendría que consumir.

Mi password era de cien mil caracteres era pequeña para un servidor de Airbnb, pero quizá no para tu web, así que no hagas como Airbnb, mete restricciones client-side y server-side y duerme tranquilo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s