AWS - S3 Unauthenticated Enum
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Un bucket se considera “público” si cualquier usuario puede listar los contenidos del bucket, y “privado” si los contenidos del bucket solo pueden ser listados o escritos por ciertos usuarios.
Las empresas pueden tener permisos de buckets mal configurados que dan acceso a todo o a todos los autenticados en AWS en cualquier cuenta (es decir, a cualquiera). Ten en cuenta que, incluso con tales configuraciones incorrectas, algunas acciones pueden no poder realizarse, ya que los buckets pueden tener sus propias listas de control de acceso (ACLs).
Aprende sobre la mala configuración de AWS-S3 aquí: http://flaws.cloud y http://flaws2.cloud/
Diferentes métodos para encontrar cuando una página web está usando AWS para almacenar algunos recursos:
Usando el plugin de navegador wappalyzer
Usando burp (spidering la web) o navegando manualmente por la página, todos los recursos cargados se guardarán en el Historial.
Verifica recursos en dominios como:
Verifica CNAMES ya que resources.domain.com
podría tener el CNAME bucket.s3.amazonaws.com
Verifica https://buckets.grayhatwarfare.com, una web con buckets abiertos ya descubiertos.
El nombre del bucket y el nombre de dominio del bucket deben ser los mismos.
flaws.cloud está en IP 52.92.181.107 y si vas allí te redirige a https://aws.amazon.com/s3/. Además, dig -x 52.92.181.107
da s3-website-us-west-2.amazonaws.com
.
Para verificar que es un bucket también puedes visitar https://flaws.cloud.s3.amazonaws.com/.
Puedes encontrar buckets forzando nombres relacionados con la empresa que estás pentesting:
https://github.com/jordanpotti/AWSBucketDump (Contiene una lista con nombres de buckets potenciales)
Dado los buckets S3 abiertos, BucketLoot puede buscar automáticamente información interesante.
Puedes encontrar todas las regiones soportadas por AWS en https://docs.aws.amazon.com/general/latest/gr/s3.html
Puedes obtener la región de un bucket con un dig
y nslookup
haciendo una solicitud DNS de la IP descubierta:
Verifique que el dominio resuelto tenga la palabra "website".
Puede acceder al sitio web estático yendo a: flaws.cloud.s3-website-us-west-2.amazonaws.com
o puede acceder al bucket visitando: flaws.cloud.s3-us-west-2.amazonaws.com
Si intenta acceder a un bucket, pero en el nombre de dominio especifica otra región (por ejemplo, el bucket está en bucket.s3.amazonaws.com
pero intenta acceder a bucket.s3-website-us-west-2.amazonaws.com
, entonces se le indicará la ubicación correcta:
Para probar la apertura del bucket, un usuario puede simplemente ingresar la URL en su navegador web. Un bucket privado responderá con "Access Denied". Un bucket público listará los primeros 1,000 objetos que han sido almacenados.
Abierto para todos:
Privado:
También puede verificar esto con el cli:
Si el bucket no tiene un nombre de dominio, al intentar enumerarlo, solo pon el nombre del bucket y no todo el dominio de AWSs3. Ejemplo: s3://<BUCKETNAME>
Es posible determinar una cuenta de AWS aprovechando la nueva S3:ResourceAccount
Clave de Condición de Política. Esta condición restringe el acceso según el bucket S3 en el que se encuentra una cuenta (otras políticas basadas en cuentas restringen según la cuenta en la que se encuentra el principal solicitante).
Y debido a que la política puede contener comodines, es posible encontrar el número de cuenta solo un número a la vez.
Esta herramienta automatiza el proceso:
Esta técnica también funciona con URLs de API Gateway, URLs de Lambda, conjuntos de datos de Data Exchange e incluso para obtener el valor de etiquetas (si conoces la clave de la etiqueta). Puedes encontrar más información en la investigación original y la herramienta conditional-love para automatizar esta explotación.
Como se explica en esta publicación del blog, si tienes permisos para listar un bucket es posible confirmar un accountID al que pertenece el bucket enviando una solicitud como:
Si el error es un “Acceso Denegado”, significa que el ID de cuenta era incorrecto.
Como se explicó en esta publicación del blog, es posible verificar si una dirección de correo electrónico está relacionada con alguna cuenta de AWS al intentar otorgar permisos a un correo electrónico sobre un bucket S3 a través de ACLs. Si esto no genera un error, significa que el correo electrónico es un usuario raíz de alguna cuenta de AWS:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)