flawopen.com/AI Security/cve-2026-103956-aws-loom-authentication-bypass
CVE-2026-103956:AWS Loom 身份验证绕过
CVE-2026-103956 影响 AWS Labs 的 Loom for AWS 1.6.1 之前版本:未配置身份提供方时,任何网络客户端都可能获得超级管理员权限。升级到 1.7.0 或更高版本可同时覆盖此问题及相关修复;1.6.1 已修复此身份验证绕过。[1], [5]
一栋楼没有前台接待员,软件却把每位访客都当成最高管理员,仿佛无人核验也能领取主钥匙。修复后,未配置身份提供方时系统会拒绝进入;本地开发例外必须显式开启,并且客户端必须来自同一台机器。[1], [4]
核心概念与专有名词
身份提供方(IdP)- 用于验证 Loom 用户身份的已配置系统。Cognito 用户池和外部 IdP 都未配置时会触发受影响条件。[1]
控制平面- 管理代理集成、凭据和角色策略的 API 与管理层。[1]
安全失败- 缺少必需的身份服务时拒绝请求,而不是默认授予高权限身份。[4]
框架映射
攻击执行流程分解
未配置身份提供方
1.6.1 之前的受影响条件很明确:既没有 Cognito 用户池,也没有外部 IdP。[1]
回退逻辑创建了特权用户
存在漏洞的 get_current_user 路径会静默赋予 t-admin 和 g-admins-super,包括未认证请求。[4]
API 授予控制平面权限
可访问网络的客户端可能以超级管理员身份注册工具服务器、读取已存储的集成凭据,或改写托管代理角色的 IAM 策略。这是供应商描述的影响,并不证明某个部署已遭入侵。[1]
Loom 版本修复范围矩阵
| 版本范围 | CVE-2026-103956 身份验证绕过 | AWS 十月公告中的其他问题 | 运维操作 |
|---|---|---|---|
| <1.6.1 | 若未配置 Cognito 或外部 IdP,则受影响;网络客户端可能获得超级管理员权限。 | CVE-2026-103957 和 CVE-2026-103958 是独立问题,也在 1.7.0 中修复。 | 升级到 1.7.0 或更高版本。1.6.1 仅是此绕过问题的最低修复版本。 |
| 1.6.1–<1.7.0 | 已修复。未配置 IdP 时请求返回 401;仅在启用本地开发选项且客户端为 loopback 时例外。 | AWS 将另外两个相关问题列为在 1.7.0 中修复。 | 升级到 1.7.0 或更高版本以覆盖整份公告。 |
| 1.7.0 或更高版本 | 已修复。 | AWS 指出 1.7.0 修复了公告中的全部三个问题。 | 让 Loom 和分支版本保持在受支持版本,并确认已包含修复。 |
根本原因剖析 (Root Cause)
未配置 Cognito 用户池或外部身份提供方时,身份验证依赖项的回退逻辑会静默地将用户设为 t-admin 并加入 g-admins-super,而不是拒绝请求。API 随后把该回退身份视为已通过身份验证,因此任何能够访问后端的网络客户端都可能获得控制平面的超级管理员权限。修复采用默认拒绝;本地开发例外必须显式启用,并且客户端必须来自 loopback。CVE 记录将此问题映射为 CWE-306(关键功能缺少身份验证)和 CWE-1188(以不安全默认值初始化资源)。[1], [4], [7]
源代码对比:漏洞与安全实现
易受攻击的代码片段概述了维护者对 get_current_user 的描述:Cognito 和外部 IdP 均未配置时,该路径会静默授予 t-admin / g-admins-super。加固后的代码概述了上游合入的行为,并非逐字源码:本地例外需要显式选项和 loopback 客户端;其他请求均返回 HTTP 401。FlawOpen 部署提示:在生产环境中,只有在代理配置可防止不可信的转发请求头伪造 loopback 时,才信任 request.client。升级到 1.6.1 或更高版本可修复此 CVE;升级到 1.7.0 或更高版本可覆盖 2026 年 10 月公告中的全部问题。示例不包含利用请求或访问凭据的操作步骤。[4], [1]
# 受影响 get_current_user 路径的简化控制流(据维护者描述)
if not cognito_pool and not external_idp:
return User(username="t-admin", groups=["g-admins-super"])
return await authenticate_with_configured_idp(token)
# 默认拒绝,除非本地开发例外已显式启用且仅限 loopback。
if not cognito_pool and not external_idp:
opted_in = os.getenv("LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV") == "true"
peer_is_local = request.client is not None and ipaddress.ip_address(
request.client.host
).is_loopback
if opted_in and peer_is_local:
return local_development_user()
raise HTTPException(status_code=401, detail="Identity provider is not configured")
return await authenticate_with_configured_idp(token)
工程与系统安全加固清单
- ✓将 Loom 升级到 1.7.0 或更高版本;1.6.1 是修复
CVE-2026-103956的首个版本,1.7.0 是公告建议的统一目标版本。[1], [2], [3] - ✓在后端可从 loopback 以外访问前,确认已配置 Cognito 或外部 IdP。[1]
- ✓部署环境中不要设置
LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV;若用于本地开发,确认客户端为 loopback,且不可信代理无法暴露服务。 FlawOpen 部署检查:确认代理请求头处理方式后,再信任 loopback 信号。[1], [4] - ✓FlawOpen 分析:升级后检查受影响期间的访问和管理变更。AWS 建议轮换已配置的 OAuth2 客户端密钥,并撤销和重新签发在受影响期间有效的访问令牌。如果容器角色凭证曾被访问,请轮换 IAM 角色会话凭证,并检查 CloudTrail 中是否存在未授权使用。[1]
- ✓将
CVE-2026-103957和CVE-2026-103958视为在 1.7.0 修复的独立问题;升级前仅向可信管理员授予mcp:write和a2a:write。[1], [3]