AWS - STS Privesc

Reading time: 6 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 का समर्थन करें

STS

sts:AssumeRole

हर भूमिका एक भूमिका ट्रस्ट नीति के साथ बनाई जाती है, यह नीति यह दर्शाती है कि कौन बनाई गई भूमिका को ग्रहण कर सकता है। यदि एक ही खाते से एक भूमिका कहती है कि एक खाता इसे ग्रहण कर सकता है, तो इसका मतलब है कि खाता भूमिका तक पहुँच प्राप्त कर सकेगा (और संभावित रूप से privesc कर सकेगा)।

उदाहरण के लिए, निम्नलिखित भूमिका ट्रस्ट नीति यह दर्शाती है कि कोई भी इसे ग्रहण कर सकता है, इसलिए कोई भी उपयोगकर्ता उस भूमिका से संबंधित अनुमतियों तक privesc कर सकेगा

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

आप एक भूमिका का अनुकरण कर सकते हैं:

bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

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

caution

ध्यान दें कि इस मामले में अनुमति sts:AssumeRole को दुरुपयोग के लिए भूमिका में इंगित किया जाना चाहिए और हमलावर की नीति में नहीं।
एक अपवाद के साथ, किसी अन्य खाते से भूमिका को मान लेना के लिए हमलावर खाते को भी भूमिका पर sts:AssumeRole होना चाहिए।

sts:GetFederationToken

इस अनुमति के साथ किसी भी उपयोगकर्ता की नकल करने के लिए क्रेडेंशियल्स उत्पन्न करना संभव है:

bash
aws sts get-federation-token --name <username>

यह अनुमति इस तरह से सुरक्षित रूप से दी जा सकती है कि अन्य उपयोगकर्ताओं की नकल करने का अधिकार न दिया जाए:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

इस भूमिका के साथ एक ट्रस्ट नीति SAML के माध्यम से प्रमाणित उपयोगकर्ताओं को भूमिका का अनुकरण करने की अनुमति देती है।

इस अनुमति के साथ एक ट्रस्ट नीति का उदाहरण है:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

क्रेडेंशियल्स उत्पन्न करने के लिए ताकि सामान्य रूप से भूमिका का अनुकरण किया जा सके, आप कुछ इस तरह का उपयोग कर सकते हैं:

bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

लेकिन प्रदाताओं के पास इसे आसान बनाने के लिए अपने उपकरण हो सकते हैं, जैसे onelogin-aws-assume-role:

bash
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

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

sts:AssumeRoleWithWebIdentity

यह अनुमति उन उपयोगकर्ताओं के लिए अस्थायी सुरक्षा क्रेडेंशियल्स प्राप्त करने की अनुमति देती है जो एक वेब पहचान प्रदाता के साथ मोबाइल, वेब एप्लिकेशन, EKS... में प्रमाणित किए गए हैं। यहाँ और जानें।

उदाहरण के लिए, यदि एक EKS सेवा खाता को IAM भूमिका का अनुकरण करने में सक्षम होना चाहिए, तो इसके पास /var/run/secrets/eks.amazonaws.com/serviceaccount/token में एक टोकन होगा और यह भूमिका को ग्रहण कर सकता है और क्रेडेंशियल्स प्राप्त कर सकता है कुछ इस तरह:

bash
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Federation Abuse

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere बाहरी कार्यभारों को X.509 प्रमाणपत्रों का उपयोग करके IAM भूमिकाएँ ग्रहण करने की अनुमति देता है। लेकिन जब विश्वास नीतियाँ सही तरीके से परिभाषित नहीं होती हैं, तो उनका दुरुपयोग किया जा सकता है।

इस नीति में यह निर्धारित करने के लिए कोई प्रतिबंध नहीं है कि कौन सा विश्वास एंकर या प्रमाणपत्र विशेषताएँ अनुमति प्राप्त हैं। परिणामस्वरूप, खाते में किसी भी विश्वास एंकर से जुड़े किसी भी प्रमाणपत्र का उपयोग इस भूमिका को ग्रहण करने के लिए किया जा सकता है।

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

प्रिवेस्क के लिए, aws_signing_helper की आवश्यकता है https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html से

फिर एक मान्य प्रमाणपत्र का उपयोग करके, हमलावर उच्च विशेषाधिकार भूमिका में प्रवेश कर सकता है

bash
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin

संदर्भ

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 का समर्थन करें