AWS - Зловживання федерацією

Reading time: 3 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

SAML

Для отримання інформації про SAML, будь ласка, перегляньте:

SAML Attacks - HackTricks

Щоб налаштувати федерацію особи через SAML, вам потрібно лише вказати ім'я та метадані XML, що містять усю конфігурацію SAML (кінцеві точки, сертифікат з відкритим ключем)

OIDC - Зловживання GitHub Actions

Щоб додати дію GitHub як постачальника ідентифікації:

  1. Для Типу постачальника виберіть OpenID Connect.
  2. Для URL постачальника введіть https://token.actions.githubusercontent.com
  3. Натисніть Отримати відбиток для отримання відбитка постачальника
  4. Для Аудиторії введіть sts.amazonaws.com
  5. Створіть нову роль з дозволами, які потрібні дії GitHub, та політикою довіри, яка довіряє постачальнику, як:

{ "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. **ARN** **ролі**, яку дія GitHub зможе **використовувати**, буде "секретом", який дія GitHub повинна знати, тому **зберігайте** його в **секреті** всередині **середовища**.
8. Нарешті, використовуйте дію GitHub для налаштування облікових даних AWS, які будуть використовуватися робочим процесом:

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

Можливо створити **OIDC providers** у кластері **EKS**, просто встановивши **OIDC URL** кластера як **нового постачальника ідентичності Open 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" } } } ] }

Ця політика правильно вказує, що **тільки** **EKS кластер** з **id** `20C159CDF6F2349B68846BEC03BE031B` може приймати роль. Однак, вона не вказує, який обліковий запис служби може її приймати, що означає, що **будь-який обліковий запис служби з веб-ідентифікаційним токеном** зможе **приймати** роль.

Щоб вказати, **який обліковий запис служби повинен мати можливість приймати роль,** потрібно вказати **умову**, де **вказується ім'я облікового запису служби**, наприклад:

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