AWS - 联邦滥用

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 配置 身份联邦,您只需提供一个 名称 和包含所有 SAML 配置的 元数据 XML端点带有公钥的证书

OIDC - Github Actions 滥用

为了将 github action 添加为身份提供者:

  1. 对于 提供者类型,选择 OpenID Connect
  2. 对于 提供者 URL,输入 https://token.actions.githubusercontent.com
  3. 点击 获取指纹 以获取提供者的指纹
  4. 对于 受众,输入 sts.amazonaws.com
  5. 创建一个具有 github action 所需的 权限 和信任提供者的 信任策略新角色,例如:

{ “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. 最后,使用 github action 配置工作流将使用的 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 URL 设置为 新的 Open ID 身份提供者EKS 集群中生成 OIDC 提供者。这是一个常见的默认策略:

{
"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 20C159CDF6F2349B68846BEC03BE031BEKS集群可以假设该角色。然而,它并没有指明哪个服务账户可以假设它,这意味着任何具有Web身份令牌的服务账户都将能够假设该角色。

为了指定哪个服务账户应该能够假设该角色,需要指定一个条件,其中指定服务账户名称,例如:

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

参考

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