Galería de Fallos en Unicornios

Galería de Fallos en Unicornios

Digital Summit 2017, Buenos Aires, Argentina

C0999631eb2c54a20ee559c44f8c7080?s=128

andresriancho

June 29, 2017
Tweet

Transcript

  1. Galería de Fallas de Seguridad en Unicornios Digital Summit

  2. /me • Experto en seguridad en aplicaciones (web|API) • Desarrollador

    (Python!) • Open Source evangelist • Lider de proyecto w3af • Consultor Independiente
  3. Seguridad ofensiva +10y experiencia

  4. Agenda • Comprometer cuentas de Facebook • Uber ◦ Comprometer

    cuentas ◦ Viajes gratis ◦ SQL injection • Lectura de archivos arbitrarios en WhatsApp • Ejecución de comandos en X • Bug bounties • #ItAffectsMe • Preguntas
  5. facebook.com

  6. Password reset • Las funcionalidades de password reset son muy

    sensibles y, en algunos casos, inseguras. En este escenario la vulnerabilidad más buscada es cambiar la contraseña de un usuario arbitrario. • En general la funcionalidad de password reset se implementa así: ◦ Usuario inicia el proceso ingresando su dirección de email ◦ Aplicación envía un token generado al azar al email del usuario ◦ Usuario prueba su identidad enviando el token a la aplicación y cambia su contraseña
  7. Implementación de Google

  8. Implementación de Facebook

  9. None
  10. None
  11. None
  12. Soluciones • Utilizar tokens más largos: 128 chars [a-zA-Z0-9] •

    Implementar límite de tres intentos para cada proceso (AVoywo13) de password reset POST /recover/as/code/ HTTP/1.1 Host: beta.facebook.com lsd=AVoywo13&n={code}
  13. None
  14. Password reset En general la funcionalidad de password reset se

    implementa así: ◦ Usuario inicia el proceso ingresando su dirección de email ◦ Aplicación envía un token generado al azar al email del usuario ◦ Usuario prueba su identidad enviando el token a la aplicación y cambia su contraseña Cuales son las Top 3 peores fallas que pueden existir en este proceso?
  15. Password reset #FAIL POST /password-recovery/start HTTP/1.1 Host: api.uber.com {"email": "andres@andresriancho.com"}

    HTTP/1.1 200 OK Content-Type: application/json {"message": "Email sent", "token": "0c33cb0b-b521-462f-b34c-f03f2fadd4c3"}
  16. None
  17. None
  18. Reserva un Uber POST /api/dial/v2/requests HTTP/1.1 Host: dial.uber.com {"start_latitude":12.925151699999999, "start_longitude":77.6657536,

    "product_id":"db6779d6-d8da-479f-8ac7-8068f4dade6f", "payment_method_id":"563d569b-b598-4cf4-88c1-94a56bd4d73c"} Durante un proceso de reserva de un auto de Uber se envían múltiples peticiones HTTP desde la aplicación mobile a la REST API. Una de esas peticiones está asociada al pago:
  19. Viaja gratis POST /api/dial/v2/requests HTTP/1.1 Host: dial.uber.com {"start_latitude":12.925151699999999, "start_longitude":77.6657536, "product_id":"db6779d6-d8da-479f-8ac7-8068f4dade6f",

    "payment_method_id":"xyz"} En algunos casos el manejo incorrecto de excepciones o casos de borde terminan mal. En esta vulnerabilidad vemos como el manejo del caso "no se encontró el método de pago" termina en no cobrar el viaje:
  20. None
  21. SQL injection / Not So Bad Hackers detectaron una vulnerabilidad

    de SQL injection en ts02.uberinternal.com 1. Fuera del datacenter de Uber 2. Aplicación desarrollada por un tercero: appliance para análisis de riesgo 3. Contiene informacion (no tan sensible) sobre empleados de Uber
  22. No budget • Todas las aplicaciones van a ser atacadas

    • Eventualmente los atacantes van a identificar vulnerabilidades y explotarlas • No hay suficiente presupuesto: priorizar
  23. None
  24. Vuln trivial en WhatsApp Web

  25. #FAIL

  26. Análisis de Riesgos Esta vulnerabilidad parece bastante seria, que podría

    hacer un atacante con ella?
  27. None
  28. Misma vulnerabilidad, riesgo menor

  29. None
  30. Repositorio SVN en sitio productivo Una vez detectado que en

    el sitio productivo se encuentra disponible la metadata de SVN en el directorio .svn es posible bajarse el código: Con acceso al código el atacante es trivial detectar otras vulnerabilidades. svn co http://www.pornhub.com/.svn/trunk
  31. None
  32. Luego de investigar y probar... Fue posible para el atacante

    identificar: • URL del servidor donde hostean el código y se realiza el desarrollo • Usuario stefan • Por medio de fuerza bruta, contraseña para el usuario stefan: 123456 Con estas credenciales el atacante podría haber realizado modificaciones sobre el código de la aplicación Web, posiblemente para capturar tarjetas de crédito en la sección de pago de suscripciones.
  33. None
  34. Que es un bug bounty?

  35. Vulnerabilidades reportadas https://goo.gl/IpGiU 3

  36. None
  37. Muchas gracias!

  38. For hire ¿Necesitas alguno de estos servicios? • Application Penetration

    Test • Secure Coding Training for Developers • Source Code Review • Cloud Security Assessment Escribime, puedo ayudarte a desarrollar y mantener seguras tus aplicaciones web.