AWS - S3 Unauthenticated Enum
S3 Public Buckets
Un bucket est considéré comme “public” si n'importe quel utilisateur peut lister le contenu du bucket, et “privé” si le contenu du bucket peut seulement être listé ou écrit par certains utilisateurs.
Les entreprises peuvent avoir des permissions de buckets mal configurées donnant accès soit à tout, soit à tous les utilisateurs authentifiés dans AWS dans n'importe quel compte (donc à n'importe qui). Notez que même avec de telles mauvaises configurations, certaines actions peuvent ne pas être possibles car les buckets peuvent avoir leurs propres listes de contrôle d'accès (ACLs).
Apprenez-en plus sur la mauvaise configuration d'AWS-S3 ici : http://flaws.cloud et http://flaws2.cloud/
Trouver des Buckets AWS
Différentes méthodes pour trouver quand une page web utilise AWS pour stocker des ressources :
Énumération & OSINT :
Utilisation du plugin de navigateur wappalyzer
Utilisation de burp (spidering du web) ou en naviguant manuellement sur la page, toutes les ressources chargées seront enregistrées dans l'Historique.
Vérifiez les ressources dans des domaines comme :
Vérifiez les CNAMES car
resources.domain.com
peut avoir le CNAMEbucket.s3.amazonaws.com
Consultez https://buckets.grayhatwarfare.com, un site web avec des buckets ouverts déjà découverts.
Le nom du bucket et le nom de domaine du bucket doivent être identiques.
flaws.cloud est sur IP 52.92.181.107 et si vous y allez, cela vous redirige vers https://aws.amazon.com/s3/. De plus,
dig -x 52.92.181.107
donnes3-website-us-west-2.amazonaws.com
.Pour vérifier qu'il s'agit d'un bucket, vous pouvez également visiter https://flaws.cloud.s3.amazonaws.com/.
Brute-Force
Vous pouvez trouver des buckets en brute-forçant les noms liés à l'entreprise que vous testez en pentesting :
https://github.com/jordanpotti/AWSBucketDump (Contient une liste de noms de buckets potentiels)
Loot S3 Buckets
Étant donné des buckets S3 ouverts, BucketLoot peut automatiquement rechercher des informations intéressantes.
Trouver la Région
Vous pouvez trouver toutes les régions prises en charge par AWS sur https://docs.aws.amazon.com/general/latest/gr/s3.html
Par DNS
Vous pouvez obtenir la région d'un bucket avec un dig
et nslookup
en faisant une requête DNS de l'IP découverte :
Vérifiez que le domaine résolu contient le mot "website".
Vous pouvez accéder au site web statique en allant à : flaws.cloud.s3-website-us-west-2.amazonaws.com
ou vous pouvez accéder au bucket en visitant : flaws.cloud.s3-us-west-2.amazonaws.com
En Essayant
Si vous essayez d'accéder à un bucket, mais que dans le nom de domaine vous spécifiez une autre région (par exemple le bucket est dans bucket.s3.amazonaws.com
mais vous essayez d'accéder à bucket.s3-website-us-west-2.amazonaws.com
, alors vous serez indiqué à l'emplacement correct :
Énumération du bucket
Pour tester l'ouverture du bucket, un utilisateur peut simplement entrer l'URL dans son navigateur web. Un bucket privé répondra par "Access Denied". Un bucket public listera les 1 000 premiers objets qui ont été stockés.
Ouvert à tous :
Privé :
Vous pouvez également vérifier cela avec le cli :
Si le bucket n'a pas de nom de domaine, lors de la tentative de l'énumérer, mettez uniquement le nom du bucket et non l'ensemble du domaine AWSs3. Exemple : s3://<BUCKETNAME>
Modèle d'URL publique
Obtenir l'ID de compte à partir d'un Bucket public
Il est possible de déterminer un compte AWS en profitant de la nouvelle S3:ResourceAccount
Policy Condition Key. Cette condition restreint l'accès en fonction du bucket S3 dans lequel se trouve un compte (d'autres politiques basées sur le compte restreignent en fonction du compte dans lequel se trouve le principal demandeur).
Et parce que la politique peut contenir des caractères génériques, il est possible de trouver le numéro de compte un chiffre à la fois.
Cet outil automatise le processus :
Cette technique fonctionne également avec les URLs API Gateway, les URLs Lambda, les ensembles de données Data Exchange et même pour obtenir la valeur des tags (si vous connaissez la clé du tag). Vous pouvez trouver plus d'informations dans la recherche originale et l'outil conditional-love pour automatiser cette exploitation.
Confirmer qu'un bucket appartient à un compte AWS
Comme expliqué dans cet article de blog, si vous avez les permissions pour lister un bucket, il est possible de confirmer un accountID auquel le bucket appartient en envoyant une requête comme :
Si l'erreur est « Access Denied », cela signifie que l'ID du compte est incorrect.
Utilisation des emails pour l'énumération des comptes root
Comme expliqué dans cet article de blog, il est possible de vérifier si une adresse email est liée à un compte AWS en essayant d'accorder des permissions à un email sur un bucket S3 via des ACLs. Si cela ne déclenche pas d'erreur, cela signifie que l'email est un utilisateur root d'un compte AWS :
Références
Last updated