- AWS a introduit une nouvelle protection d’espace de noms basée sur le compte pour résoudre le problème de bucketsquatting sur S3
- Le nouvel espace de noms suit le format
<prefix>-<accountid>-<region>-an, et seul le même compte peut créer un bucket portant ce nom
- Si un autre compte tente d’utiliser le même nom, une erreur
InvalidBucketNamespace se produit ; la même erreur est également renvoyée si la région indiquée est incorrecte
- L’utilisation de cet espace de noms est recommandée par défaut, et son application peut être imposée via une politique d’organisation (SCP) avec la clé de condition
s3:x-amz-bucket-namespace
- Cela ne s’applique pas rétroactivement aux buckets existants, mais offre une protection forte aux nouveaux buckets, ce qui représente une amélioration fondamentale de l’architecture de sécurité de S3
Vue d’ensemble du problème de bucketsquatting
- Le bucketsquatting (ou bucketsniping) est une forme d’attaque qui exploite le fait que les noms de buckets AWS S3 sont globalement uniques
- Lorsqu’un bucket est supprimé, son nom redevient disponible, ce qui permet à un attaquant d’enregistrer un nouveau bucket avec le même nom
- Cela peut entraîner des risques d’accès à des données sensibles ou d’interruption de service
- Les organisations utilisent souvent des règles de nommage prévisibles comme
myapp-us-east-1, ce qui augmente leur exposition à ce type d’attaque
- Les équipes internes d’AWS ont également été touchées par ce problème, et ont travaillé avec l’équipe sécurité d’AWS pendant près de 10 ans pour trouver une solution
Introduction du nouvel espace de noms S3
- Pour résoudre ce problème, AWS a introduit le concept d’espace de noms par compte (account namespace)
- Format :
<prefix>-<accountid>-<region>-an
- Exemple :
myapp-123456789012-us-west-2-an
- Cet espace de noms limite la création d’un bucket portant ce nom au seul compte concerné
- Si un autre compte tente de créer le même nom, une erreur
InvalidBucketNamespace se produit
- La même erreur est également renvoyée si la région du nom de bucket ne correspond pas à la région réelle
- AWS recommande d’utiliser cet espace de noms par défaut pour tous les nouveaux buckets
- Contrairement aux espaces de noms existants (
.mrap, --x-s3, -s3alias), celui-ci est introduit comme un espace de noms destiné aux utilisateurs généraux à des fins de sécurité
Application des politiques et gestion
- Les responsables sécurité peuvent utiliser la clé de condition
s3:x-amz-bucket-namespace pour imposer l’usage de cet espace de noms via une politique d’organisation globale (SCP)
- Cela ne s’applique pas automatiquement aux buckets existants ni aux templates sans espace de noms
- Pour protéger les buckets existants, il faut créer un bucket au nouveau format d’espace de noms et migrer les données
- Grâce à cette mesure, le bucketsquatting est en pratique « en train de disparaître », avec une protection complète pour les nouveaux buckets
Approche des autres fournisseurs cloud
- Google Cloud Storage (GCS) utilise déjà un espace de noms basé sur la vérification du nom de domaine
- Les buckets au format domaine comme
myapp.com ne peuvent être créés que par le propriétaire du domaine
- Les buckets qui ne sont pas au format domaine restent exposés au risque de bucketsquatting
- Azure Blob Storage utilise une structure nom de compte de stockage + nom de conteneur
- Avec une limite maximale de 24 caractères, l’espace de noms est plus restreint, ce qui peut le rendre plus vulnérable au même problème
Conclusion (tl;dr)
- AWS S3 introduit un nouvel espace de noms compte-région
- Cet espace de noms empêche les attaques de bucketsquatting et il est fortement recommandé de l’utiliser à chaque création de nouveau bucket
- Les buckets existants ne sont pas protégés automatiquement ; si nécessaire, une migration des données est requise pour renforcer la protection
1 commentaires
Réactions sur Hacker News
J’ai récemment découvert qu’on ne peut pas réutiliser l’adresse e-mail de l’utilisateur root, même après la suppression d’un compte AWS
Dans notre organisation, quelqu’un avait créé l’utilisateur root d’un compte fermé avec l’adresse e-mail principale de l’entreprise, puis créé un nouveau compte avec une autre adresse, et maintenant même la période de récupération après suppression est passée
Résultat, cette adresse e-mail reste définitivement liée au compte root supprimé, ce qui rend la connexion SSO via un IdP externe impossible
J’ai contacté le support AWS, mais je n’ai pratiquement reçu aucune aide
Le mot de passe était documenté, mais il n’y avait aucun moyen de désactiver le MFA ; nous avons contacté le support AWS, le chargé de compte, etc., sans résultat
Au final, l’accès au compte root reste bloqué, et nous devrons peut-être migrer tout l’environnement complexe vers un nouveau compte
AWS considère les adresses e-mail avec un « + » comme des adresses distinctes
Mieux vaut ne l’utiliser qu’en cas de problème vraiment grave
Au final, il suffit qu’un phishing trompe le support client et obtienne une note de 10/10 pour que tout s’effondre
J’aimerais savoir quel mécanisme bloque réellement l’usage
L’auteur semble avoir mal compris la notion de account name dans Azure Blob Storage
C’est en pratique au même niveau qu’un nom de bucket S3, et ça doit rester globalement unique, donc c’est toujours une grosse contrainte
C’est encore plus frustrant avec la limite à 24 caractères
J’aimerais que Microsoft introduise, comme AWS, un namespace par client
Mais elle n’a pas pu le changer à cause des contraintes de la conception initiale
Personnellement, je ne comprends pas pourquoi ils n’ont toujours pas créé une API S3 v2
Ils auraient pu pousser une migration progressive vers une nouvelle API, mais au final clients et ingénieurs subissent tous une douleur inutile
Il faut donc se limiter aux chiffres et aux lettres minuscules, ce qui est extrêmement pénible
J’aimerais qu’ils autorisent au moins les tirets, comme S3 ou GCS
C’est pareil pour d’autres ressources comme les registres de conteneurs
Pour les noms de package, de bucket, de compte GitHub, etc., je me dis qu’un format à la Discord, @nom-4chiffresaléatoires, pourrait être une bonne idée
Ça démocratiserait l’espace de noms et empêcherait le squatting ou les attaques par réutilisation
Quand un compte est supprimé, il suffirait de retirer tout le nom, ce qui serait propre
La raison est expliquée dans l’annonce officielle :
il fallait mémoriser quatre chiffres et tenir compte de la casse, ce qui était peu pratique
Surtout pour les applis de chat, où il est plus propre d’utiliser un ID interne et de laisser les utilisateurs n’utiliser qu’un alias
Pour les buckets, comme l’important est d’avoir un nom lisible par un humain, je pense qu’il vaut mieux utiliser son propre domaine
Au contraire, il augmente surtout le risque de faute de frappe
Il est naturel que des noms se chevauchent dans les communautés en ligne ;
je me demande donc pourquoi on impose à tout prix des noms globalement uniques
Merci à Ian Mckay pour son article
Le fait qu’AWS ait officiellement introduit un namespace au niveau compte et région est une bonne évolution
Ce serait encore mieux si les outils d’IaC comme Terraform adoptaient cette règle par défaut
Terraform ajoute déjà un suffixe de hachage aléatoire à la fin des noms de bucket pour éviter les collisions
Le blog officiel d’AWS en parle aussi
Les attaques de bucket squatting sont intéressantes quand des fournisseurs cloud utilisent des noms de bucket prévisibles pour des espaces de travail internes temporaires
Chez AWS, l’attaque réelle était difficile à cause du hachage, mais GCP a encore eu récemment ce type de problème
Présentation connexe : talk DC32 sur le bucket squatting AWS,
vulnérabilité GCP : CVE-2026-1727
Dès qu’on voit que les noms de bucket sont prévisibles, on pressent immédiatement le risque
Avec la combinaison bucket squatting + bucket public + problème de TOCTOU dans CloudFormation,
il aurait été possible de déployer des ressources dans le compte de quelqu’un d’autre
C’est étonnant que l’équipe sécurité d’AWS n’ait pas détecté ça plus tôt
Les noms DNS posent un problème similaire
Si un domaine n’est pas renouvelé, il peut être réenregistré,
et quelqu’un peut configurer un enregistrement MX pour intercepter des e-mails de réinitialisation de mot de passe, entre autres
Les buckets AWS offrent encore des fonctionnalités spéciales uniquement quand leur nom correspond exactement au nom d’hôte
Documentation associée : Virtual Hosting in S3
Un nom ne devrait pas être identique à l’objet qu’il désigne
Quand un nom est réutilisé, il finit par désigner quelque chose de totalement différent,
et sa signification dépend alors du contexte
On ne peut le considérer comme identique que lorsqu’on se réattribue soi-même ce nom
Je me suis demandé si le fait d’exposer un ID de compte posait un risque de sécurité
Selon la documentation officielle,
il faut le manipuler avec précaution, mais il n’est pas considéré comme une donnée sensible
Tant qu’on ne l’expose pas partout, ce n’est pas un problème
Dans les règles IAM, un attaquant peut utiliser
*, donc au final l’essentiel reste la manière dont le défenseur configure ses politiquesEn le décodant en base32, on peut en extraire l’Account ID
Référence : analyse associée
Le fait que S3 utilise uniquement le nom du bucket comme clé d’accès a été l’une des décisions de conception les plus agaçantes