
실습문제에서 제공하는 Access key와 Secret Key를 이용하여 lambda라는 이름을 가진 profile을 생성한다.
※편의를 위해 각 변수들은 환경변수로 등록 후 변수명으로 사용※
1. 유저 및 정책 확인
그후 aws sts get-caller-identity --profile lambda 명령어를 사용해 어떠한 유저인지 확인한다.
유저명이 chris-cgidtoadagya4b 인 것을 확인 할 수 있다.
※환경 변수 등록(이하 생략) export userName=chris-cgidtoadagya4b

User 명을 알았으니 아래 사항들을 확인해 보았다.
1. 유저 그룹

2. Inline Policy

3. Managed Policy

명령어 실행 결과 관리형 정책만 존재하는 것으로 확인되었다.
※ export policyArn=arn:aws:iam::941755627009:policy/cg-chris-policy-cgidtoadagya4b
1. cg-chris-policy 정책을 확인하기 위해 버전을 확인

2. Default 버전인 v1에 대한 정책 확인

3. Iam: List*, Get* 권한과 sts: AssumeRole 권한이 있는 것 확인
2. Role 확인 및 분석
이제 사용자 정책을 모두 확인 했으니 Role 을 확인해보자.
aws iam list-roles 명령어를 통해 아래와 같은 Role들이 존재하는 것을 확인 가능하다.
※ export role1=cg-debug-role-cgidtoadagya4b
※ export role2=cg-lambdaManager-role-cgidtoadagya4b

1.1. cg-debug-role은 lambda서비스에 Assume 될 수 있다.

1.2. cg-debug-role은 AdministratorAccess 정책을 가지고 있다.


1.3. 그렇다면 AdministroatrAccess가 어떠한 권한을 가지고 있는지 확인해보자. 먼저 Default 버전이 v1인 것 확인.

1.4. AdministroatrAccess v1은 모든 리소스 대한 전체 권한을 가지고 있다.

2.1. cg-lambdaManager-role 은 신뢰 주체가 chris이고, 허용된 Action이 AssumeRole이다. 즉, chris에게만 cg-lambdaManager-role 이 위임될 수 있다.

2.2. cg-lambdaManager-role은 cg-lambdaManager-policy정책을 가지고 있다.

2.3. cg-lambdaManager-policy가 어떤 권한을 가지고 있는지 확인해보자. Default 버전은 v1이다.

2.4. cg-lambdaManager-policy는 lambda에 대한 모든 권한 및 정책 PassRole 권한을 가지고 있다. 즉, 해당 정책을 가진 사용자는 다른 리소스에 정책을 부여할 수 있다.

| Role 명 | cg-debug-role | cg-lambdaManager-role |
| 관리형 정책 명 | AdministratorAccess | cg-lambdaManager-policy |
| Default 버전 | v1 | v1 |
| Role Principal | lambda | chris 유저 |
| 정책 Action | * | lambda: * iam: PassRole |
위 정보 수집 과정을 pacu 를 이용해서 동일하게 진행해보자.
1. run iam__enum_users_roles_policies_groups 명령어를 통해 유저, 그룹, Role, 정책을 한 번에 검색 가능하다.

2. data iam 명령어로 스캐닝 결과를 확인해보자. 먼저 유저이다.

3. 다음은 그룹이다.

4. 다음은 정책이다.

5. 마지막으로 Role이다.

★핵심 체크포인트★
1. chris에게 sts:AssuemRole 권한이 있고, cg-lambdaManager-role의 Principal이 chris 인 것 확인
2. cg-lambdaManager-role은 람다 서비스에 대한 전체 권한을 가지고 있고, PassRole 권한을 통해 리소스에 특정 Role 부여 가능
3. cg-debug-role은 모든 리소스에 대한 전체 권한을 가지고 있다는 것 확인
4. cg-lambdaManager-role을 이용해 람다 함수에 cg-debug-role을 부여하면 cg-debug-role 권한으로 람다 함수 실행 가능
3. Assume Role
1. chris에게 cg-lambda-manager-role을 Assume 한 뒤 해당 lmr(lambda manager role)프로필로 세션에 접속하였다.

2. aws sts get-caller-identity 로 확인해보면 Assume 된 것 확인 가능하다.

3. 해당 세션은 cg-lambdaManager-role에 대한 권한. 즉,람다 서비스에 대한 모든 권한, PassRole 권한을 가지고 있다.
4. Exploit
1. chris 유저를 권한 상승 시켜줄 람다 함수를 작성한다.

2. 권한 상승을 위해선 람다 함수가 상위 권한을 가지고 있어야 한다. 따라서 chris의 PassRole 권한으로 람다 함수에 cg-debug-role을 부여해 함수를 생성한다.

3. 해당 함수를 호출하면 정상적으로 chris의 권한이 상승된 것을 확인 할 수 있다.

4. AdministratorAccess 권한을 확인 가능하다.

5. 시나리오 삭제
1. 아래 명령어를 통해 시나리오 삭제를 진행한다.

'CloudGoat' 카테고리의 다른 글
| RDS_snapshot(Medium) Write up (0) | 2025.05.01 |
|---|---|
| iam_privesc_by_rollback(Easy) Write Up (0) | 2025.04.27 |
| SQS_FLAG_Shop(Easy) Write-up (0) | 2025.04.23 |
| iam_privesc_by_key_rotation(Easy) Write Up (0) | 2025.04.20 |
| beanstalk_secrets(Easy) Write up (1) | 2025.04.13 |