FlawOpen

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

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

CVE-2026-103956: bypass de autenticação no AWS Loom

O CVE-2026-103956 afetava o Loom for AWS da AWS Labs antes da versão 1.6.1: sem um provedor de identidade configurado, qualquer cliente de rede podia receber autoridade de superadministrador. Atualize para 1.7.0 ou posterior para incluir esta falha e as correções relacionadas; a versão 1.6.1 já corrige este bypass de autenticação.[1], [5]

Vetor 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]
💡 Explicação em Linguagem Simples (ELI5)

Um prédio deixa a recepção vazia, mas o software trata cada visitante como administrador-chefe. A correção faz a recepção negar a entrada se um provedor de identidade não estiver configurado; a exceção de desenvolvimento local exige uma opção explícita e uma conexão originada na própria máquina.[1], [4]

Conceitos Centrais e Termos

Provedor de identidade (IdP)
Sistema configurado para autenticar usuários do Loom. A condição vulnerável ocorria quando nem o Cognito nem um IdP externo estavam configurados.[1]
Plano de controle
Camada de administração e API que gerencia integrações de agentes, credenciais e políticas de funções.[1]
Falhar de forma segura
Quando falta o serviço de identidade obrigatório, negar a requisição em vez de conceder uma identidade privilegiada padrão.[4]

Mapeamentos de frameworks

Fluxo de Ataque Passo a Paso

Passo 1

Nenhum provedor de identidade está configurado

A condição afetada antes da versão 1.6.1 é específica: não há pool de usuários Cognito nem IdP externo.[1]

Passo 2

O fallback cria um usuário privilegiado

O caminho vulnerável get_current_user atribuía silenciosamente t-admin e g-admins-super, inclusive a requisições sem autenticação.[4]

Passo 3

A API concede autoridade no plano de controle

Um cliente com acesso podia agir como superadministrador, registrar servidores de ferramentas, ler credenciais de integração armazenadas ou alterar políticas IAM de funções anexadas a agentes gerenciados. Esse é o impacto descrito pelo fornecedor, não uma prova de comprometimento de uma instalação.[1]

Passo 4

A correção nega por padrão

A versão 1.6.1 exige LOOM_ALLOW_UNAUTHENTICATED_LOCAL_DEV=true explícito e cliente em loopback para a exceção de desenvolvimento local; caso contrário, retorna HTTP 401. A AWS recomenda a versão 1.7.0 ou posterior para o boletim com as três falhas.[1], [4], [2], [3]

Matriz de cobertura por versão do Loom

Faixa de versõesBypass de autenticação CVE-2026-103956Outros problemas do boletim de outubro da AWSAção para operadores
<1.6.1Afetado se Cognito e um IdP externo não estiverem configurados; um cliente de rede poderia receber acesso de superadministrador.CVE-2026-103957 e CVE-2026-103958 são problemas distintos, também corrigidos na 1.7.0.Atualize para 1.7.0 ou posterior. A 1.6.1 é apenas a correção mínima deste bypass.
1.6.1–<1.7.0Corrigido. Sem IdP, as solicitações recebem 401, salvo se a opção de desenvolvimento local estiver ativa e o cliente for loopback.A AWS lista os dois problemas relacionados como corrigidos na 1.7.0.Atualize para 1.7.0 ou posterior para cobrir o boletim completo.
1.7.0 ou posteriorCorrigido.A AWS identifica a 1.7.0 como a versão que corrige os três problemas do boletim.Mantenha Loom e forks em uma versão com suporte e confirme que as correções foram incorporadas.

Análise de Causa Raiz

Quando nem o Cognito nem um provedor de identidade externo estavam configurados, o fallback da dependência de autenticação atribuía silenciosamente t-admin e g-admins-super, em vez de rejeitar a solicitação. A API então tratava esse fallback como uma identidade autenticada, permitindo que qualquer cliente de rede que alcançasse o backend recebesse autoridade de superadministrador no plano de controle. A correção passa a negar por padrão; a exceção para desenvolvimento local exige ativação explícita e um cliente loopback. O registro do CVE classifica a falha como CWE-306 (ausência de autenticação para função crítica) e CWE-1188 (inicialização com padrão inseguro).[1], [4], [7]

Código-Fonte: Vulnerável vs. Seguro

O trecho vulnerável resume a descrição do mantenedor de get_current_user: sem Cognito nem IdP externo, o caminho concedia silenciosamente t-admin / g-admins-super. A versão endurecida resume o comportamento incorporado upstream, não é uma transcrição literal: o desvio local exige a opção explícita e um cliente loopback; os demais pedidos falham com HTTP 401. Nota de implantação da FlawOpen: Em produção, confie em request.client somente quando o tratamento de proxy estiver configurado para impedir que cabeçalhos encaminhados não confiáveis declarem loopback. Atualize para 1.6.1 ou posterior para corrigir este CVE e para 1.7.0 ou posterior para cobrir o boletim completo de outubro de 2026. O exemplo não mostra requisições de exploração nem procedimentos para acessar credenciais.[4], [1]

IMPLEMENTAÇÃO VULNERÁVEL
# Fluxo de controle simplificado descrito para o caminho afetado 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)
PATCH SEGURO E ROBUSTO
# Falhe de forma fechada, exceto se a exceção local estiver explícita e limitada 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 Verificação de Segurança para Engenharia

Fontes

← AI Security Directory →