4.1 KiB
AWS - Federation Abuse
{{#include ../../../banners/hacktricks-training.md}}
SAML
SAML hakkında bilgi için lütfen kontrol edin:
{{#ref}} https://book.hacktricks.xyz/pentesting-web/saml-attacks {{#endref}}
SAML üzerinden bir Kimlik Federasyonu yapılandırmak için sadece bir isim ve tüm SAML yapılandırmasını içeren metadata XML sağlamanız yeterlidir (son noktalar, açık anahtara sahip sertifika)
OIDC - Github Actions Abuse
Bir github eylemini Kimlik sağlayıcı olarak eklemek için:
- Sağlayıcı türü için OpenID Connect'i seçin.
- Sağlayıcı URL'si için
https://token.actions.githubusercontent.comgirin. - Sağlayıcının parmak izini almak için Parmak izini al butonuna tıklayın.
- Hedef için
sts.amazonaws.comgirin. - Github eyleminin ihtiyaç duyduğu izinler ile birlikte bir yeni rol oluşturun ve sağlayıcıyı güvenen bir güven politikası oluşturun:
{ "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. Önceki politikada yalnızca bir **şubenin** belirli bir **tetikleyici** ile bir **kuruluşun** **depo**sundan yetkilendirildiğine dikkat edin.
7. Github eyleminin **taklit** edebileceği **rolün** **ARN**'si, github eyleminin bilmesi gereken "gizli" bilgi olacak, bu yüzden bunu bir **gizli** içinde bir **ortamda** **saklayın**.
8. Son olarak, iş akışı tarafından kullanılacak AWS kimlik bilgilerini yapılandırmak için bir github eylemi kullanın:
```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 Suistimali
# 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 kümesinde OIDC sağlayıcıları oluşturmak, kümenin OIDC URL'sini yeni bir Open ID Kimlik sağlayıcısı olarak ayarlamakla mümkündür. Bu yaygın bir varsayılan politikadır:
{
"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"
}
}
}
]
}
Bu politika, sadece id 20C159CDF6F2349B68846BEC03BE031B olan EKS kümesinin rolü üstlenebileceğini doğru bir şekilde belirtiyor. Ancak, hangi hizmet hesabının bunu üstlenebileceğini belirtmiyor, bu da HERHANGİ bir hizmet hesabının web kimlik belirteci ile rolü üstlenebileceği anlamına geliyor.
Hangi hizmet hesabının rolü üstlenebileceğini belirtmek için, hizmet hesabı adının belirtildiği bir koşul tanımlamak gereklidir, örneğin:
"oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account",
Referanslar
{{#include ../../../banners/hacktricks-training.md}}