FlawOpen

flawopen.com/AI Security/cve-2026-103956-aws-loom-authentication-bypass

● CVE-2026-103956 · CVSS v4 10.0[7] · 严重
安全研究 · FlawOpen

CVE-2026-103956:AWS Loom 身份验证绕过

CVE-2026-103956 影响 AWS Labs 的 Loom for AWS 1.6.1 之前版本:未配置身份提供方时,任何网络客户端都可能获得超级管理员权限。升级到 1.7.0 或更高版本可同时覆盖此问题及相关修复;1.6.1 已修复此身份验证绕过。[1], [5]

CVSS 向量CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H[7]
💡 通俗易懂的原理解析 (ELI5)

一栋楼没有前台接待员,软件却把每位访客都当成最高管理员,仿佛无人核验也能领取主钥匙。修复后,未配置身份提供方时系统会拒绝进入;本地开发例外必须显式开启,并且客户端必须来自同一台机器。[1], [4]

核心概念与专有名词

身份提供方(IdP)
用于验证 Loom 用户身份的已配置系统。Cognito 用户池和外部 IdP 都未配置时会触发受影响条件。[1]
控制平面
管理代理集成、凭据和角色策略的 API 与管理层。[1]
安全失败
缺少必需的身份服务时拒绝请求,而不是默认授予高权限身份。[4]

框架映射

攻击执行流程分解

步骤 1

未配置身份提供方

1.6.1 之前的受影响条件很明确:既没有 Cognito 用户池,也没有外部 IdP。[1]

步骤 2

回退逻辑创建了特权用户

存在漏洞的 get_current_user 路径会静默赋予 t-admin 和 g-admins-super,包括未认证请求。[4]

步骤 3

API 授予控制平面权限

可访问网络的客户端可能以超级管理员身份注册工具服务器、读取已存储的集成凭据,或改写托管代理角色的 IAM 策略。这是供应商描述的影响,并不证明某个部署已遭入侵。[1]

步骤 4

修复默认拒绝访问

1.6.1 版本的本地开发例外必须同时显式设置 LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV=true 并使用 loopback 客户端;否则返回 HTTP 401。针对包含三个问题的公告,AWS 建议升级到 1.7.0 或更高版本。[1], [4], [2], [3]

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)

工程与系统安全加固清单

参考来源

← AI Security Directory →