11 月 6 日,AWS 发布安全通告 2026-166-AWS,Babelfish for PostgreSQL 的 TDS 协议层出了两个问题。其中最重的是 CVE-2026-119923,CVSS 3.1 9.8 分:TDS 预登录解析器的堆溢出,攻击者不需要任何账号,往 TDS 端口(默认 1433)发一个畸形 prelogin 包,就可能以数据库进程用户的身份在主机上执行任意操作系统命令。

Babelfish CVE-2026-119923,CVSS 9.8 TDS 预登录堆溢出:未认证 RCE,升到 4.10 / 5.6 / 6.1

洞开在登录之前

Babelfish 的卖点是让 PostgreSQL 直接跑 SQL Server 的应用,不改代码、不换驱动。代价是 PG 前面多了一个 TDS 协议面:Babelfish 要先理解 SQL Server 的握手(prelogin),再把请求翻译成 PG 能执行的 SQL。

这次的洞就开在握手这一步。prelogin 发生在认证之前,解析器收到畸形包就堆溢出,攻击者连用户名都不用给。拿到的是数据库进程用户的执行权——对自建部署来说,通常就是运行 PostgreSQL 的操作系统账号。

同一解析器还合并了一个相关的空指针解引用问题,一并修了。

影响范围:先查这两件事

受影响的是 Babelfish 扩展 1.0–1.5、2.1–2.15、3.1–3.12、4.0–4.8、5.1–5.4,以及带 Babelfish 的 Amazon Aurora PostgreSQL。DBA 先查两件事:装没装 Babelfish、1433 对外开没开。没装 Babelfish 的不受影响;装了但 1433 只对内网开放的,攻击面小得多。

三天三条:TDS 层是重灾区

这不是孤立的一条。同一个组件、同一周:

  • 11 月 3 日,CVE-2026-119922(8.8 分):已认证用户提权,通告 2026-165-AWS 明确写了无 workaround,必须升级。
  • 11 月 6 日,CVE-2026-119923(9.8 分):预登录堆溢出,未认证 RCE。
  • 11 月 6 日,CVE-2026-119924(8.1 分):TDS RPC 过程名解析器越界读,已认证用户可读相邻进程内存或造成拒绝服务。

三条都在 TDS 协议层。兼容层每多一种协议,就多一个攻击面——这次的代价是 TDS 解析器成了 PG 之前的第一道门。

利用现状:没 PoC 不等于安全

截至 11 月 8 日核查:无公开 PoC 确认、未列入 CISA KEV、EPSS 0.6%。但三个条件凑齐了——预登录、无认证、RCE——补丁窗口不会留太久。没 PoC 只是还没人公开,不是不好利用。

该干什么,照着做

  1. 升级 Babelfish 到 4.10 / 5.6 / 6.1 或更高版本;Aurora 升到对应的已修补集群版本(如 17.10.1 (5.6.0)、18.4.1 (6.1.0)),并应用待处理的维护
  2. 升不上去的,先把 1433 收到内网:VPC 安全组里只放行可信来源,应用服务器能到就行,公网不要直接暴露
  3. 自查:确认扩展版本、确认监听端口,查一下 1433 有没有暴露在公网;有 Babelfish 的测试库、演示库也一样处理,别只盯着生产

分数口径

标题的 9.8 分是 CVSS 3.1,AWS 作为 CNA 给出的评分;同一条漏洞的 CVSS 4.0 评分是 9.3,NVD 尚未给出自己的评估。两个数都是官方口径,版本不同而已。

原文作者: liups.com

原文链接: https://liups.com/posts/4d752968/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议