Django Web Vulnerability Allows Attackers to Execute SQL Injection
2025/09/04 gbhackers — Django 開発チームが公表したのは、FilteredRelation 機能に存在する、深刻度の高い SQL インジェクションの脆弱性に対するセキュリティ・アップデートのリリースである。この脆弱性 CVE-2025-57833 を悪用する攻撃者は、想定外のクエリ・パラメータを作成し、有害なデータベース・コマンドを実行する可能性を手にする。Django 5.2/5.1/4.2 を利用するユーザーにとって必要なことは、速やかにアップデートを行い、アプリケーションを保護することだ。

Django Web 脆弱性の詳細
Django の FilteredRelation 機能は、フィルターに基づいたカラムの追加を実現することで、開発者による複雑なデータベース・クエリの作成を支援するものだ。
しかし、QuerySet.annotate() または QuerySet.alias() と組み合わせて使用した場合に、ディクショナリ・キーが適切に検証されないという問題が生じていた。
したがって、それを悪用する攻撃者は、カラム・エイリアスの構築方法を変更する悪意のディクショナリを渡し、データベース・クエリに SQL コードを挿入するという手段を得る。この種の攻撃が成功すると、機密データの漏洩や、無許可でのレコード変更などが生じる可能性がある。
| CVE ID | Description | Severity | Affected Versions | Fixed Releases |
| CVE-2025-57833 | SQL injection in FilteredRelation column aliases | High | main, 5.2, 5.1, 4.2 | 5.2.6, 5.1.12, 4.2.24 |
影響を受けるバージョン
発見時点でサポートされている、すべてのバージョンが影響を受けている、その中には、以下のバージョンが含まれる。
Django main (開発ブランチ)
Django 5.2
Django 5.1
Django 4.2
すでに Django チームは、それぞれのブランチにパッチを適用し、このエイリアス処理ロジックを修正している。これらのパッチは、Django GitHub リポジトリから入手できる。
解決策とパッチ
このセキュリティ修正は、メイン開発ブランチと、メンテナンス対象のリリース・ブランチにマージされている。したがってユーザーは、以下のコミットからパッチを確認して適用できる。
メインブランチ:51711717098d3f469f795dfa6bc3758b24f69ef7
5.2 ブランチ:4c044fcc866ec226f612c475950b690b0139d243
5.1 ブランチ:102965ea93072fe3c39a30be437c683ec1106ef5
4.2 ブランチ:31334e6965ad136a5e369993b01721499c5d1a92
これらのパッチを適用した後に、開発者にとって必要なことは、本番環境へのデプロイの前に、テスト・スイートを実行することである。
このアップグレード・プロセスを簡素化するために、Django チームは新しいリリースを公開した。それぞれのリリースには、セキュリティ修正と、その他の軽微な改善が含まれている。
開発者にとって必要なことは、Django 5.2.6/5.1.12/4.2.24 へとアップグレードし、アプリケーションを SQL インジェクション攻撃から保護することだ。
各リリースでは、検証に PGP キー ID 3955B19851EA96EF を使用している。開発者は、アップグレードを行う前に、ダウンロード内容を必ず確認すべきである。
なお、Django でセキュリティ上の問題を発見した場合は、自ら公開するのではなく、security@djangoproject.com まで詳細をメールで知らせる必要がある。このチームは、ユーザー保護のための、厳格な情報開示ポリシーに従っている。詳しくは、Django のセキュリティ・ポリシーを参照してほしい。
Django の FilteredRelation 機能に潜む、SQL インジェクションの脆弱性が FIX しました。具体的には、QuerySet.annotate() や alias() と併用した際に、ディクショナリ・キーの検証が不十分となり、攻撃者が細工した入力を渡すと、カラム・エイリアスに悪意の SQL コードを注入できるという問題が生じました。この仕組みにより、データの漏洩や改竄といった深刻な被害に繋がる可能性があると、この記事は指摘しています。ご利用のチームは、ご注意ください。よろしければ、Django で検索も、ご参照ください。
You must be logged in to post a comment.