AWS ECS漏洞ECScape:容器可劫持IAM角色无需逃逸

研究人员发现AWS ECS存在权限提升漏洞ECScape,允许低权限容器通过未记录的WebSocket协议窃取其他任务的IAM凭证,无需容器逃逸即可横向移动,影响EC2后端任务。

ECScape:新的AWS ECS漏洞允许容器劫持IAM角色而无需逃逸

在Black Hat USA 2025上,Sweet Security的Naor Haziz披露了Amazon ECS中存在一个重大的权限提升漏洞,该漏洞允许运行在EC2后端任务上的低权限容器从同一主机上的其他容器劫持更高权限的IAM角色。

该漏洞被命名为ECScape,源于ECS的内部凭证分发机制。ECS控制平面通过一个未记录的内部WebSocket协议——Agent Communication Service(ACS)——传递任务IAM凭证。如果容器攻击者首先从Instance Metadata Service(IMDS)获取EC2实例角色凭证,就可以窃听此协议。

“实际上,这意味着您ECS集群中一个受感染的应用程序可以通过窃取其凭证来承担更高权限任务的角色——只要它们运行在同一实例上,”Haziz在博客文章中说,并补充该漏洞还暴露了任务执行角色,一旦被攻破,可被滥用以提取秘密或工件。

Haziz最初旨在为ECS工作负载构建一个基于eBPF的实时监控工具。在此过程中,他拦截了ECS代理与AWS后端之间的通信作为调试的一部分,这时他注意到了这个未记录的WebSocket通道。

从低权限任务到特权IAM角色

由于IMDS的默认可用性,任何在基于EC2的ECS实例上的容器(具有低级访问权限)都可以读取为ECS代理准备的实例角色凭证。“不需要容器逃逸(无需主机root访问)——但需要通过容器自己的命名空间内的巧妙网络和系统技巧来访问IMDS,”Haziz指出,并补充访问IMDS允许任何容器冒充ECS代理。AWS有关于如何防止或限制对IMDS访问的文档。

凭借这些实例角色凭证,攻击者可以伪造通过ACS WebSocket的通信。这使他们能够拦截或请求其他运行中任务的IAM凭证,即使这些任务本应通过IAM角色隔离。本质上,受感染的容器通过伪装成负责管理和编排任务的编排器ECS代理来进行权限提升。

“被盗的密钥(IAM凭证)工作方式与真实任务的密钥完全相同,”Haziz说。“AWS CloudTrail会将API调用归因于受害者任务的角色,因此初始检测很困难——看起来像是受害者任务在执行操作。”这使得攻击者在日志中不可见,因为AWS认为受害者在做一切。

Fargate相对安全

Amazon的设计使EC2主机成为安全边界,而不是容器。当多个具有不同IAM角色的任务共享同一EC2时,通过ECScape进行横向提升的风险增加。AWS未立即回应CSO的评论请求。

Sweet Security建议的缓解措施包括禁用或限制来自不太受信任任务的IMDS访问,以便它们无法获取实例凭证,避免在同一EC2实例上共同托管低权限和高权限任务,以及切换到AWS Fargate,后者提供更好的任务隔离。

“AWS Fargate任务不与其他任务共享底层主机——每个Fargate任务在其自己的微VM中运行,具有其自己隔离的IMDS和ECS代理,”Haziz解释。“ECScape不适用于Fargate,因为没有实例的共租。”

CVE和PoC代码

已为ECScape请求CVE ID,Sweet Security已在GitHub上发布了该漏洞的概念验证(PoC)代码。Haziz还分享了ECScape的现场演示,并补充说未缓解的实例不需要用户方面的错误配置。“ECS on EC2的所有默认行为和设置足以使攻击生效,”他补充说。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计