AWS - Federation Abuse

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

SAML

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

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

OIDC - Зловживання діями Github

Для додавання дії 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, які будуть використовуватися в робочому процесі:
```yaml
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 в кластері EKS, просто встановивши URL OIDC кластера як новий постачальник ідентифікації 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 з ідентифікатором 20C159CDF6F2349B68846BEC03BE031B може припускати роль. Однак вона не вказує, який обліковий запис служби може це зробити, що означає, що БУДЬ-ЯКИЙ обліковий запис служби з токеном веб-ідентифікатора зможе припускати роль.

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

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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated