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 이전 버전에 영향을 줬습니다. ID 공급자가 설정되지 않으면 모든 네트워크 클라이언트가 최고 관리자 권한을 얻을 수 있었습니다. 이 취약점과 관련 수정 사항을 모두 적용하려면 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)

건물에 안내 데스크가 없는데도 소프트웨어가 모든 방문자를 최고 관리자로 대하는 상황입니다. 수정 후에는 ID 공급자가 설정되지 않으면 접근을 거부합니다. 로컬 개발 예외를 사용하려면 명시적 설정과 같은 컴퓨터에서의 연결이 필요합니다.[1], [4]

핵심 개념 및 용어

ID 공급자(IdP)
Loom 사용자를 인증하도록 설정된 시스템입니다. Cognito와 외부 IdP가 모두 설정되지 않았을 때 취약한 조건이 발생했습니다.[1]
컨트롤 플레인
에이전트 통합, 자격 증명, 역할 정책을 관리하는 API 및 관리 계층입니다.[1]
안전한 실패
필수 ID 서비스가 없으면 기본 특권 ID를 부여하지 않고 요청을 거부하는 방식입니다.[4]

프레임워크 매핑

단계별 공격 실행 흐름

단계 1

ID 공급자가 설정되지 않음

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 10월 보안 공지의 다른 문제운영자 조치
<1.6.1Cognito와 외부 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 사용자 풀이나 외부 ID 공급자가 모두 설정되지 않은 경우 인증 종속성의 대체 경로는 요청을 거부하지 않고 t-admin과 g-admins-super를 묵시적으로 할당했습니다. API는 이 대체 ID를 인증된 사용자로 취급했기 때문에 백엔드에 접근할 수 있는 네트워크 클라이언트가 제어 평면의 슈퍼 관리자 권한을 얻을 수 있었습니다. 수정 사항은 기본적으로 접근을 거부하며, 로컬 개발 예외에는 명시적 opt-in과 loopback 클라이언트가 필요합니다. CVE 기록은 이 문제를 CWE-306(중요 기능에 대한 인증 누락) 및 CWE-1188(안전하지 않은 기본값으로 초기화)로 분류합니다.[1], [4], [7]

소스 코드 비교: 취약한 구현 vs 보안 패치

취약한 코드는 유지관리자가 설명한 get_current_user 동작을 요약합니다. Cognito와 외부 IdP가 모두 설정되지 않으면 해당 경로가 t-admin / g-admins-super를 조용히 부여했습니다. 강화된 코드는 upstream에 반영된 동작을 요약한 것으로 원문을 그대로 옮긴 것은 아닙니다. 로컬 예외에는 명시적 옵션과 loopback 클라이언트가 필요하며, 나머지 요청은 HTTP 401로 거부됩니다. FlawOpen 배포 참고: 프로덕션에서는 신뢰할 수 없는 전달 헤더가 loopback을 가장하지 못하도록 proxy가 설정된 경우에만 request.client를 신뢰하세요. 이 CVE는 1.6.1 이상으로, 2026년 10월 공지 전체는 1.7.0 이상으로 업데이트해 해결하세요. 익스플로잇 요청이나 자격 증명 접근 절차는 포함하지 않았습니다.[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 →