FlawOpen

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

● CVE-2026-103956 · CVSS v4 10.0[7] · Crítica
Investigación · FlawOpen

CVE-2026-103956: bypass de autenticación en AWS Loom

CVE-2026-103956 afectaba a Loom for AWS de AWS Labs antes de la versión 1.6.1: sin un proveedor de identidad configurado, cualquier cliente de red podía obtener privilegios de superadministrador. Actualiza a 1.7.0 o posterior para cubrir esta falla y las relacionadas; 1.6.1 ya corrige este bypass de autenticación.[1], [5]

Vector CVSSCVSS: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]
💡 Explicación en Lenguaje Sencillo (ELI5)

Un edificio deja vacía la recepción, pero el software trata a cada visitante como administrador principal. La corrección hace que la recepción rechace la entrada si no hay un proveedor de identidad configurado; la excepción de desarrollo local exige una opción explícita y que el visitante se conecte desde el mismo equipo.[1], [4]

Conceptos Clave y Términos

Proveedor de identidad (IdP)
Sistema configurado para autenticar a los usuarios de Loom. La condición vulnerable se daba cuando no había configurado ni Cognito ni un IdP externo.[1]
Plano de control
Capa de administración y API que gestiona integraciones de agentes, credenciales y políticas de roles.[1]
Fallar de forma segura
Si falta el servicio de identidad requerido, rechazar la solicitud en vez de conceder una identidad privilegiada predeterminada.[4]

Mapeos de marcos

Flujo de Ataque Paso a Paso

Paso 1

No hay un proveedor de identidad configurado

La condición afectada antes de 1.6.1 es concreta: no hay un grupo de usuarios de Cognito ni un IdP externo.[1]

Paso 2

El fallback crea un usuario privilegiado

La ruta vulnerable get_current_user asignaba silenciosamente t-admin y g-admins-super, incluso a solicitudes sin autenticar.[4]

Paso 3

La API concede autoridad sobre el plano de control

Un cliente con acceso podía actuar como superadministrador, registrar servidores de herramientas, leer credenciales de integración almacenadas o reescribir políticas IAM de roles asociados a agentes gestionados. Este es el impacto descrito por el proveedor, no una prueba de que una instalación fuera comprometida.[1]

Paso 4

La corrección deniega el acceso por defecto

La versión 1.6.1 exige la opción explícita LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV=true y un cliente loopback para la excepción de desarrollo local; de lo contrario, devuelve HTTP 401. AWS recomienda 1.7.0 o posterior para el boletín que reúne las tres fallas.[1], [4], [2], [3]

Matriz de cobertura por versión de Loom

Rango de versionesElusión de autenticación CVE-2026-103956Otros problemas del boletín de octubre de AWSAcción para operadores
<1.6.1Afectado si no está configurado Cognito ni un IdP externo; un cliente de red podía obtener acceso de superadministrador.CVE-2026-103957 y CVE-2026-103958 son problemas distintos, también corregidos en 1.7.0.Actualice a 1.7.0 o posterior. La 1.6.1 es solo la corrección mínima para esta elusión.
1.6.1–<1.7.0Corregido. Sin IdP, las solicitudes reciben 401 salvo que se active la opción de desarrollo local y el cliente sea loopback.AWS indica que los dos problemas relacionados se corrigieron en 1.7.0.Actualice a 1.7.0 o posterior para cubrir todo el boletín.
1.7.0 o posteriorCorregido.AWS identifica la 1.7.0 como la versión que resuelve los tres problemas del boletín.Mantenga Loom y sus bifurcaciones en una versión compatible y compruebe que incluyan las correcciones.

Análisis de Causa Raíz

Cuando no se configuraban ni Cognito ni un proveedor de identidad externo, el fallback de la dependencia de autenticación asignaba silenciosamente t-admin y g-admins-super en vez de rechazar la solicitud. La API trataba ese fallback como una identidad autenticada, de modo que cualquier cliente de red que alcanzara el backend podía obtener autoridad de superadministrador sobre el plano de control. La corrección falla de forma segura; la excepción de desarrollo local exige habilitación explícita y un cliente loopback. El registro CVE clasifica el problema como CWE-306 (falta de autenticación para una función crítica) y CWE-1188 (inicialización con un valor predeterminado inseguro).[1], [4], [7]

Código Fuente: Vulnerable vs. Seguro

El fragmento vulnerable resume la descripción del mantenedor de get_current_user: sin Cognito ni un IdP externo, la ruta concedía silenciosamente t-admin / g-admins-super. La versión reforzada resume el comportamiento incorporado upstream y no es una transcripción literal: la excepción local exige la opción explícita y un cliente loopback; las demás solicitudes fallan con HTTP 401. Nota de despliegue de FlawOpen: En producción, confía en request.client solo si la configuración del proxy impide que encabezados reenviados no confiables afirmen ser loopback. Actualiza a 1.6.1 o posterior para corregir este CVE y a 1.7.0 o posterior para cubrir el boletín completo de octubre de 2026. No se muestran solicitudes de explotación ni procedimientos para acceder a credenciales.[4], [1]

IMPLEMENTACIÓN VULNERABLE
# Flujo de control simplificado descrito para la ruta afectada 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)
PARCHE SEGURO Y ROBUSTO
# Rechace por defecto salvo que la excepción local sea explícita y se limite a 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)

Lista de Verificación de Seguridad para Ingeniería

Fuentes

← AI Security Directory →