文章总结: pgAdmin存在CVE-2025-13780远程代码执行漏洞,其PLAIN恢复过滤器的正则未处理UTF-8BOM,导致攻击者可利用特殊字节序列绕过检测。pgAdmin调用psql时剥离BOM执行恶意元命令,引发RCE。受影响版本为9.10快照,9.11+版本不受影响。文档含代码分析、原理及PoC,建议用户升级并审查恢复逻辑。 综合评分: 85 文章分类: 漏洞预警,漏洞POC,漏洞分析,代码审计,WEB安全
漏洞速递 | CVE-2025-13780 pgAdmin RCE漏洞
渗透Xiao白帽
2025年12月19日 18:39 北京
文章来源:TtTeam
pgAdmin 中为修复 Issue 9320 而引入的 PLAIN 恢复元命令过滤器,无法检测到以 UTF-8 字节顺序标记 (EF BB BF) 或其他特殊序列开头的 SQL 文件。该过滤器使用has_meta_commands()正则表达式扫描原始字节。由于正则表达式并未将这些字节视为可忽略项,因此诸如 ! 之类的元命令无法被检测到。当 pgAdmin 使用 --file 参数调用 psql 时,psql 会去除这些字节并执行命令。这可能导致在恢复操作期间执行远程命令。
已确认受影响:
pgAdmin 9.10 快照
提交:63ee81202b65e1e8923eb1b917b49312a6fb7df2(2025-11-13)
可能受到影响:
has_meta_commands()任何包含来自提交的补丁的版本1d397395f75320ca1d4ed5e9ca721c603415e836
- 9.11+:普通恢复操作在 psql 受限模式下运行
(\restrict,因此元命令现在会被 psql 本身阻止。 - 9.10:易受过滤器绕过攻击。
细节
web/pgadmin/tools/restore/__init__.py- 功能
has_meta_commands()
相关代码(来自已修复版本):
def has_meta_commands(path, chunk_size=8 * 1024 * 1024): pattern = re.compile(br'(^|\n)[ \t]*\\')
with open(path, "rb") as f: prev_tail = b"" while chunk := f.read(chunk_size): data = prev_tail + chunk
if pattern.search(data): return True
prev_tail = data[-10:]
return False
原因:
- SQL 文件以二进制模式打开。
- 该正则表达式仅将反斜杠前的空格和制表符视为可忽略项。
- 在反斜杠前放置 UTF-8 BOM(EF BB BF)或类似序列可以防止被检测到。
- pgAdmin错误地判定该文件不包含任何元命令。
- psql 在读取时会剥离 BOM,并正常执行元命令。
(PoC)
带有 BOM 前缀的有效载荷:
\xef\xbb\xbf\\!echo HACKED_FROM_BOM > /tmp/bom_ran SELECT 1;
控制载荷:
\\!echo SHOULD_BE_BLOCKED SELECT 1;
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:渗透Xiao白帽 《漏洞速递 | CVE-2025-13780 pgAdmin RCE漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论