Djangoに6件の修正、地理情報の機能から外へ通信させられるおそれ

Django が
脆弱性の概要
- 対象
- Django
- 悪用
- 確認されていない
- 影響
- 外部への通信やファイルの読み取りをさせられる
- 修正版
- 修正版あり
- 公表元
- Django / NVD
| 製品 | 対象のバージョン | 修正版 |
|---|---|---|
| Django 6.1系 | 6.1.3 より前 | 6.1.3 |
| Django 6.0系 | 6.0.10 より前 | 6.0.10 |
| Django 5.2系 | 5.2.19 より前(6件のうち5件) | 5.2.19 |
やること
Django は Python で Web システムを作るためのフレームワークです。Django の開発チームは11月3日に 6.1.3、6.0.10、5.2.19 を公開し、6件の欠陥を直しました。Django で動くシステムがある場合は、次の順で進めてください。
- 6.1系は 6.1.3、6.0系は 6.0.10、5.2系は 5.2.19 に上げてください。発表はすべての利用者にできるだけ早く上げるよう勧めています
- 地理情報の機能(
django.contrib.gis、GeoDjango)を使っている場合は、サーバーに入っている GDAL のバージョンも確かめてください。外部への通信を防ぐ修正の一部は、GDAL 3.9 以降でないと働きません - 発表の対象はサポート中の 6.1、6.0、5.2 の各系統と開発中の main です。それより前の系統は NVD の説明で評価していないとされ、当てはまる可能性があります
何が危ないのか
Django のセキュリティの方針で深刻度を分けると、6件のうち1件が moderate(中程度)、5件が low(低)です。NVD に登録された CVSS v4 の値は、4件が 6.9、残りの2件が 2.3 と 2.1 です。
いちばん深刻とされたのは CVE-2026-111362(moderate、CVSS 6.9)です。地図の形を表す GeoJSON という形式は、古い仕様では座標系(CRS)を URL で指定できました。地理情報の処理に使う GDAL という部品は、今もこの URL を読みに行きます。利用者が送った GeoJSON から形を作る場面では、検証、保存、検索のどこからでも、攻撃者が仕込んだ URL へ Django のプロセスの権限で通信させたり、ファイルを読ませたりできました。このように、サーバーに外部や内部への通信をさせる攻撃をサーバーサイドリクエストフォージェリー(SSRF)と呼びます。修正後は空間の項目に対する検索、フォームの GeometryField、GEOSGeometry が外部の座標系の参照を断ります。信頼できるデータを読み込むための DataSource と LayerMapping は、これまでどおり受け付けます。
CVE-2026-114582(low、CVSS 6.9)も同じ地理情報の機能の SSRF です。SpatialReference に渡した文字列を GDAL がそのまま解釈し、URL を読みに行ったりファイルを読んだりしていました。GEOSGeometry.transform() や GDALRaster の srid の設定など、ほかのいくつかの処理も同じです。外への通信を見ることでローカルのファイルの中身を知る攻撃も組み立てられた、と発表は書いています。
ほかの4件は、ファイルのアップロード、ログ、キャッシュ、管理画面の欠陥です。
- CVE-2026-108147(low、CVSS 6.9):
Content-Transfer-Encoding: base64を付けたファイルのアップロードを、FILE_UPLOAD_MAX_MEMORY_SIZEの上限にかかわらず全部メモリーにため込み、メモリーを使い果たすおそれがあります。NVD の説明では、6.0系は 6.0.4 以降、5.2系は 5.2.13 以降が対象です - CVE-2026-111211(low、CVSS 6.9):地理情報のフォームの
GeometryFieldが、受け付けなかった値を改行などの制御文字ごとログに書いていました。ログの行を偽造したり、見た目を変えたりされるおそれがあります - CVE-2026-113593(low、CVSS 2.3):
UpdateCacheMiddlewareとcache_page()が、Varyヘッダーに挙げたヘッダーを送らなかった要求と、空の値で送った要求に同じキャッシュの鍵を使っていました。片方向けに保存した応答がもう片方に返り、私的な情報が見えるおそれがあります - CVE-2026-113733(low、CVSS 2.1):管理画面で、閲覧だけを許された管理者に、ユーザーのモデルのパスワードのハッシュ値が全部表示されていました。
AUTH_USER_MODEL以外のユーザーのモデルか、パスワードの項目を親のモデルから受け継いだAUTH_USER_MODELを使っている場合です。5.2.19 の修正にこの件は入っておらず、NVD でも対象は 6.1 と 6.0 です
発表と NVD の説明に、悪用されたという記載はありません。
更新で変わる動き
修正版に上げると、2つの点で動きが変わります。
- キャッシュの鍵が、ヘッダーが無い場合と空の場合を分けるようになります。
Varyに挙げたヘッダーを送らなかった要求向けに保存した応答は使われなくなり、次の要求で保存し直されます - GDAL 3.9 以降では、
SpatialReferenceがファイルのパスや URL を受け付けなくなります。DICT:で始まる指定(ESRI::付きを含む)は、GDAL のバージョンにかかわらず断られます
GDAL が 3.9 より前の場合は、修正だけでは守りきれないと発表に書かれています。発表は、信頼できない入力には EPSG の一覧から直接引く整数の SRID を使い、GDAL が古いまま文字列を使うなら許可の一覧と照らすよう勧めています。新しい検査 gis.W001 は、GDAL が 3.9 より前のときに警告を出します。
中小企業が確かめること
委託して作ったシステムが Django で動いている場合は、Django のバージョンと、地理情報の機能や cache_page() を使っているかを委託先に聞いてください。店舗の地図や配達の範囲のように、利用者が地図の形を送れる画面があるシステムでは、地理情報の欠陥が当てはまる可能性があります。管理画面で閲覧だけの権限を渡している管理者がいる場合は、ユーザーのモデルの作りも確かめてもらってください。
自社で確かめること
- Django のバージョンを調べる`python -m django --version` か `pip show django` でバージョンを調べ、6.1.3、6.0.10、5.2.19 より前でないかを確かめてください。
- 地理情報の機能を使っているか聞く`django.contrib.gis`(GeoDjango)を使い、利用者が送った地図の形や座標系の文字列を受け付けていないかを開発の担当者に聞いてください。
- GDAL のバージョンを見る地理情報の機能を使っている場合は、サーバーの GDAL が 3.9 以降かを確かめてください。3.9 より前では修正だけでは防ぎきれません。
出典
- Django「Django security releases issued: 6.1.3, 6.0.10, and 5.2.19」
- Django「Django 6.1.3 release notes」
- Django「Django 6.0.10 release notes」
- Django「Django 5.2.19 release notes」
- NVD API「CVE-2026-111362」
- NVD API「CVE-2026-114582」
- NVD API「CVE-2026-108147」
- NVD API「CVE-2026-111211」
- NVD API「CVE-2026-113593」
- NVD API「CVE-2026-113733」



コメント 0
まだコメントはありません。