CVE-2025-1094:PostgreSQL SQL 注入漏洞深度解析

4 阅读2分钟

CVE-2025–1094:PostgreSQL SQL 注入漏洞

Ajay Monga 撰稿 | 阅读时间 2 分钟 · 2025年2月19日

CVE-2025–1094 是一个影响 PostgreSQL 的高严重性 SQL 注入漏洞,由 Rapid7 研究员 Stephen Fewer 发现,已于 2025 年 2 月 13 日发布补丁。以下是详细分析:

漏洞概述

  • 根本原因:PostgreSQL 的 libpq 函数(PQescapeLiteral()PQescapeIdentifier()PQescapeString()PQescapeStringConn())中对引号语法的中和处理不当,在特定场景下允许 SQL 注入。
  • 可利用条件
    • 当这些函数转义后的输入被用于构建 psql(PostgreSQL 的交互式终端)命令时。
    • 当命令行参数在编码不匹配(client_encoding=BIG5server_encoding=EUC_TWMULE_INTERNAL)的情况下被处理时。

影响

  • 任意代码执行:攻击者可利用 SQL 注入,通过 psql 的元命令(例如,\! 后跟 shell 命令)来执行操作系统命令。
  • 任意 SQL 执行:可注入恶意 SQL 语句来操纵数据库。

受影响版本

  • PostgreSQL 17.3 之前的所有版本
  • PostgreSQL 16.7 之前的所有版本
  • PostgreSQL 15.11 之前的所有版本
  • PostgreSQL 14.16 之前的所有版本
  • PostgreSQL 13.19 之前的所有版本

修复方案

  • 升级 PostgreSQL:为受影响版本应用补丁。

缓解措施与最佳实践

  • 验证 UTF-8 编码:在将输入传递给 psql 之前,拒绝包含无效 UTF-8 序列的输入。
  • 使用参数化查询
    • 使用参数化查询或 ORM 框架,以尽量减少使用原始输入直接调用 psql
  • 限制 psql 权限
    • 限制 PostgreSQL 用户在操作系统级别的权限,以降低远程代码执行的影响。
  • 监控日志
    • 对编码为“UTF8”的重复无效字节序列错误进行标记,这可能表明存在利用尝试。

参考链接