セキュリティ脆弱性の概要
- インシデントタイプ: Djangoというオープンソースのウェブフレームワークに、セキュリティ脆弱性が発見された。
- 対象と原因: 最初の脆弱性(CVE-2024-53907)は、
strip_tags()
メソッドとstriptagsテンプレートフィルタを利用して、潜在的なサービス拒否攻撃が可能になる。HTMLエンティティの不完全なシーケンスによって引き起こされる。 - 対象と原因: 2番目の脆弱性(CVE-2024-53908)は、Oracleデータベース上の
HasKey
検索を利用して、潜在的なSQLインジェクション攻撃が可能になる。未検証のデータをlhs値として使用する場合に発生する。 - 影響を受けるシステム: Djangoのメインブランチ、5.1、5.0、4.2ブランチが影響を受けている。
- 対処方法: 脆弱性は各ブランチで修正され、新しいリリース(Django 5.1.4、5.0.10、4.2.17)が行われた。
脆弱性の詳細
- CVE-2024-53907:
strip_tags()
メソッドとstriptagsテンプレートフィルタを利用して、潜在的なサービス拒否攻撃が可能になる。- 対象: DjangoのHTMLエンティティ処理機能
- 原因: HTMLエンティティの不完全なシーケンスによって引き起こされる
例えば以下のような、不完全なHTMLエンティティ( の末尾のセミコロンが欠けている)を大量に含む文字列を作成するコードによって、大量のCPUリソースを消費してしまい、サーバが過負荷になる可能性があります。
from django.utils.html import strip_tags
malicious_input = "Hello " * 1000000
result = strip_tags(malicious_input)
- CVE-2024-53908:
HasKey
検索を利用して、潜在的なSQLインジェクション攻撃が可能になる。- 対象: DjangoのOracleデータベース上の
HasKey
検索機能 - 原因: 未検証のデータをlhs値として使用する場合に発生する
- 対象: DjangoのOracleデータベース上の
例えば、以下のようなユーザ入力を行うことで、あるテーブル内の全てのデータを取得したりすることができます。
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/