
SQLインジェクションの脆弱性を実演するデモアプリケーション(django 5.2.7)
このアプリケーションは、複数のDjangoバージョンに影響を与えるCVE-2025-64459を実演しています。この脆弱性は、新しいリリースのDjangoで修正されています。
SQLインジェクションとは、ユーザーが提供した入力がSQLクエリの一部として扱われることで、攻撃者がクエリの動作を変更し、本来アクセスできないデータを公開または改ざんできる脆弱性です。
これはDjangoのQuerySetおよびQオブジェクトにおけるSQLインジェクションの脆弱性であり、データ漏洩につながる可能性があります。本エクスプロイトは、クエリパラメータをDjangoのQuerySetに渡すことによって発生し、ユーザーが_connectorキーと_negatedキーを設定して任意のSQL断片を実行できるようになります。
このアプリでは、ホームURLルートでエクスプロイトが実行されます。cve.hyperf.app/?_connector=OR 1=1 ORにアクセスすると、SQLクエリにOR 1=1 ORが挿入され、フィルタがすべてのレコードに一致するため、すべての結果が返されます。この場合、アーカイブ済みまたはDRAFTステータスに設定された投稿が公開されます。
[!NOTE]
db.sqlite3と.envは、エクスプロイト用のデータベースをセットアップするために意図的にgitで追跡されています。
リポジトリをクローンし、uvで依存関係を同期します。
uv sync
開発サーバーを起動します。
uv run manage.py runserver