Me duele saber lo mucho que CONFÍAS en extraños, querido MUNDO TECNOLÓGICO

Alejandro Aguirre Soto
Bancolombia Tech
Published in
5 min readNov 12, 2020

A Harold Dolores, un hombre común y corriente que se encuentra caminando por la calle, lo aborda un completo desconocido y le pregunta: ¿Usted conoce a Harold Dolores?

¿Qué cree que va a contestar Harold?

A. No.

B. Si, soy yo.

C. Lo ignora y sigue su camino.

D. Ninguna de las anteriores.

Este es Pain Harold o Harold Dolores

¿Qué contestaría usted, si un desconocido lo aborda y le pregunta si conoce a <su verdadero nombre completo> ?

A. Lo más probable: si usted es una persona desconfiada, que no entabla ningún tipo de conversación con extraños, pero sí muy educada como para no ignorar a los demás cuando le hablan, seguramente su respuesta sería: No.

B. Lo menos probable: si usted es una persona confiada y empática, contestaría con la verdad: Si

C. Probable: si a usted no le importa la vida de personas extrañas y es muy desconfiado, seguramente ignoraría al desconocido que le hace la pregunta.

El ejemplo anterior, es una categorización subjetiva sobre lo que podría pasar producto de una interacción entre seres humanos; sería necesario hacer experimentos sociales para concluir cuál sería el verdadero impacto que genera un desconocido que indaga por tu nombre; sin embargo, para el adecuado desarrollo de este artículo no hablaremos del comportamiento de los seres humanos, sino que centraremos nuestra atención en el mundo de la computación y la tecnología.

En lo personal, me parece sorprendente cómo podemos ser desconfiados y mentirosos frente a personas desconocidas, pero cuando desarrollamos tecnología somos excesivamente confiados, y tendemos siempre a decir la verdad al desconocido o al usuario anónimo.

Resulta que en mis últimos años de experiencia en ciberseguridad, me he encontrado con la misma vulnerabilidad una y otra vez; una vulnerabilidad de criticidad moderada, que permite levantar información y activos de la víctima de una forma sencilla y que, además, si se combina con la falta de protección frente a ataques automatizados, se torna crítica, pues permite enumerar información y activos de forma automatizada y facilita la recolección, por ejemplo, de cientos de miles de usuarios válidos en cuestión de minutos.

Puede ser mas grave de lo que parece

¿De qué trata esta vulnerabilidad ?

En inglés se conoce como CWE-204: Observable Response Discrepancy. Si lo traducimos al español sería algo como: discrepancia observada en la respuesta, algo muy raro de leer y que en español conocemos como enumeración de usuarios o enumeración de activos. Esto consiste en que el atacante o el hacker malvado, discierne si el activo solicitado existe o no en la base de datos de la aplicación, observando las respuestas del servidor.

Un ejemplo clásico, es el formulario de recuperación de contraseña que tienen los sitios web:

Cuando quieres recuperar tu contraseña, el sitio web te muestra un formulario de un solo campo pidiendo tu nombre de usuario o tu correo electrónico. Resulta que si el usuario no existe, la aplicación te responderá eso mismo, que “el usuario no existe” o que la información es correcta, si el usuario existe y he ahí la vulnerabilidad de la que se aprovecha un usuario anónimo (completo desconocido) para empezar a enumerar los usuarios existentes. Esto, combinado con una enumeración automatizada (posible si no hay captchas en los formularios), permite conocer los cientos de miles de usuarios válidos en dicha aplicación y ampliar enormemente la superficie de ataque.

¿Qué tan grave es?

Solo para demostrar la gravedad del asunto, hace poco descubrí esta vulnerabilidad en un lugar donde podía enumerar los números de cualquier tarjeta de crédito y saber si dicha tarjeta existía o no en la base de datos. Lo peor es que lo pude hacer de forma anónima y automatizada:

Respuesta real de un servicio vulnerable.

¿Cómo solucionarla?

Cuando estamos hablando de un formulario o entradas de información expuestas sin autenticación, lo mejor es desconfiar al máximo de los desconocidos o usuario anónimos, tal como lo haríamos en la vida real, y responder siempre con el mismo mensaje así el activo exista o no. Para el ejemplo de la recuperación de contraseña, la respuesta genérica siempre sería la siguiente: “Si el usuario existe, una contraseña temporal o link de recuperación será enviada a su cuenta de correo”. Esto hace imposible saber si dicho usuario existe o no.

Ahora bien, en escenarios en los que el usuario está autenticado y no es un “desconocido”, se complica un poco más la situación. Acá es donde tenemos que aplicar esquemas de autorización y si ese usuario está queriendo acceder a información que no le corresponde o que no está en su “scope”, el servidor debe responder con un error de autorización, imposibilitando que dicho usuario sepa si ese activo existe.

¡Esconde el dolor Harold! Todo tiene solución.

Ahora un pequeño reto para que evaluemos la claridad de esta información:

Imagina que Harold Dolores no es un hombre, sino una aplicación común y corriente que anda caminando por Internet y la aborda un desconocido y le pregunta:

¿Usted conoce a Fulanito, Peranito, Menganguito ?

¿Qué crees que va a contestar Harold?

A. Si.

B. No.

C. Lo ignora y sigue su camino.

D. Ninguna de las anteriores.

Si escoge cualquier de las opciones A o B, déjeme decirle que usted es vulnerable y no supe explicar la vulnerabilidad en este artículo.

Si usted escogió la opción C, entonces Harold Dolores está ofreciendo una pésima experiencia de usuario.

Si usted escoge la opción D, le pido que, por favor, justifique su respuesta con lo que debería contestar Harold Dolores para no ser vulnerado.

--

--