Querido Diario…

No había dormido nada en toda la noche… en todas las noches que llevó aquí, en todas las noches que me fui, y desde que volví… estos días es un poco complicado explicar que hago durante el insomnio…

Hay algo que me tiene un poco traumatizado, no puedo poner screenshots, pero imagina que te autenticas a una aplicación, y la aplicación que genera una sesión tipo:

{"session":{"access_token":"2-291009-761399659-EwOps5gDpm2s4U"}}

Luego mandas la petición con la que te autenticas, al Repeater de Burp Suite, y generas otras sesiones más… las que tú quieras:

{"session":{"access_token":"2-291009-761399659-5g5AfP5A83DNXT"}}
{"session":{"access_token":"2-291009-761399659-uYE5bTk5mJTaeB"}}

Y luego te que le diste «Send» y «Send» y más «Send»… te autenticas normal con el browser:

{"session":{"access_token":"2-291009-761399659-cwzw1LWUuouT9B"}}

Ahora… pues analicemos un poco de la estructura del token. Primero tenemos un ID, que básicamente nos da el nivel de lciene que tenemos, luego nos da otro ID que aparentemente es la región del usuario, luego nos da el ID de usuario… lo cual desde aquí es interesante, porque ese ID de usuario es el nombre de usuario para ingresar a la cuenta; y finalmente nos da un token alfanumérico.

Es decir, tenemos varios datos estáticos y finalmente unos que no son estáticos que podemos, con el mismo generador de tokens de Burp Suite, probar para generar otros.

Tú me dirás, y el equipo de desarrollo de la aplicación: «¡Ahhhh… vas a querer intentar generar tokens de sesión aleatorios para conectarte!, pues no; eso no es una vulnerabilidad».

¡No!, la vulnerabilidad que reporté no era esa. La vulnerabilidad que reporté es que yo estoy generando varios tokens. Cada sesión, para un servicio como este, debería de tener un único token, y al momento de crearse otro, destruir el anterior y así hasta que siempre tengamos como máximo uno. ¿Por qué?, si yo cierro el token o cierro el browser con el tachecito, la aplicación me mata la sesión, perooo.. sólo la última; es decir, todas las sesiones anteriores se quedan abiertas. ¿Qué origina esto?.

Imagina ahora que esta es una aplicación con ¡millones!, no miles, ¡millones de usuarios!. El usuario tiene la sesión cerrada, yo mando a llamar, desde el browser la URL para ver el panel de usuario y me aparece sin autorizar; en ese momento metó un token, y ¡zas! estoy dentro.

¿Qué puede derivar esto?, sniffeo al usuario o lo que sea; ganó una sesión válida, replico 1000 veces la sesión; o, si, aplicó fuerza bruta y generó sesiones; y me conectó a todos los usuarios sin que la sesión jamás me expiré, porque es una sesión extra, y válida que ni siquiera será destruida cuando el usuario acceda o cuando cierre su sesión; la mía va a seguir abierta.

Ahora imagina que esta aplicación con millones de usuarios, te da la oportunidad de sacar datos bancarios que tiene el usuario almacenado para facturar sus servicios; o acceso a millones de sitios web… ta, ta, ta…

Pero… el equipo de seguridad, dijo que esto no era una vulnerabilidad 🤔

Lo sé, es un poco complicado de explicar sin las requests, pero… como era un bug bounty, no puedo mostrar los detalles técnicos y no quiero ir a la cárcel. Y bueno, llevó más de una semana pensando en como puedo modificar el vector de ataque con tal de demostrar la severidad del bug desde otro enfoque y que acepten la vulnerabilidad.

Querido Diario…

Estaba un poco abrumado, me metí a bañar y salí para buscar algo que desayunar. ¡Oh rayos!…

… yo tenía mi sudadera azul puesta.

Caminé hacía el río y entonces la señorita de pelo color pokemón me marcó para preguntarme si ya había desayunado. Le dije que no y quedamos de vernos en Maelu.

Mientras llegaba me senté en una mesa y empecé a leer las noticias de mi feed, revisar Plurk, Instagram, el correo, Facebook… y entonces me apareció este -> recuerdo.

No pude dejar de recordar esa noche… ¿no podría recordarla?. Tengo tan mala memoria… tengo tan mala memoria que recuerdo que ese día comimos en Apple Bees, yo comí costillas y tu ensalada; me metí por error al baño de mujeres en vez del de hombres; pediste de beber la bebida que servían en una copa grande de esas redondas.. y no cenamos, ya era tarde.

Dania llegó, se sentó y preguntó que quería para desayunar, para ayudarme a pedirlo. Luego me preguntó si me sentía nervioso. Hice un gesto altivo y le dije que «el gran, el único, el increíble Augusto.. jamás está nervioso». Ella desayunó un cuernito, yo uno de esos panquecitos que parecen esferas de caramelo de matcha y café.

Pedí un taxi, y la pasé a dejar a su trabajo… yo seguí. Fui a negociar si aceptaba o no la oferta de trabajo. Mientras esperaba a que me recibiese el CTO, quería volver a ver la foto… recuerdo que en la foto dije que mientras yo veía YouTubePorn, tu estudíabas, y Memo, el novio de Clausen, se burló de eso. Pero cuando iba a verla nuevamente la secretaría me llamó para pasar.