27 mayo 2010

¿Vuelos low-cost, seguridad low-cost?

<Disclaimer: Las acciones que se deriven de la lectura de este post son de tu completa responsabilidad. No se incita a cometer ningún tipo de ilegalidad>

La semana pasada tuve <IRONIC> la grata experiencia de repetir viaje en una de mis líneas aéreas favoritas: Ryanair </IRONIC> o Ryanfail, como lo bauticé tiempo atrás en "El Sumidero".

Lo más importante es que lleves la tarjeta de embarque impresa, si no te dejarás una pasta en que te la impriman en el aeropuerto. Para ello, lo más normal es irse a la web de gestión de reservas y curiosamente fue ahí empieza a verse el tinte lowcost de esta aerolínea:

1.- Fácil deducción en validación de usuarios para gestión de reservas

Para poder gestionar la reserva, se nos pide seleccionar una de las diferentes opciones de "seguridad":
  • Localizador + código de tarjeta de crédito
  • Localizador + correo utilizado + origen + destino
  • Fecha de salida + correo utilizado + origen + destino
Está claro que el localizador, sólo lo sabe el que hizo la reserva y aunque son "sólo" 5 caracteres alfanuméricos, hay una opción mejor para juguetear. Sin embargo, en caso de conocer la fecha de vuelo, origen, destino y uno o varios correos de un individuo, Ryanair lo da por suficiente como para permitir la gestión de la reserva... OMG!

Supongamos que conocemos a algún amig@/conocid@, del que conocemos su correo electrónico, que va a volar con Ryanair. Muy posiblemente sepamos el día que se va (si es usuario muy activo de twitter a lo mejor sí), o al menos de dónde sale/dónde va. Gracias a las preguntas de seguridad low-cost de la web de Ryanair, es posible hacer un ataque de fuerza bruta para despejar la incógnita que nos falte y acceder a los datos de la reserva sin mayor problema.

Podemos hacer ataques de fuerza bruta acotados sobre la fecha o destino; probablemente el origen lo sepamos o podamos deducir. De esta manera, se puede ver/cambiar (previo pago) los datos personales de pasajero (y sus acompañantes), localizador y modificación de datos de alquiler de coche (en caso que lo hayas hecho). Vamos, que puedes dejar sin viajar ese día a es@ "amig@" por un módico precio.

Este "pequeño" problema se mitigaría para alguien que no conociese todos los datos del problema, mediante la implantación de Captchas, mecanismo que hemos recomendado en más de una ocasión en SbD, o mediante un WAF que permita crear reglas de bloqueo por cada X intentos fallidos.


Gracias a Inr0m por su colaboración con las pruebas para este punto (tenía un billete en Ryanair próximamente y lo prestó para las pruebas).

2.- Versión de servidor web Apache muy antigua

Con hacer una simple petición web vía línea de comandos se observa que la versión utilizada es Apache 2.2.9 (publicada en Junio de 2008). Mirando las vulnerabilidades corregidas se puede comprobar que lo más probable es que sea vulnerable al bug de la renegociación SSL.

Como bien detalló Yago allá por Noviembre de 2009, si el servidor web permite renegociar la sesión SSL, bajo ciertas condiciones, podría permitirse a un atacante inyectar texto en el tráfico cifrado entre el cliente y el servidor.
# openssl s_client -connect www.ryanair.com:443
CONNECTED(00000003)
depth=1 /O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=IE/ST=Co Dublin/L=Dublin Airport/O=Ryanair Ltd./OU=MIS/OU=Terms of use at www.verisign.co.uk/rpa (c)05/OU=Authenticated by VeriSign/OU=Member, VeriSign Trust Network/CN=www.ryanair.com
....

.....
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Secure Renegotiation IS NOT supported
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: 61A48C7FBDC41EEE55E51C17DD3800ADC336169BB9077019D271980C90862D00
Session-ID-ctx:
Master-Key: 734E373B5CAA8CDC722F1EDA14157FC2B823197F4B11966D7713891C35E1E88497429E37415271C654105AB903946069
Key-Arg : None
Krb5 Principal: None
Start Time: 1274807031
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---

Pulsamos R para renegociar y....

R
RENEGOTIATING
depth=1 /O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
verify error:num=20:unable to get local issuer certificate
verify return:0

Re-negociación exitosa!


La verdad es que nada más sentarte en el avión, sólo rezas porque no se hayan ahorrado medios en la formación de los mecánicos, pilotos y mantenimiento en general, como en la seguridad de la web y te preparas para recibir una gran dosis de continuo spam.

5 comments :

Unknown dijo...

En cuanto a su propia seguridad a la hora de comprar el billete tampoco están para tirar cohetes.

Para hacer la facturación siempre utilizo la opción del email y lugares de viaje, paso de ponerme a buscar más datos.

Lo del "spam" es "gracioso" pero cuando viajas a países en los que tienen varios idiomas oficiales es aún más molesto.

NaCl u2

Seifreed dijo...

Hola!

Joer... xd Esto es la caña XD
Prometemos ser buenos

Un saludo

Anónimo dijo...

Comprovasteis la seguridad en las cuentas del Banco BBVA donde el usuario solo nesesita su DNI y un numero de 4 digitos para loguearse ? No se como esta la seguridad ahora, pero con el DNI de una persona y ataques por fuerza bruta, saltandote la seguridad de los intentos de logueo por IP y por tiempo, en un par de dias podias tener acceso.

Y nada que decir de los hoteles ... hay hoteles que dan wifi a sus clientes, los famosos hotspot. Con el nombre completo, numero de reserva ( digito de no mas de 9 numeros ) y el numero de habitacion tienes acceso gratis.

Buena entrada =)

Unknown dijo...

Jo Lorenzo, hay que tener mucha maldad para putear a un amigo que se va de vacaciones/viaje y pagar dinero para que llegue al aeropuerto o abra previamente la reserva y se le quede cara de tonto. Es que sólo se nos ocurren malignas ideas. Por cierto yo voy a viajar con Ryanfail en mis próximas vacaciones pero ya no me queda mas que rezar.

Anónimo dijo...

La semana pasada hice un viaje con la misma compañía y en la 2ª opción, los lugares de origen y destino ni si quiera son obligatorios, puedes pasar de ellos indicando tan solo localizador y correo, algo que me sorprendió (para mal, se entiende).