26 marzo 2012

¿Arruinamos a WhatsApp?

Después de los distintos post sobre la inseguridad de esta aplicación que han venido haciendo los compañeros de SecurityByDefault, hago este pequeño artículo que explica la posibilidad de realizar envíos masivos de SMS empleando la plataforma que brinda WhatsApp.

El mantener una plataforma de mensajería abierta y gratuita, cuesta mucho dinero. Si a esto se le suma provocar un gasto no contemplado de manera constante, podría acabar con el modelo de negocio que tienen a día de hoy.

Cuando un cliente se instala por primera vez la aplicación, o bien cambia de terminal, este tiene la obligación de solicitar un código de seguridad para verificar que ese número de teléfono es el correcto y prevenir un ID Spoofing.


La URL empleada para la solicitud del código es la siguiente:
https://r.whatsapp.net/v1/code.php?method=sms&to=34600000000&in=600000000&cc=34&mcc=000&mnc=000 

Se especifica en la primera variable "to=" el número de teléfono con el prefijo internacional (34 para España), y en la segundo "in", sin el prefijo. En "cc=" volvemos a poner el prefijo, y las variables "mcc/mnc" son datos de la operadora telefónica y las dejaremos a cero-cero-cero.

Con la creación de un script muy básico, se puede realizar un envío a los 10 millones de teléfonos móviles españoles que tienen WhatsApp instalado.

Empresas como esta, emplean pasarelas de envío de SMS a un precio mucho más bajo del establecido por las operadoras de telefonía, con lo que si el precio que paga esta empresa por SMS lo situamos en 0,01€, cada vez que ejecutemos el script, provocaríamos un gasto de 100.000 euros. En realidad, seguro que pagan mucho menos dinero por SMS, pero también tenemos la posibilidad de enviar muchos más SMS de manera global a otros países, tan sólo valdría con cambiar el prefijo...

Código del script realizado por @chencho:



Este script nos generará un fichero DATA, donde veremos a qué teléfonos les ha llegado el SMS con el Status "success-sent" o bien han fallado por demasiados intentos en un corto espacio de tiempo y no se enviará.

No se ha llegado a probar sobre un escenario real, ya que posiblemente se banearía la dirección IP. Esto no deja de ser una prueba de concepto, y por tanto me exonero de toda responsabilidad por su mal uso, ya que podría haber serios problemas legales.

De hecho, antes de la publicación de este artículo, se ha informado debidamente al Grupo de Delitos Telemáticos de la Guardia Civil,  que ha trabajado de manera impecable dando a conocer a WhatsApp este problema en tiempo récord para una solución lo más rápida posible.

A día de hoy la vulnerabilidad sigue existiendo, por lo que una vez más, la seguridad de esta aplicación y  su gestión de incidencias quedan en evidencia.

Al final van a tener que poner el WhasApp de pago...
------------------------------------------------------------------------------------------------
Artículo cortesía de Omar Benbouazza Villa

24 comments :

JnJ dijo...

Hola

Cuando te refieres a "que ha trabajado de manera impecable dando a conocer a WhatsApp este problemas" ¿como sabes esto? ¿has recibido algún feedback por su parte o algún tipo de notificación por defecto por parte de GDT?

Saludos

Jose Selvi Sabater dijo...

Hace tiempo, cuando estuve hablando con los de WhatsApp por el ID Spoofing que les saqué yo, recuerdo que les hice un par de recomendaciones de corrección, y entre ellas les dije que tuvieran presente esto, pero parece que me hicieron poco caso :P

omarbv dijo...

Han dado feedback en todo momento. La verdad es que estoy muy contento con la implicación que ha tenido GDT. Lástima que luego Whatsapp nos ignore a todos...

RaiSe dijo...

Hola. ¿Las URL's cómo las has sacado?, yo he estado mirando el apk de Android y todos los strings van ofuscados con XOR's pseudoaleatorios (cada bloque de cadenas va con un XOR diferente). Probé a examinar el tráfico pero whatsapp verifica el certificado SSL del servidor donde se conecta, también probé con un debugger de java pero era muy tedioso. Mi pregunta es: ¿en el whatsapp de iOS puedes sacar todos los strings de una forma sencilla?. Un saludo y enhorabuena por los posts.

Alejandro Ramos dijo...

Imagino que habrá algún método similar en Android al que comentamos aquí mismo para entrucharle al móvil una CA de un proxy.

En IOS salía la URL en el proxy directamente..

RaiSe dijo...

Vaya, no habia leído el artículo del proxy jeje. Yo lo único que había probado era a poner un servidor web en local con HTTPS y redirigir el tráfico, pero whatsapp se desconectaba porque me imagino que solo acepta su propio certificado o solo certificados válidos (cuando depuré el whatsapp juraría que llamaba a una función para comprobar un certificado en concreto). Probaré lo del proxy en Android a ver si chuta. Gracias :-).

JJ dijo...

Hola, 

el post es muy curioso y al mismo tiempo muestra que ustedes son realmente competentes, sin embargo, estoy en contra o por lo menos algo decepcionado con la forma en la que han publicado este último post. 

Creo que el titulo resulta agresivo y que hay otras formas de decirlo y por otra parte estas cosillas se pueden comunicar con un correo a algún email de contacto de WhatsApp. No quiero que me malinterpreten ni que piensen que estoy en contra, me encanta este blog y lo visito cada día pero la forma en la que entre todos afrontemos este tipo de artículos dice mucho de nuestro gremio.

Un saludo.

Yago Jesus dijo...

 Hola JJ, creo, sinceramente, que eres profundamente injusto en tu valoración.

Omar se puso en contacto con las fuerzas de seguridad del estado (la Guardia Civil) para comunicar la gravedad del hallazgo, la Guardia Civil intentó ponerse en contacto con WhatsApp para comunicar el problema e intentar que se solucionase, WhatsApp (como es costumbre) ignoró dicho problema.

Lo único reprobable de todo esto es la indolencia y pasividad de WhatsApp a la hora de gestionar incidentes de seguridad. Anteriormente les hemos reportado un buen número de cosas y o bien no ha habido respuesta o cuando la ha habido ha sido bastante maleducada.

Vitoces dijo...

Para gestionar las CA en Android existe la aplicación CACertMan.

Román Ramírez dijo...

De hecho, mi más sincera enhorabuena.

Creo firmemente que una vez cumplido el primer paso por parte del investigador de seguridad, notificar y alertar a los implicados, el segundo, si la respuesta es "silencio administrativo", es publicarlo claramente y con todas las consecuencias del "full-disclosure" exponiendo las malas prácticas y peores gestiones.

Ya hemos aguantado durante demasiado tiempo el "juego" de los fabricantes y proveedores que, por su negligencia, luego intentan "culpabilizar" al investigador que expone sus vergüenzas. Un tratamiento RESPONSABLE de una vulnerabilidad es aceptarla, reconocerla y darle luego crédito al investigador con un enorme agradecimiento (señores, que les están haciendo el trabajo que ustedes no hacen en su ciclo de vida).

Que este tipo de cosas no se publiquen a los únicos que perjudica es a nosotros como consumidores, porque si por los fabricantes o prestadores de servicios fuera viviríamos en el secretismo más absurdo (lo que les permitiría arrastrar la situación el tiempo que fuera necesario sin reparar la vulnerabilidad).

JJ dijo...

Ruego perdonen mi actitud y mi comentario, no estaba del todo informado y la culpa es absolutamente mía. Aprecio el trabajo realizado por el equipo de Security by Default y el comportamiento que ha tenido.

Desconocía la comunicación con la Guardia Civil y con WhatsApp.Un saludo y de nuevo siento mi actitud y comentario anterior.

Yago Jesus dijo...

No te preocupes, todos cometemos lapsus. No tiene la menor importancia.

Un saludo !

Anónimo dijo...

Pues yo no creo que el primer post de JJ estuviera mal. El tono del articulo es agresivo, y el "fallo de seguridad" no afecta a los usuarios, a no ser que recibir sms signifique un grave problema de seguridad, que si lo es, tengo que llamar a mi proveedor de comunicaciones porque me envia sms de vez en cuando. Quizas Whatsapp ha hecho cosas mal, pero nadie puede negar que han cambiado un modelo que hacia que las operadoras cobraran un precio alto por algo tan simple como es un SMS... pensar que alguien aprovecharia ese fallo de seguridad para arruinar a Whatsapp, que con su programa nos ha permitido ahorrar mucho dinero a todos, me parece que seria algo injustificado y no podria mas que mostrar mi desprecio a todos los implicados en ese ataque. Hay empresas arrogantes, que quizas se merezcan un full disclosure, per no me parece que Whatsapp sea una de ellas, y que tarden en solucionar el problema no justifica que lo hagais publico, porque si realmente alguien se carga la plataforma whatsapp con vuestro ataque, y cambia el modelo por uno de pago, os aseguro que seremos unos cuantos millones de usuarios "agradecidos" por vuestra labor.

Pedro Perez dijo...

Que se encuentren este tipo de cosas está muy bien, que vuestra página se haga eco y publicite un script para enviar esos mensajes de manera masiva me parece una falta absoluta de ética. Luego nos quejamos cuando determinadas empresas comienzan a cobrar por sus servicios.

Román Ramírez dijo...

Hablando por experiencia propia y directa, cuando ves que un fabricante o proveedor ignora sistemáticamente los avisos que los investigadores de seguridad le dan, lo que no se puede hacer es seguirle el juego.

La postura que tenemos muchos a favor de la publicación clara e íntegra de los detalles de seguridad ("Full-disclosure") es, en muchas ocasiones, la única manera que tiene un profesional responsable de asegurarse de que se hagan esfuerzos para reparar vulnerabilidades que, en última instancia, siempre afectan a los consumidores y usuarios. Y, a veces, ni con esa publicación se consigue que la organización responsable del problema asuma que debe solucionarlo y dar respuesta a las notificaciones de los investigadores.

Más grave es que se involucren organismos como pueden ser las Fuerzas y Cuerpos de Seguridad del Estado y se mantenga esa postura de silencio administrativo.

No hay absolutamente nada criticable en la postura de comunicación que ha seguido este medio de publicación, visto el recorrido de este problema.

En cambio yo me hago preguntas sobre cómo encajan este tipo de problemas con las diversas reformas del código penal (donde se deja claro que las empresas ya no pueden evadir las responsabilidades que pueden tener sobre los problemas que su mala praxis genere) o, incluso, con las condiciones que deben cumplir empresas cotizadas (las normas de la SEC, por ejemplo, son especialmente claras en cuanto a informar de los problemas de seguridad).

Basta ya de jugar a la oscuridad. Si los fabricantes, proveedores o prestadores de servicios no se comportan de forma responsable, somos muchos los que de forma clara y directa declaramos que consideramos perfectamente correcto (tanto moral, como profesional como técnicamente) la publicación de los detalles que estos irresponsables prefieren obviar.

Yo dijo...

La pregunta del millónes ¿Y cómo se programa de forma segura que no te puteen la pasarela de envío de SMS? En algún momento has de enviar el número de teléfono para la verificación a algún sitio y éste te ha de responder.

Imagino que al cabo de X solicitudes baneará la IP o admitirá un máximo de solicitudes por tiempo e IP, pero no deja de ser un sistema "malo".

¿Cómo arreglaríais vosotros esto? ¿Siendo el cliente el que deba enviar el SMS? Esto ya habéis demostrado que es ineficaz.

De todas las vulnerabilidades que habéis publicado, esta no me parece "grave", de hecho, no le veo posible solución salvo mitigar el ataque.

omarbv dijo...

La pregunta del millón es sencilla, actualizando la aplicación y modificando el sistema que hay ahora mismo. Que se haga por fin una versión de Whatsapp donde no seamos capaces de ver todas las consultas que hace al servidor...

Respecto a la segunda... "me da la impresión" de que no banean absolutamente nada. Si solo se permitiesen X peticiones desde la misma IP en un periodo de tiempo, estaría resuelto a corto plazo hasta sacar una nueva versión de Whatsapp.

Sinceramente, a mi se me parece grave perder 100.000€ o los que sean... 

Chemalarrea dijo...

Como se hace programando en android para "ofuscar" los strings?

Car32x dijo...

Desde luego que este articulo deja en evidencia a Whatsapp y ademas da hasta un poco de miedo la falta de seguridad de estas aplicaciones, en fin esta aplicacion es para lo que es: Hola quedamos mañana y no para: Oye te mando mi numero de cuenta ;-). Saludos.

SiD dijo...

Punto y final.

RaiSe dijo...

 Debieron usar algún plugin/librería que lo hace automáticamente, al final se saca el algoritmo mirando dentro del APK, pero es un rollo porque cada string va con XOR's diferentes y tienes que andar mirando qué valores son para cada string, etc.

RaiSe dijo...

 Al final conseguí hacerlo en Android, pero no configurando el propio SO para que usase un proxy porque whatsapp (y todas las aplicaciones a excepción del navegador creo) pasaban del proxy. Hubo que redireccionar todo el tráfico al proxy transparente con iptables, y para meter el CA también fue un poco rollo, hubo que modificar un fichero de /system (menos mal que era en el emulador porque el móvil no lo tengo ni rooteado).

Probé una versión del whatsapp actualizada, yo pensaba que habrían metido comprobar el certificado exacto de r.whatsapp.net pero se ve que no.

antars dijo...

Yo pienso que la plataforma de envío de sms tendrá algún límite de envíos, seguro, para evitar gastos como este de 100.000€ de golpe, o se le enviara un aviso a whatsapp llegado cierto número de envíos y se paralizará temporalmente el envío o algo así.
Es lo que debería tener cualquier aplicación de este tipo, para evitar catástrofes o similares.

kinti dijo...

Aquí teneies como usar Whatsapp en php para ponerlo en las webs y scripts.
http://tutorialesraspberry.blogspot.com/