跳至主要内容

CVE-2026-87911 – 只读强制绕过允许在 Amazon awslabs postgres-mcp-server 的 SQL 验证组件中执行操作系统命令

公告 ID:2026-104-AWS
范围:AWS
内容类型:重要提示(需要注意)
发布日期:2026 年 9 月 9 日下午 12:30(太平洋夏令时)

描述:

awslabs.postgres-mcp-server 是一个实现 Postgres MCP 服务器的 python 包。我们发现了 CVE-2026-87911,在 1.1.7 之前的 Amazon awslabs postgres-mcp-server 中,以只读方式强制执行 SQL 验证组件时存在操作系统命令注入漏洞,可能允许未经身份验证的参与者将有意设计的 COPY ...TO PROGRAM 语句放入特定内容中,当经过身份验证的用户在默认只读模式下与 MCP 服务器交互时,就会处理该内容,从而使参与者能够在自管理的 PostgreSQL 服务器的主机上执行操作系统命令。

受影响的版本:

1.1.7 之前的 awslabs.postgres-mcp-server,自管理的 PostgreSQL 部署配置文件(PG_WIRE_PROTOCOL 连接方法),其中配置的数据库角色持有超级用户或 pg_execute_server_program。

解决方法:

此问题已在 pypi 的 awslabs postgres-mcp-server(python 包)版本 1.1.7 中予以解决。

临时措施:

最强的控制措施是使用专用 Postgres 角色连接 MCP 服务器,该角色仅拥有实际需要的权限,这样一来,数据库自身都会强制执行边界,任何 SQL 访问数据库皆是如此。特别注意:

  • 请勿以 superuser、rds_superuser 或集群主用户身份进行连接。这些角色可以绕过行级安全性,可以读取凭证目录 (pg_authid, pg_user_mappings),并且可以终止其他会话。
  • 对于只读用途,仅针对代理所需的架构授予 CONNECT + USAGE + SELECT,并在角色级别强制执行只读事务。
  • 对于读/写用途,仅授予必需的特定 INSERT/UPDATE/DELETE 权限,范围仅限于必要的架构和表格。

结合最小权限角色(数据库层实施)和拦截列表(应用层实施),可为您提供深度防御:即使有查询绕过了禁用列表,角色的权限仍会限制其可执行的操作范围。

参考:

致谢:

我们非常感谢 Mordehai Attia(Corsen AI)和 Ryan von Brubeck 通过协调漏洞披露流程针对此问题进行的合作。


如有任何安全问题或疑虑,请发送电子邮件至 aws-security@amazon.com。