
Exploit proof-of-concept per CVE-2026-42203, una vulnerabilità SSTI nell'endpoint /prompts/test di LiteLLM, con verifica del callback CEYE per test autorizzati.
Questo documento spiega come avviare un ambiente LiteLLM locale ed eseguire CVE-2026-42203.py per verificare la vulnerabilità SSTI /prompts/test.
Utilizzare solo in un ambiente di laboratorio locale autorizzato. Non puntare lo script verso target pubblici non autorizzati.
Entrare nella directory Lab e avviare LiteLLM, Postgres e Prometheus:
docker compose up -d
Verificare lo stato dei container:
docker compose ps
Confermare che il servizio sia accessibile:
curl http://127.0.0.1:4000/
Master_Key predefinito: sk-master-test-key-1234
Passare tramite parametri da riga di comando:
python3 cve_2026_42203_litellm_prompts_test_ssti.py \
--auth 'sk-local-test-key' \
--ceye-domain 'your-id.ceye.io' \
--ceye-token 'your-ceye-api-token'
Significato delle variabili:
LITELLM_API_KEY: la chiave di accesso a LiteLLM, nell'ambiente Docker locale corrisponde solitamente a LITELLM_MASTER_KEY nel file .env.CEYE_DOMAIN: il tuo sottodominio CEYE, ad esempio xxxxxx.ceye.io.CEYE_TOKEN: il tuo token API CEYE, utilizzato per interrogare i record di callback.Esempio completo:
python3 cve_2026_42203_litellm_prompts_test_ssti.py \
--target http://127.0.0.1:4000 \
--auth 'sk-local-test-key' \
--ceye-domain 'your-id.ceye.io' \
--ceye-token 'your-ceye-api-token'
Parametri chiave:
--target: indirizzo del servizio LiteLLM, predefinito http://127.0.0.1:4000.--auth / --api-key: la chiave LiteLLM utilizzata per chiamare /prompts/test.--ceye-domain: dominio di callback CEYE.--ceye-token: token API CEYE. Verrà mostrato automaticamente offuscato nell'output dello script.--wait: secondi di attesa per il callback CEYE, predefinito 20.--interval: intervallo in secondi per il polling dei record CEYE, predefinito 3.--timeout: timeout della richiesta HTTP, predefinito 10 secondi.--insecure: da aggiungere se il target utilizza un certificato HTTPS autofirmato, disabilita la verifica del certificato TLS.Se CEYE riceve il callback, lo script restituirà:
[VULNERABLE] CEYE received the callback request.
Se nessun callback viene ricevuto entro il periodo di attesa, lo script restituirà:
[NOT_VULNERABLE] CEYE did not receive the callback request within the wait window.