AWS - Federation Abuse

Reading time: 3 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 지원하기

SAML

SAML에 대한 정보는 다음을 확인하세요:

SAML Attacks - HackTricks

SAML을 통한 Identity Federation을 구성하려면 이름과 모든 SAML 구성(엔드포인트, 공개 키가 포함된 인증서)이 포함된 메타데이터 XML을 제공하면 됩니다.

OIDC - Github Actions Abuse

Identity provider로 github action을 추가하려면:

  1. _Provider type_에서 OpenID Connect를 선택합니다.
  2. _Provider URL_에 https://token.actions.githubusercontent.com를 입력합니다.
  3. _Get thumbprint_를 클릭하여 provider의 thumbprint를 가져옵니다.
  4. _Audience_에 sts.amazonaws.com을 입력합니다.
  5. github action이 필요로 하는 권한과 provider를 신뢰하는 신뢰 정책을 가진 새 역할을 생성합니다:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:sub": [ "repo:ORG_OR_USER_NAME/REPOSITORY:pull_request", "repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main" ], "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" } } } ] }

6. 이전 정책에서 특정 **트리거**로 **조직**의 **저장소**에서 **브랜치**만 허가된 것을 주목하세요.
7. github action이 **가장할** 수 있는 **역할**의 **ARN**은 github action이 알아야 할 "비밀"이므로, **환경** 내의 **비밀**에 저장합니다.
8. 마지막으로, 워크플로우에서 사용할 AWS 자격 증명을 구성하기 위해 github action을 사용합니다:

name: "test AWS Access"

The workflow should only trigger on pull requests to the main branch

on: pull_request: branches:

  • main

Required to get the ID Token that will be used for OIDC

permissions: id-token: write contents: read # needed for private repos to checkout

jobs: aws: runs-on: ubuntu-latest steps:

  • name: Checkout uses: actions/checkout@v3

  • name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-region: eu-west-1 role-to-assume:${{ secrets.READ_ROLE }} role-session-name: OIDCSession

  • run: aws sts get-caller-identity shell: bash

## OIDC - EKS 남용

Crate an EKS cluster (~10min)

eksctl create cluster --name demo --fargate


Create an Identity Provider for an EKS cluster

eksctl utils associate-iam-oidc-provider --cluster Testing --approve

**EKS** 클러스터에서 **OIDC 제공자**를 생성하는 것은 클러스터의 **OIDC URL**을 **새 Open ID ID 제공자**로 설정하는 것만으로 가능합니다. 이는 일반적인 기본 정책입니다:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com" } } } ] }

이 정책은 **id** `20C159CDF6F2349B68846BEC03BE031B`를 가진 **EKS 클러스터**만 역할을 맡을 수 있음을 올바르게 나타내고 있습니다. 그러나 어떤 서비스 계정이 이를 맡을 수 있는지 명시하지 않기 때문에 **웹 아이덴티티 토큰**이 있는 **모든 서비스 계정**이 역할을 맡을 수 있게 됩니다.

**어떤 서비스 계정이 역할을 맡을 수 있는지** 명시하기 위해서는 **서비스 계정 이름이 지정된 조건**을 명시해야 합니다, 예를 들어:

"oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account",