mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-28 13:43:24 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
@@ -4,22 +4,22 @@
|
||||
|
||||
## Secrets Manager
|
||||
|
||||
Per ulteriori informazioni consulta:
|
||||
Per maggiori informazioni consulta:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Leggere i Secrets
|
||||
### Read Secrets
|
||||
|
||||
I **secrets stessi sono informazioni sensibili**, [consulta la pagina privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) per imparare come leggerli.
|
||||
I **secrets sono informazioni sensibili**, [consulta la pagina privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) per imparare come leggerli.
|
||||
|
||||
### DoS — Cambiare il valore del Secret
|
||||
### DoS Change Secret Value
|
||||
|
||||
Modificando il valore del secret potresti causare un DoS a tutti i sistemi che dipendono da quel valore.
|
||||
Cambiare il valore del secret potrebbe **causare un DoS a tutti i sistemi che dipendono da quel valore.**
|
||||
|
||||
> [!WARNING]
|
||||
> Nota che i valori precedenti sono comunque memorizzati, quindi è facile tornare al valore precedente.
|
||||
> Nota che i valori precedenti sono anch'essi memorizzati, quindi è facile tornare al valore precedente.
|
||||
```bash
|
||||
# Requires permission secretsmanager:PutSecretValue
|
||||
aws secretsmanager put-secret-value \
|
||||
@@ -28,17 +28,17 @@ aws secretsmanager put-secret-value \
|
||||
```
|
||||
### DoS Change KMS key
|
||||
|
||||
Se l'attaccante ha la permission secretsmanager:UpdateSecret, può configurare il secret per usare una KMS key posseduta dall'attaccante. Quella key è inizialmente impostata in modo che chiunque possa accedervi e usarla, quindi aggiornare il secret con la nuova key è possibile. Se la key non fosse accessibile, il secret non potrebbe essere aggiornato.
|
||||
Se l'attaccante ha il permesso secretsmanager:UpdateSecret, può configurare il secret in modo che utilizzi una KMS key di sua proprietà. Tale KMS key è inizialmente configurata in modo che chiunque possa accedervi e usarla, quindi è possibile aggiornare il secret con la nuova KMS key. Se la KMS key non fosse accessibile, il secret non potrebbe essere aggiornato.
|
||||
|
||||
Dopo aver cambiato la key per il secret, l'attaccante modifica la configurazione della sua key in modo che solo lui possa accedervi. In questo modo, nelle versioni successive del secret, sarà criptato con la nuova key e, poiché non c'è accesso ad essa, la possibilità di recuperare il secret verrebbe persa.
|
||||
Dopo aver cambiato la KMS key del secret, l'attaccante modifica la configurazione della propria KMS key in modo che solo lui possa accedervi. In questo modo, nelle versioni successive del secret verrà crittografato con la nuova KMS key e, non essendoci accesso ad essa, la possibilità di recuperare il secret verrebbe persa.
|
||||
|
||||
È importante notare che questa indisponibilità si verificherà solo nelle versioni successive, dopo che il contenuto del secret cambia, poiché la versione corrente è ancora criptata con la KMS key originale.
|
||||
È importante notare che questa inaccessibilità si verificherà solo nelle versioni successive, dopo che il contenuto del secret sarà cambiato, poiché la versione corrente è ancora crittografata con la KMS key originale.
|
||||
```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 Eliminazione dei secret
|
||||
### DoS Eliminazione del Secret
|
||||
|
||||
Il numero minimo di giorni per eliminare un secret è 7
|
||||
```bash
|
||||
@@ -48,27 +48,27 @@ aws secretsmanager delete-secret \
|
||||
```
|
||||
## secretsmanager:RestoreSecret
|
||||
|
||||
È possibile ripristinare un secret: questo permette di recuperare secret programmati per la cancellazione, dato che il periodo minimo di cancellazione per i secret è di 7 giorni e il massimo è di 30 giorni. Insieme alla secretsmanager:GetSecretValue permission, ciò permette di recuperarne il contenuto.
|
||||
È possibile ripristinare un secret, permettendo il recupero di secret che sono stati programmati per la cancellazione, dato che il periodo minimo di cancellazione per i secret è di 7 giorni e il massimo è di 30 giorni. Insieme al permesso secretsmanager:GetSecretValue, questo rende possibile recuperarne il contenuto.
|
||||
|
||||
Per recuperare un secret in fase di cancellazione, puoi usare il seguente comando:
|
||||
Per recuperare un secret che è in fase di cancellazione, puoi usare il seguente comando:
|
||||
```bash
|
||||
aws secretsmanager restore-secret \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:DeleteResourcePolicy
|
||||
|
||||
Questa azione consente di eliminare la policy della risorsa che controlla chi può accedere a un secret. Questo potrebbe causare un DoS se la policy della risorsa era configurata per consentire l'accesso a un insieme specifico di utenti.
|
||||
Questa azione permette di eliminare la resource policy che controlla chi può accedere a un secret. Questo potrebbe portare a un DoS se la resource policy era configurata per consentire l'accesso a un insieme specifico di utenti.
|
||||
|
||||
Per eliminare la policy della risorsa:
|
||||
Per eliminare la resource policy:
|
||||
```bash
|
||||
aws secretsmanager delete-resource-policy \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:UpdateSecretVersionStage
|
||||
|
||||
Gli stati di un secret sono usati per gestire le versioni di un secret. AWSCURRENT indica la versione attiva che le applicazioni usano, AWSPREVIOUS mantiene la versione precedente in modo da poter tornare indietro se necessario, e AWSPENDING è usato nel processo di rotation per preparare e convalidare una nuova versione prima di renderla la versione corrente.
|
||||
Gli stati di un segreto sono usati per gestire le versioni di un segreto. AWSCURRENT indica la versione attiva che le applicazioni utilizzano, AWSPREVIOUS conserva la versione precedente in modo da poter effettuare un rollback se necessario, e AWSPENDING è usato nel processo di rotazione per preparare e validare una nuova versione prima di renderla quella corrente.
|
||||
|
||||
Le applicazioni leggono sempre la versione con AWSCURRENT. Se qualcuno sposta quell'etichetta sulla versione sbagliata, le app useranno credenziali non valide e potrebbero fallire.
|
||||
Le applicazioni leggono sempre la versione contrassegnata da AWSCURRENT. Se qualcuno sposta quell'etichetta sulla versione sbagliata, le app utilizzeranno credenziali non valide e potrebbero andare in errore.
|
||||
|
||||
AWSPREVIOUS non viene usato automaticamente. Tuttavia, se AWSCURRENT viene rimosso o riassegnato in modo errato, potrebbe sembrare che tutto stia ancora girando con la versione precedente.
|
||||
```bash
|
||||
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
|
||||
--remove-from-version-id <previous-version-id>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Esfiltrazione massiva di Secrets via BatchGetSecretValue (fino a 20 per chiamata)
|
||||
|
||||
Abusa dell'API Secrets Manager BatchGetSecretValue per recuperare fino a 20 secrets in una singola richiesta. Questo può ridurre drasticamente il numero di chiamate API rispetto all'iterazione con GetSecretValue per ogni secret. Se si usano filtri (tags/name), è anche richiesto il permesso ListSecrets. CloudTrail registra comunque un evento GetSecretValue per ogni secret recuperato nel batch.
|
||||
|
||||
Permessi richiesti
|
||||
- secretsmanager:BatchGetSecretValue
|
||||
- secretsmanager:GetSecretValue per ogni secret target
|
||||
- secretsmanager:ListSecrets se si usa --filters
|
||||
- kms:Decrypt sui CMK usati dai secrets (se non si usa aws/secretsmanager)
|
||||
|
||||
> [!WARNING]
|
||||
> Nota che la permissione `secretsmanager:BatchGetSecretValue` non è sufficiente per recuperare i secrets; è necessario anche `secretsmanager:GetSecretValue` per ogni secret che si vuole recuperare.
|
||||
|
||||
Esfiltrare tramite lista esplicita
|
||||
```bash
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--secret-id-list <secret1> <secret2> <secret3> \
|
||||
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
|
||||
```
|
||||
Exfiltrate tramite filtri (tag key/value o 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
|
||||
```
|
||||
Gestione dei fallimenti parziali
|
||||
```bash
|
||||
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
|
||||
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
|
||||
```
|
||||
Impatto
|
||||
- Rapida “smash-and-grab” di molti secret con meno chiamate API, potenzialmente bypassando alerting tarato sui picchi di GetSecretValue.
|
||||
- I log di CloudTrail includono comunque un evento GetSecretValue per ogni secret recuperato dal batch.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Secrets Manager
|
||||
|
||||
Per maggiori informazioni su secrets manager consulta:
|
||||
Per maggiori informazioni su Secrets Manager consulta:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
@@ -12,18 +12,18 @@ Per maggiori informazioni su secrets manager consulta:
|
||||
|
||||
### `secretsmanager:GetSecretValue`
|
||||
|
||||
Un attacker con questa autorizzazione può ottenere il **valore salvato all'interno di un segreto** in AWS **Secretsmanager**.
|
||||
Un attacker con questo permesso può ottenere il **valore salvato all'interno di un secret** in AWS **Secretsmanager**.
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
|
||||
```
|
||||
**Impatto potenziale:** Accesso a dati altamente sensibili all'interno del servizio AWS secrets manager.
|
||||
**Possibile impatto:** Accesso a dati altamente sensibili all'interno del servizio AWS Secrets Manager.
|
||||
|
||||
> [!WARNING]
|
||||
> Nota che anche avendo il permesso `secretsmanager:BatchGetSecretValue`, un attaccante avrebbe bisogno anche di `secretsmanager:GetSecretValue` per recuperare i segreti sensibili.
|
||||
> Nota che anche con il permesso `secretsmanager:BatchGetSecretValue` un attaccante avrebbe comunque bisogno di `secretsmanager:GetSecretValue` per recuperare i segreti sensibili.
|
||||
|
||||
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
|
||||
|
||||
Con le autorizzazioni precedenti è possibile **concedere ad altri principals/accounts (anche esterni)** l'accesso al **segreto**. Nota che, per **leggere i segreti crittografati** con una KMS key, l'utente deve anche avere **accesso alla KMS key** (maggiori informazioni nella [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
Con le autorizzazioni precedenti è possibile **concedere l'accesso ad altri principals/account (anche esterni)** per accedere al **segreto**. Nota che, per **leggere i segreti cifrati** con una KMS key, l'utente deve anche avere **accesso alla KMS key** (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
```bash
|
||||
aws secretsmanager list-secrets
|
||||
aws secretsmanager get-resource-policy --secret-id <secret_name>
|
||||
|
||||
Reference in New Issue
Block a user