pythonフレームワーク「Django」の脆弱性 (CVE-2024-53907 / CVE-2024-53908)

セキュリティ脆弱性の概要

  1. インシデントタイプ: Djangoというオープンソースのウェブフレームワークに、セキュリティ脆弱性が発見された。
  2. 対象と原因: 最初の脆弱性(CVE-2024-53907)は、strip_tags()メソッドとstriptagsテンプレートフィルタを利用して、潜在的なサービス拒否攻撃が可能になる。HTMLエンティティの不完全なシーケンスによって引き起こされる。
  3. 対象と原因: 2番目の脆弱性(CVE-2024-53908)は、Oracleデータベース上のHasKey検索を利用して、潜在的なSQLインジェクション攻撃が可能になる。未検証のデータをlhs値として使用する場合に発生する。
  4. 影響を受けるシステム: Djangoのメインブランチ、5.1、5.0、4.2ブランチが影響を受けている。
  5. 対処方法: 脆弱性は各ブランチで修正され、新しいリリース(Django 5.1.4、5.0.10、4.2.17)が行われた。

脆弱性の詳細

  • CVE-2024-53907: strip_tags()メソッドとstriptagsテンプレートフィルタを利用して、潜在的なサービス拒否攻撃が可能になる。
    • 対象: DjangoのHTMLエンティティ処理機能
    • 原因: HTMLエンティティの不完全なシーケンスによって引き起こされる

例えば以下のような、不完全なHTMLエンティティ(&nbspの末尾のセミコロンが欠けている)を大量に含む文字列を作成するコードによって、大量のCPUリソースを消費してしまい、サーバが過負荷になる可能性があります。

from django.utils.html import strip_tags

malicious_input = "Hello&nbsp" * 1000000

result = strip_tags(malicious_input)
  • CVE-2024-53908: HasKey検索を利用して、潜在的なSQLインジェクション攻撃が可能になる。
    • 対象: DjangoのOracleデータベース上のHasKey検索機能
    • 原因: 未検証のデータをlhs値として使用する場合に発生する

例えば、以下のようなユーザ入力を行うことで、あるテーブル内の全てのデータを取得したりすることができます。

from django.db.models import Q

user_input = "') OR 1=1 -- "

query = MyModel.objects.filter(data__haskey=user_input)

対処方法

  • 脆弱性は各ブランチで修正され、新しいリリースが行われました。
  • Django 5.1.4、5.0.10、4.2.17の新しいリリースをダウンロードしてインストールすることが推奨されます。

参照

https://www.djangoproject.com/weblog/2024/dec/04/security-releases/

セキュリティに関する情報をフォロー