Djangoセキュリティアップデート、サーバーサイドファイル書き込み・XSS・DoSの脆弱性を修正

Djangoプロジェクトは、Django 6.0.8およびDjango 5.2.17をリリースしました。今回のアップデートでは、深刻度の高いサーバーサイドファイル書き込みの脆弱性から、中程度のクロスサイトスクリプティング(XSS)、さらに深刻度が低から中程度のサービス拒否(DoS)問題まで、合計4件の脆弱性が修正されています。

Natalia Bidart氏が発表した今回のリリースは2026年8月4日付で、Djangoの標準的なセキュリティリリースポリシーに従ったものです。対象となるのはmainブランチ、6.1リリース候補版、そして6.0系および5.2系ブランチです。

最も深刻な問題であるCVE-2026-15307は、空間検索(spatial lookups)がstr型やdict型の値を受け付け、GDALRasterがこれらをラスタデータとして解釈してしまうことに起因します。

使用しているラスタドライバによっては、この問題によってディスクへのファイル書き込みが発生する可能性があり、場合によってはリモートコード実行につながったり、Djangoプロセスに外部への不正なネットワークリクエストを強制させたりする恐れがあります。

Django管理画面のModelAdmin.lookup_allowed()はチェンジリストでのフィルタリングを許可しているため、空間フィールドを含むいずれかのモデルに対して閲覧権限しか持たないスタッフユーザーであっても、この脆弱性を突くことが可能でした。

今回の修正により、空間検索においてdict型の値や無効なGEOSGeometry文字列がブロックされるようになりました。これは後方互換性のない変更ですが、モデルフィールドへの直接的な値の代入には影響しません。この問題はBence Nagy氏、localhost-detect氏、kimchunbok_氏によって報告されました。

2件のDoS問題にも対処しています。深刻度が低いCVE-2026-15337django.utils.translation.check_for_language()に影響するもので、任意の長さの言語コードを辞書のキーとしてキャッシュしてしまうため、メモリ枯渇のリスクがありました。

この問題は(デフォルトでは無効な)set_language()ビューを経由してアクセスされた場合に発生します。修正後は、キャッシュする前に500文字を超えるコードが拒否されるようになりました。この問題の発見者はJaeyoung Jang氏です。

深刻度が中程度のCVE-2026-15830は、深くネストされたGEOMETRYCOLLECTION構造を与えられた際にGEOSGeometryがセグメンテーション違反でクラッシュするというものでした。

Djangoは現在、WKT入力についてはネストされたコレクションを198個まで、WKB入力については(幅と深さを合わせた)コレクション総数を198個までに制限しています。加えて、GEOSGeometryやフォームフィールド、モデルフィールドに対してカスタマイズ可能な新しい引数max_geom_collectionsも追加されました。

GDAL経由でパースされるGeoJSON形式の入力はこの問題の影響を受けません。この問題はAndrew MacPherson氏とkimchunbok_氏によって報告されました。

深刻度が中程度のCVE-2026-15920では、Django管理画面がチェンジリストや読み取り専用フィールド上でURLFieldの値をクリック可能なリンクとして描画する際、スキームの検証を行っていないことが判明しました。これにより、危険なスキームを含む値が保存されていた場合、それがそのままリンクとして描画されてしまい、格納型XSSの攻撃経路となる恐れがありました。

修正後は、リンクとして描画する前にURLValidatorによる値の検証を行い、検証に失敗した場合はプレーンテキストとして表示するようになりました。この問題はEgor Saltykov氏によって報告されました。

これらの修正はDjangoのmain、6.1(リリース候補版)、6.0、5.2の各ブランチに反映されており、各CVEについてブランチごとのコミットが公開されています。Django 6.0.8およびDjango 5.2.17の公式tarballとチェックサムも入手可能です。

GeoDjangoの空間フィールドや、管理画面で公開されているURLFieldを含むモデルを使用している組織は、パッチ適用を優先すべきです。特にCVE-2026-15307についてはファイル書き込み・リモートコード実行につながる可能性があるため、注意が必要です。

アップデートを適用する前に、各チームは空間フィールドを持つモデルに対する管理画面の権限を監査するとともに、カスタムの翻訳処理やジオメトリ解析ロジックにDoSベクターへの露出がないかを確認しておくべきでしょう。

ANY.RUNのブラウザ内データ検査で検知・調査・対応をより迅速に。フィッシングの完全な可視化を実現し、SOCを強化してMTTRを削減しましょう

翻訳元: https://cyberpress.org/django-security-update-server-side-file-write-xss-dos/

ソース: cyberpress.org