文章总结: pgAdmin4v9.10存在CVE-2025-13780命令执行漏洞。其PLAIN恢复元命令过滤器因正则表达式未过滤UTF-8BOM头,导致攻击者可利用特殊序列绕过检测。当psql执行恢复时剥离BOM并执行恶意命令。9.11版本通过psql受限模式修复此问题,9.10版本受影响,建议升级或修复。 综合评分: 94 文章分类: 漏洞分析,漏洞预警,代码审计,WEB安全
pgadmin4-9.10 CVE-2025-13780 命令执行
TtTeam
2025年12月19日 15:19 中国香港
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;
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:TtTeam 《pgadmin4-9.10 CVE-2025-13780 命令执行》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论