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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Django-faille-CVE-2025-57833_test — Djangoのannotate()およびalias()メソッドにおける動的エイリアスを介したSQLインジェクション(CVE-2025-57833)を示す教育用概念実証。脆弱なコード、悪用例、修正分析を含みます。 | Kitploit
ツール/GitHubGitHub/loic-houchi/django-faille-cve-2025-57833_test
静的分析脆弱性分析コード分析ウェブアプリケーション悪用学習と教育データベースセキュリティ
GitHubloic-houchi/django-faille-cve-2025-57833_test

Django-faille-CVE-2025-57833_test

Djangoのannotate()およびalias()メソッドにおける動的エイリアスを介したSQLインジェクション(CVE-2025-57833)を示す教育用概念実証。脆弱なコード、悪用例、修正分析を含みます。

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
リポジトリを見る
231年前未レビュー
共有

Django におけるエイリアス経由のSQLインジェクション脆弱性のテスト

定義:エイリアスとは何か?

エイリアスとは、SQLクエリ内の列または集計結果に付けられる名前です。
Djangoでは、annotate() または alias() メソッドで計算フィールドに名前を付けるためにエイリアスが使用されます。

例:

root@kitploit:~
from django.db.models import Count
books = Book.objects.annotate(book_count=Count('id'))

ここで、book_count は Count('id') の結果に対するエイリアスです。
これにより、計算された列に分かりやすい名前を取得できます。


シェル経由でのデータ挿入

手早く済ませるために、シェル経由でデータを挿入できます:

root@kitploit:~
python manage.py shell

実行するコマンド:

root@kitploit:~
from myapp.models import Author, Book

a = Author.objects.create(name=" houchi pierre")
Book.objects.create(title="Les belles filles", author=a)
Book.objects.create(title="Les baux arcons", author=a)

exit()

脆弱性の背景

Django 4.2.23 より前では、ユーザーが提供した動的エイリアスを介してSQLを注入することが可能でした。
この脆弱性は CVE-2025-57833 として知られています。

この脆弱性は、**kwargs で展開される辞書が、ユーザー由来のフィルタリングされていないキーとともに使用された場合に、annotate() 関数と alias() 関数に影響を与えました。


脆弱なコードの例 (myapp/views.py)

root@kitploit:~
import json
from django.db.models import Count
from django.http import JsonResponse
from .models import Author

def vulnerable_view(request):
    # On récupère l'alias depuis l'URL
    alias_param = request.GET.get("alias", "{}")
    try:
        # ⚠️ Vulnérable : évaluation directe des données utilisateurs
        alias_dict = json.loads(alias_param)
        for key, value in alias_dict.items():
            alias_dict[key] = eval(value)  # dangereux ! permet l'exécution de code arbitraire

        # Création de la queryset avec annotation dynamique
        qs = Author.objects.annotate(**alias_dict).values("name", *alias_dict.keys())

        # Retour des résultats
        return JsonResponse(list(qs), safe=False)

    except Exception as e:
        return JsonResponse({"error": str(e)})

解説:

  1. alias_param = request.GET.get("alias", "{}")
    ユーザーによって渡された alias パラメータの値を取得します。

  2. alias_dict = json.loads(alias_param)
    JSON文字列をPythonの辞書に変換します。

  3. alias_dict[key] = eval(value)
    ⚠️ 非常に危険:eval() は文字列をPythonコードとして実行します。
    ユーザーは破壊的なSQLを注入できる可能性があります。

  4. Author.objects.annotate(**alias_dict)
    提供されたエイリアスを使用してアノテーションを動的に適用します。


モデル (myapp/models.py)

root@kitploit:~
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    def __str__(self):
        return self.title

説明:

  • Author と Book は ForeignKey リレーションで関連付けられています。
  • 動的アノテーションは Author に対して使用され、その書籍に関する情報を計算します。

修正前の悪用例

  • 悪意のあるURL:
root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"evil); DROP TABLE myapp_book;--":"Count('id')"}
  • リスク:
    • あらゆるSQLコマンドの実行、テーブルの削除、データの改変。
    • これは、注入されたエイリアスを介して脆弱性を直接悪用します。

Django 4.2.23 での修正

  • Django は今後、エイリアス内の特定の文字を禁止します:

    • スペース
    • 引用符
    • セミコロン
    • SQLコメント (--)
  • URLにこれらの文字が含まれる場合、Django はエラーを発生させます:

root@kitploit:~
Column aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.
  • 結果:破壊的なSQLインジェクションは一切不可能になります。

安全な例

root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"books_count":"Count('book')"}
  • これは脆弱性にはなりません。
  • 脆弱性のあるバージョン (CVE-2025-57833) の欠陥は、悪意のあるユーザーが以下を通じてSQLを注入できる場合にのみ現れます:
    • エイリアス内の禁止文字(スペース、セミコロン、引用符、SQLコメント)
    • またはユーザー由来の値に対する eval()。

この脆弱性を防ぐためのベストプラクティス

  1. ユーザーデータに対して eval() を決して使用しない。
  2. 安全な文字のみを受け付けるようにエイリアス名を検証する。
  3. アノテーションの値を許可された関数や式に限定する。
  4. 修正の恩恵を受けるため、Django を最新の状態に保つ。

結論

  • CVE-2025-57833 の脆弱性により、動的エイリアスを介したSQLインジェクションが可能でした。
  • Django 4.2.23 以降でこの欠陥は修正されています。
  • ユーザーデータの厳格な検証は引き続き不可欠です。

著者: Loïc
日付: 06/09/2025

ツールをダウンロード