← All talks

Leaving Doors Unlocked With Cognito

BSides CDMX16:1526 viewsPublished 2024-10Watch on YouTube ↗
Show transcript [es]

hoy voy a hablar con Samanta un poco de aes cognito y algunas configuraciones de cómo se puede implementar y también Cómo podemos explotar esas configuraciones Bueno vamos a empezar voy a eh presentarme y también a Samanta también vamos a hablar de qué es ao Ciro hablar de esas configuraciones inseguras y finalmente cómo las podemos explotar y también medidas de prevención y al final vamos a tener tiempo para que para preguntas sobre ao escogido también creo que la charla es un poco más cortica que la ahora Entonces nosotros trabajamos en bishop Fox Trabajamos como consultores de seguridad ofensiva Entonces si quieren preguntar cualquier cosa de eso también es es está bien Bueno ent Hola Mi nombre es David

yo soy consultor en en bishop Fox de seguridad ofensiva yo soy americano Pero mis papás son colombianos entonces ahí en la casa y aprendí el español y también con todos los amigos mexicanos acá uno Ahí está aprende un poco también Y quería estar acá para practicar y es realmente un orgullo estar acá en Latinoamérica y y presentar y y hablar con todos ustedes y y conocer toda la gente acá entonces Entonces primero gracias y Y sí yo me enfoco Generalmente en aplicaciones web y en entornos de nu entonces sea jcp nunca he tocado Oracle alibaba Esos también con kubernetes y en términos de aplicaciones web casi cualquier sistema web Ah cualquiera yo soy hincha del Arsenal en

los últimos dos años el nivel de felicidad ha aumentado unos unos dos tres niveles Entonces está es buen es una buenaa para ser in del Arsenal y bueno Eh Mi nombre es amanta sí se escucha bien H allá todos Perfecto Bueno mi nombre es amanta yo también soy consultora de ciberseguridad junto con David y bueno básicamente me dedico a la parte de pen testing a aplicaciones web entornos de nube de repente me ha tocado uno que otro Mobile entonces bueno ahí le hacemos a lo que nos pongan eh dato curioso soy fan de los taquitos si hay una coquito de vidrio involucrada pues qué mejor entonces ahí si alguien gusta invitar tacos después son más que

bienvenidos listo Ahí vamos a empezar Entonces qué es ables cnido cogido es un sistema un servicio que que vende ablos que en general está creado para proporcionar funcionalidad de autenticación realización y gestión de usuarios y también conectar toda esa funcionalidad de usuarios a darles acceso a recursos dentro de WS Entonces si tú tienes todo tu tu aplicación o aplicaciones dentro de WS cnir puede ser un una una buena solución para crear un sistema que puedes tener usuarios y que dejas que esos usuarios pueden acceder recursos y información dentro de W en general está dividido en dos componentes el primer componente son los los user pools o los grupos de usuarios y los identi los user pools se se dedican a

esa funcionalidad de autenticación autorización y la casi tiene más o menos como un base de datos de los users que por ejemplo de pronto encuentras en un base de datos tradicional el user stable Y ese es el componente del userful el está encargado de crear relaciones entre los user pools y diferentes políticas yos y entidades dentro de para conectarse o dar permisos a esos users a diferentes recursos de al Por ejemplo si hay una política que dice Bueno este este rol o esta política le da el permiso para acceder a información de este stre Bucket y puede escribir información y leer información el identity pool está encargado de tener esa ese r y esa relación entre los Us

para que cuando un usuario ingresa con un sistema deiro puede acceder desde comido sistema a esos recursos dentro de la Street Bucket y en general es un sistema solución más o menos buo realmente muchos ingenieros no le gusta el servicio pero más o menos simplifica todo ese proceso de autorización autentificación y a ver bueno y y toda esa parte de acá la ura a la izquierda es como el proceso de autenticación para un usuario y después a el usuario interactuando con los servicios dentro de aos entonces acá al principio un usuario que está definido en la política asociada con esas claves y así es un sistema que más o menos simplifica este proceso Entonces ya que somos expertos

en com vamos a hablar un poco de los user y los las configuraciones unas configuraciones específicas que pueden ser inseguras dependiendo del sistema y del diseño del sistema No necesariamente es inseguro Pero en algunas situaciones s pueden y bueno vamos a empezar por el autoregistro entonces hay una funcionalidad en los user pools donde dejan que usuarios externos pueden registrarse al user crear nuevo usuario si uno va a google.com y crea un nuevo usuario no es necesariamente un problema No no es una no es es algo inseguro pero si con está usando para proteger un un panel interno un panel administrativo que es importante no debe tener esta funcionalidad expuesta o implementada ahí y en esas situaciones puede ser un

problema también los grupos tienen una funcionalidad que es los atributos y los atributos pueden ser mutables o o o no mutables Entonces por ejemplo si uno quiere tener usuarios que tienen más de un un email Entonces si uno pone dos tres emails o de pronto dos emiles Ah sería normal si está mutable si es mutable no es necesariamente un problema pero si el atributo Ah Define el nivel de acceso por ejemplo como un Row o de pronto Ah Define algún alguna verificación Eh puede ser un problema si el usuario lo puede cambiar por ejemplo si un usuario ingresa a la aplicación y tiene este atributo de el nivel de acceso bajo y si ese usuario lo puede

cambiar a nivel administrativo puede ser un problema en la aplicación y finalmente la exposición exposición del client Secret Entonces se genera a veces una una cadena entre dos sistemas cuando se ent a cognito con otros con otros servicios de aos Y ese esa cadena se comparta como un shar sec un secreto compartido Y entonces este secreto a veces eh lo exponen en los recursos del frontend y el problema con eso es que ese secreto es un secreto y es un prerrequisito o para explotar todos estos dos Entonces si uno pone ese secreto en los recursos de frontend ya está más o menos expuesto ya no es un secreto y ya se puede usar para interactuar con todos los diferentes Ah

listo ya se puede interactuar con todos los los appis de Amazon de cognito Bueno ahí se está conectando yo me voy a quedar acá y mover el deito para que no se pasa otra vez listo okay Bueno la la explotación de autorregistro entonces acá vamos a hablar literalmente qué se hace para registrar un nuevo un nuevo usuario y en general sí la exp la exploción explotación es eh registrar un nuevo usuario Eso es todo pero a veces cuando uno se registra también puede acerte cambiar esa eso ese token para las claves de WS Entonces lo primero es Buscar el Ah el client ID y esa cadena si uno está interactuando con Ah una aplicación web que que implementa

cognito vas a ver esa esa cadena en el primer paso ahí que se llama que terminas Amazon cito.com y en ese tráfico vas a ver algo que se va a llamar un client ID ese client ID es un identificado del user pool entonces con esa cadena uno puede intentar a crear un nuevo usuario a veces funciona a veces no A veces tienes que poner más más parámetros y más valores allá no solamente el usuario y la contraseña pero esa es la teoría en general después confirmas el usuario y lo confirmas con un código entonces normalmente el el usuario puede ser un email o de pronto pasas una un número de celular y ahí con el

código lo confirmas y después al final inicias la sesión y Ah el el el app te va a responder con ese token y ese token lo puedes ya si la aplicación no se debe acceder de de usuarios externos Ya pues tienes acceso la aplicación O puedes seguir intentar a buscar el identity ID y ese identity ID es la identificación del identity po Y acuérdate que el identity po es el sistema o el componente debl es de cono que se encarga de relacionar permisos dentro de WS con los usuarios Entonces con eso uno puede recibir con el token y ese identity ID puede recibir las claves de un Row dentro de WS y después interactuar directamente con los de

Amazon y pues ya un casi no está comunicando con la aplicación ya solo es con la las lpis de Amazon listo y para los atributos mutes acá en general la metodología es identificar Cuáles son los atributos y intentar amarlos y ver qué pasa cómo reacciona la aplicación Entonces por ejemplo hace una semana o de pronto dos tres semanas un compañero estaba trabajando en una una aplicación Y usaba cnito y la aplicación tenía atributos y los mos de los atributos era una verificación para para una compañía financiera y esta y esa verificación era más o menos importante entonces ahí investigamos encontramos Cuál es el nombre del atributo y intentamos cambiar el valor de no así y

al final lo cambiamos y después ingresamos a la aplicación con el usuario de nuevo y ahí se vio Ah okay Ya estamos verificados entonces ahí podemos hacer un bypass crear un problema y al final ayudar al cliente para resolverlo y prevenir eso en el Entonces esto pasa y acá literalmente que se hizo el nombre del valor del atributo es diferente no era brother er algo más pero el valor usamos el valor y el token era el token que uno recibe cuando ingresa a la aplicación y la región Y sí la región fue algo que se vio en el tráfico listo finalmente eh la exp del client Secret Y entonces el client Secret es ese esa cena que es Es un

secreto y es compartida entre el sistema de congnito El user pool y otro otra aplicación que se integra con aito con el user po Y entonces cuando esto existe normalmente existe cuando hay otros servicios como Open Search que es como un que también vende y se puede integrar con cido para proteger el panel administrativo Este esta cadena se genera y esta esta cadena después se necesita para explotar todas las otras los otros vector que mostré anteriormente entonces a veces se encuentra los recursos de Front end y pues Búscalo míralo y pronto existe pronto no Y si existe y lo puedes encontrar después puedes atacarle el sistema con los otros vectores que mostramos bueno ahora Samanta va hablar

vamos a pasar a la parte de iden Pool Ah gracias eh nos vamos a pasar a la parte de identity Pool y como decíamos una vez que el usuario ya está registrado en el ambiente el identity pool nos va a permitir acceder a los distintos servicios dentro del ambiente de aws entonces aquí vamos a ver algunas de las posibles configuraciones que al explotarse nos pueden dar un acceso elevado o podemos ganar más recursos de los que actualmente tenemos el primero de ellos sería accesos no autorizados dentro de la configuración vamos a tener un apartado de una cuenta invitado o una cuenta guest Esta cuenta invitado o guest literalmente lo que va a hacer es permitir que nos conectemos al sistema

sin tener una usuario eh Ya registrado previamente de ahí otra de las configuraciones comunes o de lo que más nos encontramos al explotar este tipo de ambientes son roles o políticas en la parte de aay con permisos excesivos es decir que de repente el administrador crea su política customizada pero esa política permite que hagas absolutamente todo no como que no se quiere quebrar la cabeza y dicen que pase todo y finalmente muy similar a lo que veíamos con la parte del user pool aquí otra de las malas eh configuraciones podía la exposición pero en este caso del identi no que nosotros identifiquemos este valor que igual al utilizarlo nos permita explotar eh Por ejemplo la parte

de los accesos no autorizados vamos a ir revisando uno por uno entonces Vámonos con el primero que sería la parte de acceso no autorizado para poder nosotros explotar esta parte mencionábamos es necesario que tengamos ya el identificador de la identity pool entonces aquí nosotros lo podemos Buscar ya sea a través del Front end lo podemos Buscar a través del tráfico de la red y una vez que lo encontremos ya lo podemos utilizar con nuestro Comando de aws para poder loguear de una forma eh utilizando una cuenta gest o una cuenta invitado por otro lado mencionábamos el tema de las políticas bastante expuestas o bastante abiertas aquí tenemos dos ejemplos bastante simples por un lado tenemos la parte del Amazon eh est

buckets con un full Access donde básicamente lo que nos está diciendo es que a cualquier Bucket de S3 vamos a poder acceder de cualquier forma vamos a poder llevar a cabo cualquier acción sobre cualquier Bucket que se encuentre en el ambiente entonces un atacante que tenga acceso a este rol pues prácticamente va a poder acceder modificar o hacer cualquier cosa con la información que se encuentra en los Pockets si la organización está guardando ahí información sensible Pues bueno Esto va a Elevar la criticidad del ataque y lo mismo aquí ponemos otro ejemplo para la parte del Secret manager r and right que lo mismo para la parte del Secret manager vamos a permitir todas las acciones en cualquier recurso

asociado a la parte del cet manager Entonces como les decía esto es muy común de verlo en la mayoría de las organizaciones sobre todo cuando ellos intentan personalizar eh justamente como sus políticas hay ambientes en los que son un poco manejables por el tamaño que es un po reducido Pero conforme va creciendo el ambiente de la nube de repente van teniendo políticas cada vez más abiertas no de ya no me funcionó pues agrego todos los permisos todas las políticas para ver si así funciona y eh finalmente tenemos la parte del identity P ID eh Como decíamos aquí eh La idea es que no esté expuesto que no sea tan fácil de encontrar si bien es necesario

para el funcionamiento pues eh tratar como de resguardarlo que no lo podamos acceder directamente en el frontend que no pueda ser capturado a través del tráfico de la red y bueno si nosotros desde el punto de vista de atacante o del pentester lo encontr ya sabemos que nos va a ser muy útil para ejecutar ya sea de accesos no autorizados o todo lo que veíamos en la parte del Y bueno ya nada más como para ir finalizando en este caso tenemos una serie de medidas de prevención básicamente es configurar bien el ambiente no con eso podríamos cerrar pero punto número uno decíamos la parte del autorregistro en el tema del user pool Pues bueno aquí deshabilitado para

que un usuario no se pueda registrar el solito sino que tenga que haber un control o un proceso para que se pueda registrar igual en apartado de los atributos evitar que sean notables es decir que un usuario no sea capaz de modificar sus propios atributos sino que tenga que ser un administrador o igual mediante un control que se hagan todas estas partes de los cambios eh Deshabilitar la parte de los accesos limitados o autenticados las cuentas de G para que forzosamente se tengan que loguear utilizando credenciales al sistema y en el tema de las políticas por favor revisen bien sus políticas pongan los mínimos privilegios no pongan cosas demás si no funciona la política revísela bien Por qué no está

funcionando no abran todo nada más ahí por abrirlo y bueno eh otra cosa como muy importante que vimos que de aquí depende muchos de los ataques es limitar la exposición de los identificadores de de configuración tanto para la parte del user pool como para la parte del identity pool no entonces ya vimos que estos parámetros son muy importantes y sí nos ha tocado verlos de repente por ahí rondando en la red rondando en el frontend de repente en el backend haciendo revisión de código entonces bueno tratar de resguardarlos lo más posible y pues configurar bien el ambiente eh aquí les dejamos algunos recursos donde ustedes pueden encontrar más información al respecto por si se quieren como adentrar un poquito más en

la parte de cnido cómo funciona eh temas de elevación de privilegios eh con recursos bastante útiles y Eh bueno eso sería todo de nuestra parte Muchas gracias por su atención Aquí les dejamos nuestros contactos por cualquier duda que tengan Igual vamos a andar por aquí