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]

Вектор 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]
💡 Простыми словами (ELI5)

В здании нет сотрудника на стойке регистрации, но программа считает каждого посетителя главным администратором. Исправление запрещает вход, если поставщик удостоверений не настроен; исключение для локальной разработки требует явного параметра и подключения с того же компьютера.[1], [4]

Ключевые понятия и термины

Поставщик удостоверений (IdP)
Настроенная система аутентификации пользователей Loom. Уязвимое условие возникало, если не был настроен ни Cognito, ни внешний IdP.[1]
Плоскость управления
Уровень API и администрирования интеграций агентов, учетных данных и политик ролей.[1]
Безопасный отказ
Если обязательный сервис удостоверений недоступен, запрос отклоняется, а привилегированная учетная запись по умолчанию не выдается.[4]

Связи со стандартами

  • Ссылка CWE для слабого места, описанного в этом руководстве: CWE-306 CWE-1188

Пошаговый сценарий атаки

Шаг 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 и форков; проверьте перенос исправлений.

Анализ первопричины

Если ни пул Cognito, ни внешний поставщик удостоверений не были настроены, резервная ветвь зависимости аутентификации молча назначала t-admin и g-admins-super вместо отказа в запросе. API считала эту резервную личность аутентифицированной, поэтому любой сетевой клиент, достигавший серверной части, мог получить права супер администратора плоскости управления. Исправление действует по принципу запрета по умолчанию; исключение для локальной разработки требует явного включения и 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 по развёртыванию: В production доверяйте request.client только при такой настройке прокси, которая не позволяет недоверенным пересылаемым заголовкам имитировать loopback. Для исправления этого CVE обновитесь до 1.6.1 или новее, а для полного бюллетеня за октябрь 2026 года — до 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 →