AWS - STS Privesc

Support HackTricks

STS

sts:AssumeRole

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

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

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

당신은 다음을 실행하여 역할을 가장할 수 있습니다:

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

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

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

sts:GetFederationToken

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

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

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

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

sts:AssumeRoleWithSAML

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

이 권한이 있는 신뢰 정책의 예는:

{
"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"
}
}
}
]
}

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

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

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

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**에 토큰이 있으며, 다음과 같은 방법으로 역할을 가정하고 자격 증명을 얻을 수 있습니다:

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

연합 남용

AWS - Federation Abuse
HackTricks 지원하기

Last updated