AWS - S3 Unauthenticated Enum
S3 Public Buckets
Un bucket è considerato “pubblico” se qualsiasi utente può elencare i contenuti del bucket, e “privato” se i contenuti del bucket possono essere elencati o scritti solo da determinati utenti.
Le aziende potrebbero avere permessi dei bucket configurati erroneamente dando accesso sia a tutto che a tutti gli utenti autenticati in AWS in qualsiasi account (quindi a chiunque). Nota che, anche con tali configurazioni errate, alcune azioni potrebbero non essere eseguibili poiché i bucket potrebbero avere le proprie liste di controllo degli accessi (ACL).
Scopri di più sulla configurazione errata di AWS-S3 qui: http://flaws.cloud e http://flaws2.cloud/
Trovare AWS Buckets
Diversi metodi per trovare quando una pagina web utilizza AWS per archiviare alcune risorse:
Enumerazione & OSINT:
Utilizzando il plugin del browser wappalyzer
Utilizzando burp (spidering del web) o navigando manualmente attraverso la pagina tutte le risorse caricate verranno salvate nella Cronologia.
Controlla le risorse in domini come:
Controlla i CNAMES come
resources.domain.com
potrebbe avere il CNAMEbucket.s3.amazonaws.com
Controlla https://buckets.grayhatwarfare.com, un sito con bucket aperti già scoperti.
Il nome del bucket e il nome del dominio del bucket devono essere gli stessi.
flaws.cloud è in IP 52.92.181.107 e se ci vai ti reindirizza a https://aws.amazon.com/s3/. Inoltre,
dig -x 52.92.181.107
restituisces3-website-us-west-2.amazonaws.com
.Per verificare che sia un bucket puoi anche visitare https://flaws.cloud.s3.amazonaws.com/.
Brute-Force
Puoi trovare bucket forzando i nomi relativi all'azienda che stai pentestando:
https://github.com/jordanpotti/AWSBucketDump (Contiene un elenco con potenziali nomi di bucket)
Loot S3 Buckets
Dato S3 open buckets, BucketLoot può automaticamente cercare informazioni interessanti.
Trova la Regione
Puoi trovare tutte le regioni supportate da AWS in https://docs.aws.amazon.com/general/latest/gr/s3.html
Tramite DNS
Puoi ottenere la regione di un bucket con un dig
e nslookup
facendo una richiesta DNS dell'IP scoperto:
Verifica che il dominio risolto contenga la parola "website".
Puoi accedere al sito web statico andando su: flaws.cloud.s3-website-us-west-2.amazonaws.com
oppure puoi accedere al bucket visitando: flaws.cloud.s3-us-west-2.amazonaws.com
Provando
Se provi ad accedere a un bucket, ma nel nome del dominio specifichi un'altra regione (ad esempio il bucket è in bucket.s3.amazonaws.com
ma provi ad accedere a bucket.s3-website-us-west-2.amazonaws.com
, allora sarai indirizzato alla posizione corretta:
Enumerare il bucket
Per testare l'apertura del bucket, un utente può semplicemente inserire l'URL nel proprio browser web. Un bucket privato risponderà con "Access Denied". Un bucket pubblico elencherà i primi 1.000 oggetti che sono stati memorizzati.
Aperto a tutti:
Privato:
Puoi anche verificare questo con il cli:
Se il bucket non ha un nome di dominio, quando si tenta di enumerarlo, inserire solo il nome del bucket e non l'intero dominio AWSs3. Esempio: s3://<BUCKETNAME>
Modello di URL pubblico
Ottenere l'ID dell'Account da un Bucket pubblico
È possibile determinare un account AWS sfruttando il nuovo S3:ResourceAccount
Policy Condition Key. Questa condizione limita l'accesso in base al bucket S3 in cui si trova un account (altre politiche basate sull'account limitano in base all'account in cui si trova il principale richiedente).
E poiché la politica può contenere wildcard, è possibile trovare il numero dell'account un numero alla volta.
Questo strumento automatizza il processo:
Questa tecnica funziona anche con API Gateway URLs, Lambda URLs, Data Exchange data sets e persino per ottenere il valore dei tag (se conosci la chiave del tag). Puoi trovare maggiori informazioni nella ricerca originale e lo strumento conditional-love per automatizzare questa exploitazione.
Confermare che un bucket appartiene a un account AWS
Come spiegato in questo post del blog, se hai i permessi per elencare un bucket è possibile confermare un accountID a cui appartiene il bucket inviando una richiesta come:
Se l'errore è "Access Denied" significa che l'ID dell'account era sbagliato.
Utilizzo delle email per l'enumerazione dell'account root
Come spiegato in questo post del blog, è possibile verificare se un indirizzo email è collegato a un account AWS provando a concedere permessi a un'email su un bucket S3 tramite ACL. Se questo non genera un errore, significa che l'email è un utente root di qualche account AWS:
Riferimenti
Last updated