AWS(亚马逊云服务)近日修复了其七个软件开发工具包(SDK)中的一个漏洞,该漏洞可将一个看似普通的区域字段变成窃取云凭证的通道。产品安全初创公司Pi Inc.在追踪单个漏洞报告时,发现该缺陷在AWS SDK中重复出现了约2500次,并于今日披露了这一发现。

问题的根源在于AWS SDK构建主机名的方式。每个SDK都会根据模板构建其调用的主机名,区域字段被插入到https://{service}.{region}.amazonaws.com的中间位置。一个合法的区域看起来像us-east-1。但在存在漏洞的代码路径上,没有任何机制检查该字段的合法性。

打开网易新闻 查看精彩图片

许多应用程序允许用户选择区域,Pi的研究人员因此输入了“@attacker.com#”作为区域值。SDK构建出https://sts.@attacker.com#.amazonaws.com,并向该地址签署请求。URL解析器将@符号之前的所有内容视为用户名,而#符号之后的内容则被丢弃。最终存活的地址是attacker.com——攻击者的服务器。

漏洞如何变成凭证窃取

将普通的API调用重定向会泄露请求签名,这尚可承受。但Elastic Kubernetes Service(EKS)工作负载、Cognito应用程序和OpenID Connect集成所调用的AssumeRoleWithWebIdentity请求则完全不同。该请求在其主体中携带一个不记名令牌(bearer token),且以明文传输。

在一次授权参与的测试中,目标运行在EKS内部。被重定向的调用将Pod的Kubernetes服务账户令牌发送到了测试人员控制的服务器上。将该令牌重放给AWS Security Token Service,即可在客户账户内返回实时凭证。

Pi表示,它只将原始报告交给了其平台,没有提供任何针对特定语言的规则,也没有提供需要检查的服务列表。该软件将易受攻击的代码抽象为该公司所称的“反模式”(anti-pattern)——一种对行为而非语法的描述——然后在整个代码库中寻找该行为。

一个生成器缺陷,波及数百个服务

AWS从共享服务模型为超过400个服务生成SDK客户端,因此生成器中的一次缺失检查会同时影响所有服务。Python和Ruby SDK多年来一直对此有所防护,而大多数其他SDK则没有。

修复方案仅有几行代码:在区域字段到达主机名之前,将其作为主机标签进行验证——仅允许字母、数字和连字符。该验证逻辑位于每个生成的SDK内部,而非集中在某个共享位置。AWS最终为此编写了七次相同的验证代码。

Pi于2025年10月14日向AWS报告了该漏洞。第一轮补丁在一周内提交。但安全公告直到2026年1月8日和1月9日才发布,Go v2 SDK是最后一个修复的。只有.NET SDK获得了CVE编号(CVE-2026-22611),CVSS评分为3.7,等级为低危,Pi联合创始人兼首席执行官Guy Arazi被列在致谢名单中。

AWS定性为“纵深防御”,Pi认为评级不完整

AWS并未将此事定性为漏洞。其安全公告称这一变更是“纵深防御增强”。AWS表示,根据共享责任模型,验证该输入是开发者的职责。

Pi则认为该评级不完整。该公司在第三方平台中实际运行该漏洞的场景下进行了测试——这些平台嵌入了AWS SDK并暴露了区域字段——结果显示七个平台中有七个均可被利用。每个平台都将实时AWS凭证泄露到了回调服务器。