# AWS - Federation Abuse {{#include ../../../banners/hacktricks-training.md}} ## SAML SAMLに関する情報は以下を確認してください: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html {{#endref}} **SAMLを通じたアイデンティティフェデレーション**を構成するには、**名前**とすべてのSAML構成を含む**メタデータXML**(**エンドポイント**、**公開鍵**を持つ**証明書**)を提供するだけです。 ## OIDC - Github Actions Abuse アイデンティティプロバイダーとしてgithubアクションを追加するには: 1. _プロバイダータイプ_として**OpenID Connect**を選択します。 2. _プロバイダーURL_に`https://token.actions.githubusercontent.com`を入力します。 3. _サムプリントを取得_をクリックしてプロバイダーのサムプリントを取得します。 4. _オーディエンス_に`sts.amazonaws.com`を入力します。 5. githubアクションが必要とする**権限**を持つ**新しいロール**を作成し、次のようなプロバイダーを信頼する**信頼ポリシー**を設定します: - ```json { "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アクションが**なりすます**ことができる**ロール**の**ARN**は、githubアクションが知っておく必要がある「秘密」になるため、**環境**内の**シークレット**に**保存**します。 8. 最後に、ワークフローで使用するAWSクレデンシャルを設定するためにgithubアクションを使用します: ```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の悪用 ```bash # Crate an EKS cluster (~10min) eksctl create cluster --name demo --fargate ``` ```bash # Create an Identity Provider for an EKS cluster eksctl utils associate-iam-oidc-provider --cluster Testing --approve ``` **OIDCプロバイダー**を**EKS**クラスターで生成することは、クラスターの**OIDC URL**を**新しいOpen IDアイデンティティプロバイダー**として設定するだけで可能です。これは一般的なデフォルトポリシーです: ```json { "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 クラスター** のみがロールを引き受けることができることを正しく示しています。しかし、どのサービスアカウントがそれを引き受けることができるかは示されていないため、**ウェブアイデンティティトークンを持つ任意のサービスアカウント** がロールを **引き受けることができる** ことになります。 **どのサービスアカウントがロールを引き受けることができるかを指定するためには、** **サービスアカウント名が指定される条件** を指定する必要があります。 ```bash "oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account", ``` ## 参考文献 - [https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/](https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/) {{#include ../../../banners/hacktricks-training.md}}