AWS - STS Persistence

AWS Hacking рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХреЛ рд╕рдорд░реНрдерди рджреЗрдВ
  • subscription plans рджреЗрдЦреЗрдВ!

  • ЁЯТм Discord group рдпрд╛ telegram group рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ рд╣рдореЗрдВ Twitter ЁЯРж рдкрд░ рдлреЙрд▓реЛ рдХрд░реЗрдВ @hacktricks_live.**

  • рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ HackTricks рдФрд░ HackTricks Cloud github repos рдореЗрдВ PRs рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗред

STS

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдЬрд╛рдПрдБ:

AWS - STS Enum

Assume role token

рдЕрд╕реНрдерд╛рдпреА рдЯреЛрдХрди рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдХреНрд░рд┐рдп рдЕрд╕реНрдерд╛рдпреА рдЯреЛрдХрди рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

aws sts get-session-token --duration-seconds 129600

# MFA рдХреЗ рд╕рд╛рде
aws sts get-session-token \
--serial-number <mfa-device-name> \
--token-code <code-from-token>

# рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ GAHT12345678
# SMS рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо AWS рдореЗрдВ ARN рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ arn:aws:iam::123456789012:sms-mfa/username
# рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо AWS рдореЗрдВ ARN рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ arn:aws:iam::123456789012:mfa/username

Role Chain Juggling

Role chaining рдПрдХ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд AWS рдлреАрдЪрд░ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рдХреЛ рдЧреНрд░рд╣рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдлрд┐рд░ рджреВрд╕рд░реА рднреВрдорд┐рдХрд╛ рдЧреНрд░рд╣рдг рдХрд░рддреА рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЪрдХреНрд░рд╛рдХрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднреВрдорд┐рдХрд╛ рдореЗрдВ рд▓реМрдЯрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рднреВрдорд┐рдХрд╛ рдЧреНрд░рд╣рдг рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рд╕рдорд╛рдкреНрддрд┐ рдХреНрд╖реЗрддреНрд░ рддрд╛рдЬрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рджреЛ рднреВрдорд┐рдХрд╛рдПрдБ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧреНрд░рд╣рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реЗрдЯрдЕрдк рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рдирд┐рд░рдВрддрд░ рдирд╡реАрдиреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ tool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ role chaining рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

./aws_role_juggler.py -h
usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]]

optional arguments:
-h, --help            show this help message and exit
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрд╕ Github repository рд╕реЗ find_circular_trust.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рддреА рд╣реИ рдЬрд┐рдирд╕реЗ рдПрдХ role chain рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

PowerShell рд╕реЗ Role Juggling рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб

```powershell # PowerShell script to check for role juggling possibilities using AWS CLI

Check for AWS CLI installation

if (-not (Get-Command "aws" -ErrorAction SilentlyContinue)) { Write-Error "AWS CLI is not installed. Please install it and configure it with 'aws configure'." exit }

Function to list IAM roles

function List-IAMRoles { aws iam list-roles --query "Roles[*].{RoleName:RoleName, Arn:Arn}" --output json }

Initialize error count

$errorCount = 0

List all roles

$roles = List-IAMRoles | ConvertFrom-Json

Attempt to assume each role

foreach ($role in $roles) { $sessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) try { $credentials = aws sts assume-role --role-arn $role.Arn --role-session-name $sessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json if ($credentials) { Write-Host "Successfully assumed role: $($role.RoleName)" Write-Host "Access Key: $($credentials.AccessKeyId)" Write-Host "Secret Access Key: $($credentials.SecretAccessKey)" Write-Host "Session Token: $($credentials.SessionToken)" Write-Host "Expiration: $($credentials.Expiration)"

Set temporary credentials to assume the next role

$env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId $env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey $env:AWS_SESSION_TOKEN = $credentials.SessionToken

Try to assume another role using the temporary credentials

foreach ($nextRole in $roles) { if ($nextRole.Arn -ne $role.Arn) { $nextSessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) try { $nextCredentials = aws sts assume-role --role-arn $nextRole.Arn --role-session-name $nextSessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json if ($nextCredentials) { Write-Host "Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)" Write-Host "Access Key: $($nextCredentials.AccessKeyId)" Write-Host "Secret Access Key: $($nextCredentials.SecretAccessKey)" Write-Host "Session Token: $($nextCredentials.SessionToken)" Write-Host "Expiration: $($nextCredentials.Expiration)" } } catch { $errorCount++ } } }

Reset environment variables

Remove-Item Env:\AWS_ACCESS_KEY_ID Remove-Item Env:\AWS_SECRET_ACCESS_KEY Remove-Item Env:\AWS_SESSION_TOKEN } else { $errorCount++ } } catch { $errorCount++ } }

Output the number of errors if any

if ($errorCount -gt 0) { Write-Host "$errorCount error(s) occurred during role assumption attempts." } else { Write-Host "No errors occurred. All roles checked successfully." }

Write-Host "Role juggling check complete."

</details>

<div data-gb-custom-block data-tag="hint" data-style='success'>

AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:<img src="/.gitbook/assets/image.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/image.png" alt="" data-size="line">\
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: <img src="/.gitbook/assets/image (2).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/image (2).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

<details>

<summary>HackTricks рдХреЛ рд╕рдорд░реНрдерди рджреЗрдВ</summary>

* [**рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдУрдВ**](https://github.com/sponsors/carlospolop) рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ!
* **ЁЯТм [**Discord рд╕рдореВрд╣**](https://discord.gg/hRep4RUj7f) рдпрд╛ [**telegram рд╕рдореВрд╣**](https://t.me/peass) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ рд╣рдореЗрдВ **Twitter** ЁЯРж рдкрд░ **рдлреЙрд▓реЛ рдХрд░реЗрдВ** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **PRs рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ** [**HackTricks**](https://github.com/carlospolop/hacktricks) рдФрд░ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github рд░рд┐рдкреЛрдЬрд╝рд┐рдЯрд░реА рдореЗрдВред

</details>

</div>

Last updated