- AWS introdujo una nueva protección de espacio de nombres basada en cuentas para resolver el problema de S3 bucketsquatting
- El nuevo espacio de nombres usa el formato
<prefix>-<accountid>-<region>-an, y solo la misma cuenta puede crear un bucket con ese nombre
- Si otra cuenta intenta usar el mismo nombre, se produce el error
InvalidBucketNamespace; el mismo error también se devuelve si se especifica una región incorrecta
- Se recomienda usar este espacio de nombres por defecto, y puede aplicarse de forma obligatoria en políticas organizacionales (SCP) con la clave de condición
s3:x-amz-bucket-namespace
- No se aplica de forma retroactiva a los buckets existentes, pero ofrece una protección sólida para los buckets nuevos, lo que representa una mejora fundamental en la arquitectura de seguridad de S3
Resumen del problema de bucketsquatting
- Bucketsquatting (o Bucketsniping) es una forma de ataque que aprovecha que los nombres de buckets en AWS S3 son globalmente únicos
- Cuando un bucket se elimina, su nombre vuelve a quedar disponible, por lo que un atacante puede registrar un bucket nuevo con ese mismo nombre
- Esto puede provocar riesgos de acceso a datos sensibles o interrupciones del servicio
- Las organizaciones solían usar con frecuencia convenciones de nombres predecibles como
myapp-us-east-1, lo que aumentaba la exposición a este tipo de ataques
- Incluso equipos internos de AWS se vieron afectados por este problema, y durante unos 10 años trabajaron junto con el equipo de seguridad de AWS para encontrar una solución
Nuevo espacio de nombres de S3
- AWS introdujo el concepto de espacio de nombres por cuenta (account namespace) para resolver el problema
- Formato:
<prefix>-<accountid>-<region>-an
- Ejemplo:
myapp-123456789012-us-west-2-an
- Este espacio de nombres restringe la creación del bucket con ese nombre a la cuenta correspondiente
- Si otra cuenta intenta crear el mismo nombre, aparece el error
InvalidBucketNamespace
- El mismo error también se devuelve si la región del nombre del bucket no coincide con la región real
- AWS recomienda usar este espacio de nombres por defecto en todos los buckets nuevos
- A diferencia de espacios de nombres existentes como
.mrap, --x-s3, -s3alias, esta vez se introdujo como un espacio de nombres para usuarios generales con fines de seguridad
Aplicación y gestión de políticas
- Los administradores de seguridad pueden usar la clave de condición
s3:x-amz-bucket-namespace para exigir el uso del espacio de nombres mediante políticas organizacionales (SCP)
- No se aplica automáticamente a buckets existentes ni a plantillas sin espacio de nombres
- Para proteger buckets existentes, es necesario crear un bucket con el nuevo formato de espacio de nombres y migrar los datos
- Con esta medida, el bucketsquatting está en la práctica “desapareciendo”, y los buckets nuevos reciben protección completa
Enfoque de otros proveedores de nube
- Google Cloud Storage (GCS) ya usa un espacio de nombres basado en verificación de nombres de dominio
- Los buckets con formato de dominio como
myapp.com solo pueden ser creados por el propietario del dominio
- En buckets que no usan formato de dominio, sigue existiendo la posibilidad de bucketsquatting
- Azure Blob Storage usa una estructura de nombre de cuenta de almacenamiento + nombre de contenedor
- Como el límite máximo es de 24 caracteres, el espacio de nombres es más reducido y podría ser más vulnerable al mismo problema
Conclusión (tl;dr)
- AWS S3 incorporó un nuevo espacio de nombres de cuenta y región
- Este espacio de nombres previene ataques de bucketsquatting y se recomienda usarlo siempre al crear buckets nuevos
- Los buckets existentes no quedan protegidos automáticamente, así que, si es necesario, conviene reforzar la protección mediante migración de datos
1 comentarios
Opiniones de Hacker News
Recientemente descubrí que no se puede reutilizar la dirección de correo del usuario root incluso después de eliminar una cuenta de AWS
Alguien de nuestra organización creó el usuario root de una cuenta cerrada con el correo principal de la empresa, y luego creó una cuenta nueva con otro correo, pero ahora ya pasó incluso el período de recuperación tras la eliminación
Como resultado, ese correo quedó ligado permanentemente a la cuenta root eliminada, así que ya no fue posible iniciar sesión por SSO mediante un IdP externo
Contactamos al soporte de AWS, pero casi no nos ayudaron
La contraseña estaba documentada, pero no había forma de desactivar el MFA, así que contactamos a soporte de AWS, al ejecutivo de cuenta y a otros, pero no se pudo resolver
Al final, el acceso a la cuenta root quedó bloqueado, y existe la posibilidad de que tengamos que migrar todo un entorno complejo a una cuenta nueva
AWS reconoce los correos con signo más como direcciones distintas
Lo ideal es usarla solo cuando ocurra un problema realmente grave
Al final, si algún phishing logra engañar al equipo de soporte al cliente y consigue una calificación de 10 puntos, todo podría venirse abajo
Me gustaría saber qué mecanismo es el que realmente impide su uso
Parece que el autor entendió mal el concepto de account name en Azure Blob Storage
En la práctica está al mismo nivel que el nombre de bucket en S3, debe ser globalmente único y sigue siendo una gran molestia
Sobre todo porque el límite de longitud es de 24 caracteres, lo que lo hace aún más frustrante
Ojalá Microsoft también introduzca un namespace por cliente, como AWS
Pero por las limitaciones del diseño inicial no pudieron cambiarlo
Personalmente, no entiendo por qué todavía no han creado una API S3 v2
Podrían haber impulsado una migración gradual con una API nueva, pero al final tanto clientes como ingenieros siguen sufriendo innecesariamente
así que solo se pueden usar números y minúsculas, lo cual es muy incómodo
Ojalá al menos permitiera guiones, como S3 o GCS
Otros recursos, como el registry de contenedores, tienen el mismo problema
Pienso que para nombres de paquetes, buckets, cuentas de GitHub y similares podría usarse un formato como el de Discord: @nombre-4dígitosaleatorios
Así se democratiza el espacio de nombres y se evitan los ataques de squatting o reutilización
Cuando una cuenta se elimina, se puede descartar el nombre completo y listo
La razón se explica en el anuncio oficial:
era incómodo tener que recordar 4 dígitos y además distinguir mayúsculas y minúsculas
Sobre todo en apps de chat, lo más limpio es usar un ID interno y dejar que el usuario use solo un alias
En el caso de los buckets, como lo importante es que el nombre sea fácil de leer para humanos, me parece mejor usar tu propio dominio
Más bien aumenta el riesgo de errores de escritura
En las comunidades en línea es natural que haya nombres repetidos,
así que me pregunto por qué se insiste en forzar nombres globalmente únicos
Gracias a Ian Mckay por el artículo
Es un buen cambio que AWS haya introducido oficialmente un namespace por cuenta y región
Sería aún mejor si herramientas IaC como Terraform adoptaran esta regla como valor predeterminado
Terraform ya agrega un sufijo hash aleatorio al final del nombre del bucket para evitar colisiones
También hay información relacionada en el blog oficial de AWS
Es interesante el ataque de bucket squatting que ocurre cuando los proveedores de nube usan nombres de bucket predecibles para espacios internos temporales
En AWS el ataque real era difícil por los hashes, pero GCP tuvo problemas de este tipo incluso recientemente
Presentación relacionada: charla de DC32 sobre bucket squatting en AWS,
vulnerabilidad en GCP: CVE-2026-1727
En cuanto vi que los nombres de bucket eran predecibles, intuía el riesgo
Con la combinación de bucket squatting + bucket público + problema TOCTOU de CloudFormation,
sí se podía llegar a desplegar recursos en otra cuenta
Sorprende que el equipo de seguridad de AWS no lo haya detectado antes
Los nombres DNS tienen un problema parecido
Si no renuevas el dominio, alguien puede volver a registrarlo
y configurar registros MX para interceptar correos de restablecimiento de contraseña y similares
Los buckets de AWS todavía ofrecen funciones especiales solo cuando su nombre coincide con el hostname
Documentación relacionada: Virtual Hosting in S3
Un nombre no debe ser igual al objeto que designa
Si el nombre se reutiliza, pasa a señalar algo completamente distinto,
y su significado cambia según el contexto
Solo puede considerarse el mismo si uno mismo vuelve a asignar ese nombre
Me preguntaba si exponer el ID de cuenta representa un riesgo de seguridad
Según la documentación oficial,
debe tratarse con cuidado, pero no se considera información sensible
Mientras no se exponga demasiado, no hay problema
En las reglas de IAM el atacante puede usar
*, así que al final lo importante es cómo configura las políticas el lado defensorSi lo decodificas en base32, puedes extraer el Account ID
Referencia: análisis relacionado
Que S3 haya usado solo el nombre del bucket como clave de acceso fue una de las decisiones de diseño más irritantes