研究者发现AWS API MCP Server存在高危漏洞,服务启动时安全策略加载失败可导致策略检查被永久绕过,CVSS 4.0评分7.3。

CVE-2026-16584 在 AWS API MCP Server 中教会我的,关于 MCP 安全、fail-open 系统以及我们在 AI 代理与真实基础设施之间设置的控制机制。
2026 年 7 月 23 日,AWS 发布了一份安全公告,涉及我在 AWS API MCP Server 中报告的一个漏洞。该漏洞被分配了 CVE-2026-16584,评级为高危,CVSS v4.0 得分为 7.3。
我的名字出现在致谢名单中,作为报告该漏洞的独立研究人员。这对我来说是一个有意义的时刻。我职业生涯的大部分时间都在构建后端系统,最近我一直在密切关注 AI 代理和 MCP 服务器周围的安全边界。
尽管如此,我不想让这篇文章成为一场胜利的庆祝。真正有趣的是这个失败本身,因为它容易理解、容易低估,而且远远超出了一个开源项目的影响。
以下是简要版本:
即使用于强制执行安全策略的数据未能加载,服务器仍然可以启动。一旦发生这种情况,在进程的整个生命周期内,策略检查都可能被跳过。
服务器在运行。安全策略却没有。
披露说明:本文仅使用 AWS 安全公告中公开的信息。我不会发布概念验证、分步复现步骤、私下通讯、内部日志或 AWS 尚未公开的细节。
Model Context Protocol,即 MCP,给 AI 助手提供了一种连接工具和外部系统的标准方式。AWS API MCP Server 允许助手通过 AWS CLI 命令与 AWS 服务进行交互。
这很有用,但也使服务器处于一个敏感的边界上。模型不再只是生成文本。它可以对真实的云基础设施发起操作请求。
该服务器包含一个可选的、用户配置的安全策略。管理员可以使用该策略在选定的 AWS 操作执行之前拒绝或 gating(门控)它们。
在正常操作中,流程很简单:
服务器加载执行配置策略所需的数据。
工具请求到达。
请求的 AWS 操作根据策略进行检查。
操作被允许、拒绝或送入门控。
CVE-2026-16584 影响第一步,然后改变了第三步发生的情况。
AWS API MCP Server 在启动期间加载其策略执行数据。根据公告,如果该初始化失败,进程可以继续运行,而执行数据可能不可用。
当后续请求到达时,策略检查可能被跳过。当安全策略被配置但未启用 fail-closed 模式时,配置的拒绝和门控规则不会被查询。更重要的是,这不仅限于单个请求。服务器可以在那种较弱的状态下保持整个进程生命周期。
初始化失败在生产环境中会发生。依赖超时。文件格式错误。权限不对。连接质量下降。这些都不稀奇。
安全问题是应用程序在失败后做什么。
在这种情况下,缺少执行状态可能导致 permissive(宽松)行为。这是一个经典的 fail-open 安全问题:控制机制变得不可用,但受保护的操作可以继续。
守卫不是在请求期间被击败的。它在请求到达之前就已经缺失了。
当人们讨论 AI 安全时,对话很快转向提示注入、模型操纵、越狱和恶意工具描述。这些是真实的问题。但这个漏洞不是由模型做了一些聪明的事情引起的。
它是 AI 执行边界处的一个传统后端安全故障。
这个区别很重要。MCP 服务器位于代理意图和外部操作之间。如果权限检查、审批门控、租户边界、工具白名单或沙箱不存在,模型不需要打破那个控制。应用程序可能已经在没有它的情况下运行了。
这就是为什么代理式 AI 安全不能简化为更好的提示。完整的执行路径很重要:
代理使用哪些凭证?
哪些操作被暴露为工具?
授权在哪里强制执行?
当执行无法初始化时会发生什么?
当安全依赖不健康时,服务器是否保持健康?
系统能否区分"策略已禁用"和"策略加载失败"?
这些是软件架构问题,不是语言模型问题。
准确描述影响很重要。
CVE-2026-16584 在受影响的 MCP 服务器条件下绕过了可选的安全策略层。它没有从为服务器配置的凭证中移除 AWS IAM 权限。
如果这些凭证只允许对少量资源进行只读访问,IAM 会继续强制执行该边界。如果凭证范围很广,缺失的 MCP 策略层会使更大范围的操作可用。
因此,有效风险在很大程度上取决于凭证范围。
这是一个实际例子,说明了为什么 AWS IAM 最小权限很重要。最小权限不仅仅是防止预期用户做太多。当另一个安全层以意外方式失败时,它也限制了损害。
MCP 策略可以添加有用的上下文特定限制,但不应成为 AI 代理和高影响云操作之间的唯一边界。
公告将此问题映射到 CWE-455:Failed Initialization 上的 Non-exit(初始化失败时不退出)。名称听起来很干,但背后的设计问题出现在许多系统中。
想象一个具有三种可能状态的安全组件:
策略加载成功。
管理员故意禁用了策略。
管理员配置了策略,但加载失败。
第二种和第三种状态绝不能被等同对待。
一种是明确的配置决策。另一种是安全失败。如果两者在内存中都成为相同的空、null 或类似 false 的值,请求处理代码很容易将"不可用"解释为"没有要强制的内容"。
这不仅仅是 MCP 的问题。同样的模式可以影响:
授权配置;
沙箱初始化;和
密钥及身份提供者。
当这个值决定系统被允许做什么时,缺失的值不是中性的。
这一发现改变了我思考审查代理基础设施的方式。我不仅会测试拒绝规则是否有效。我还会通过其失败状态追踪控制。
这是我會問的問題:
如果策略引擎无法初始化,服务器是否仍能报告自己为就绪?
"配置禁用"和"加载失败"是否有不同的表示?
就绪检查是否包含安全关键依赖?
如果策略数据在启动后变得不可用会发生什么?
在执行降级时,受保护的请求是否被拒绝?
启动错误是否只在日志中可见,还是实际上会阻止不安全操作?
测试是否涵盖了格式错误的配置、超时、部分加载和恢复?
底层 IAM 角色是否只包含此代理所需的权限?
关键测试不仅是:
安全控制是否阻止了操作?
当安全控制无法阻止任何操作时,应用程序是否能继续运行?
AWS 在 awslabs.aws-api-mcp-server 版本 1.3.47 中修复了此问题。
任何使用受影响版本(从 0.2.13 到 1.3.46)的用户都应升级到最新版本。Fork 和衍生项目应确认包含相关修复,而不是假设其实现不受影响。
AWS 公告还为无法立即升级的用户列出了两项措施:
使用最小权限 IAM 凭证运行服务器,范围限定为特定任务。
如果在连接降级时启动了服务器,请在连接恢复后重新启动它,以便加载所需的策略数据。
我会添加一项操作检查:验证每个环境中实际运行的版本。更新依赖声明不等于确认每个已部署的实例都已被替换。
我私下报告了这个问题,并通过协调漏洞披露流程与 AWS 合作。漏洞在我写公开文章讨论其设计含义之前就已修复。
负责任的披露比立即发布发现要慢,但顺序很重要。用户需要在研究人员将漏洞转化为公开内容之前获得补丁和清晰的缓解指导。
出于同样的原因,我将讨论保持在架构层面。这里有足够的信息让工程师识别和测试失败模式,而不会将文章变成利用指南。
我感谢 AWS 调查了该报告、发布了修复方案、发布了公告,并认可了我的贡献。
最值得记住的安全漏洞并不总是最复杂的。
许多审查专注于寻找绕过运行中控制的聪明方法。CVE-2026-16584 指向一个更简单的问题:
如果控制从未启动会发生什么?
随着 MCP 采用的增长,我们将继续将 AI 代理连接到云平台、数据库、部署系统、内部 API 和其他高影响工具。这些系统的安全性将取决于远不止模型行为。它将取决于普通的工程细节:初始化、状态处理、可就绪性、凭证、错误路径和安全默认值。
我的主要收获是一句话:
如果策略没有就绪,服务器就没有就绪。
这个原则适用于远不止这一个 AWS API MCP Server 漏洞。
如果你正在构建或审查 MCP 服务器,请检查其启动失败路径。它们可能比正常路径更能告诉你其真实的安全状况。
AWS 安全公告:CVE-2026-16584 — AWS API MCP Server 安全策略绕过(通过启动失败)
NVD CVE-2026-16584 条目
CWE-455:Failed Initialization 上的 Non-exit
Lav Kumar Vishwakarma 是一名首席后端工程师和独立安全研究员,从事代理式 AI 安全、MCP 权限边界、安全工具执行、运行时隔离和生产 AI 系统方面的工作。AWS credited him for responsibly reporting CVE-2026-16584.