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 を与えずにリクエストを拒否する動作です。[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 を返します。3 件の問題をまとめて解消するため、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 は関連する2件の問題を 1.7.0 で修正したとしています。告知対象全体を修正するには 1.7.0 以降へ更新してください。
1.7.0 以降修正済みです。AWS は 1.7.0 で告知された3件すべてを修正したとしています。Loom とフォークをサポート対象版に保ち、修正が取り込まれていることを確認してください。

根本原因の分析 (Root Cause)

Cognito ユーザープールも外部 ID プロバイダーも設定されていない場合、認証依存コンポーネントのフォールバックは要求を拒否せず、t-admin と g-admins-super を暗黙に割り当てていました。API はこのフォールバック ID を認証済みとして扱うため、バックエンドに到達できるネットワーククライアントが制御プレーンのスーパー管理者権限を得る可能性がありました。修正では既定で拒否し、ローカル開発向け例外には明示的なオプトインと 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 偽装を防ぐプロキシ設定がある場合に限り 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 →