pgadmin4-9.10CVE-2025-13780命令执行

admin 2025-12-25 03:01:04 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: pgAdmin4v9.10存在CVE-2025-13780命令执行漏洞。其PLAIN恢复元命令过滤器因正则表达式未过滤UTF-8BOM头,导致攻击者可利用特殊序列绕过检测。当psql执行恢复时剥离BOM并执行恶意命令。9.11版本通过psql受限模式修复此问题,9.10版本受影响,建议升级或修复。 综合评分: 94 文章分类: 漏洞分析,漏洞预警,代码审计,WEB安全


cover_image

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

原因:

  1. SQL 文件以二进制模式打开。
  2. 该正则表达式仅将反斜杠前的空格和制表符视为可忽略项。
  3. 在反斜杠前放置 UTF-8 BOM(EF BB BF)或类似序列可以防止被检测到。
  4. pgAdmin错误地判定该文件不包含任何元命令。
  5. 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 命令执行》

评论:0   参与:  2