FlawOpen

flawopen.com/AI Security/cve-2026-107322-aws-databases-on-aws-psql-command-injection

● CVE-2026-107322 · CVSS 7.8[1], [4] · 高危
安全研究 · FlawOpen

CVE-2026-107322:AWS Agent 插件 psql 命令注入

CVE-2026-107322 影响 AWS databases-on-aws 插件中的可选 psql helper。输入过滤器漏掉了 psql 元命令;远程内容只有在 agent 随后将该值传给 helper 时,才可能导致主机命令执行。请升级到 1.7.1 或更高版本。[1], [2], [4]

CVSS 向量CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H[1], [4]
💡 通俗易懂的原理解析 (ELI5)

可以把它想成一名职员检查便条里的 SQL 指令,却忘了数据库客户端还有自己的命令语言。外部内容只有在 agent 决定把它交给本地 helper 时,才会到达第二个解释器。修复会在 helper 执行前拒绝这种语法。[1], [2]

核心概念与专有名词

psql 元命令
由 PostgreSQL 交互式客户端解释、而非数据库服务器解释的指令。这是独立于 SQL 的解析边界。[2], [3]
CWE-184:禁止输入列表不完整
过滤器拒绝部分禁止形式,却漏掉了下游组件会赋予特殊含义的另一种形式。[2], [4]
agent 接收的内容
AI agent 从远程或不可信来源接收的内容。AWS 公告未说明构造内容如何送达 agent。[1]
本地 helper
与 agent 在同一主机运行的可选 psql 连接脚本;系统命令使用 helper 进程权限。[1], [3]

框架映射

  • 本指南所述弱点的 CWE 参考: CWE-184

攻击执行流程分解

步骤 1

不可信内容到达 agent

AWS 表示,未认证的远程攻击者可以提供供 agent 接收的内容。公告未说明来源或传递过程;不要假设特定的 prompt injection 路径。[1], [2]

步骤 2

agent 将值传给可选 helper

漏洞条件要求 agent 使用构造的数据库命令值调用本地 helper。仅接收内容不是文档所述的执行触发条件。[1], [3]

步骤 3

SQL 检查未覆盖 psql 命令语言

helper 过滤语句分隔符和 SQL 注释,却未拒绝剩余反斜杠。psql 会在本地解释元命令。[2], [3]

步骤 4

helper 执行前拒绝元命令语法

上游修复在原有 SQL 检查前检查剩余反斜杠。请升级到 1.7.1 或更高版本,并核实每个 agent 环境的实际版本。[1], [2], [3]

根本原因剖析 (Root Cause)

AWS 与维护者将 CVE-2026-107322 归因于 databases-on-aws 可选 psql 连接 helper 中不完整的输入过滤。修复前,校验会从工作副本中移除单引号括起的 SQL 字面量,并拒绝 SQL 语句分隔符和注释,但会留下 psql 客户端按元命令语法解释的反斜杠。修复会在处理字面量后、现有检查前拒绝这些残留反斜杠,从而补上遗漏的解析边界。[1], [2], [3]

源代码对比:漏洞与安全实现

上游补丁会在删除单引号 SQL 字面量后、调用 psql 和执行其他检查前拒绝剩余反斜杠。该片段经过简化,不是通用 SQL 解析器;原有引号处理存在已记录的边界情况。对于复杂或不可信查询,请按 AWS 建议避免使用可选 shell helper,改用 DSQL MCP server 或人工审核的 SQL。进程应遵循最小权限原则;这只能限制影响,不能替代升级。[2], [3]

源码摘录: plugins/databases-on-aws/scripts/psql-connect.sh — --command 过滤器的简化片段

存在漏洞的实现
# 精简代码片段:面向 SQL 的检查未拒绝 psql 元命令语法。
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q ';'; then
  echo "Error: multiple SQL statements are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
  echo "Error: SQL comments are not allowed." >&2
  exit 1
fi
psql --command "$COMMAND"
加固后的安全修复
# 精简代码片段,依据上游 1.7.1 版本的修复。
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q '\\'; then
  echo "Error: psql meta-commands are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q ';'; then
  echo "Error: multiple SQL statements are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
  echo "Error: SQL comments are not allowed." >&2
  exit 1
fi
psql --command "$COMMAND"

工程与系统安全加固清单

参考来源

← AI Security Directory →