クラウドIAM権限昇格|小さな許可設定の積み重ねがもたらす侵害
第5話ではタイミングのズレという「処理の隙」を突く攻撃を見てきました。第6話は少し視点を変えます。クラウド環境の「権限」そのものに注目します。1つひとつは安全に見える許可設定が、組み合わさることで本来あり得ない特権を生み出す——クラウドの侵害事例で繰り返し報告されている、地味だが破壊力のある脆弱性クラスです。
📋 目次
🔑 個別には無害な権限が、なぜ危険になるのか
「読むだけ」「書くだけ」の権限が、合わさると特権になる
「自分の設定を確認・更新できる」だけの権限のはずだった
ある担当者に与えられていたのは、「自分自身の権限設定を確認できる」権限と、「自分が管理する許可文書の新しいバージョンを作成し、それを有効化できる」権限の2つだけでした。どちらも単体で見れば、自分の持ち物を見て、自分の持ち物を更新するだけの、ごく普通の権限です。ところがこの2つが揃うと、その担当者は自分自身に管理者権限を追加できてしまいます。
クラウドのIAM(Identity and Access Management、アクセス権限管理)では、権限は「この主体が」「この対象に」「何をしてよいか」という3つの要素の組み合わせで定義されます。権限レビューや診断の現場では、この組み合わせを1件ずつ見れば「過剰な権限」には見えないものが大半です。しかし複数の権限を掛け合わせたときに初めて、「自分の権限を自分で書き換えられる」という構造的な抜け穴が生まれることがあります。これは特定の製品の欠陥ではなく、権限管理という仕組みそのものに内在するリスクです。
この話の前提知識
実践編第2話では、IDが推測できることを起点に他人の情報へアクセスする「IDOR」と、その先で権限そのものを乗っ取る「権限昇格チェーン」を扱いました。今回はその発展形として、正規の権限設定の中に潜む昇格経路を扱います。
- 実践編 第2話「IDORで他人の情報を覗く|権限昇格チェーン」
実際のクラウド事業者のセキュリティ研究チームや、専門のペネトレーションテスト企業は、こうした「個別には正当な権限の組み合わせ」によって権限昇格が可能になるパターンを継続的に調査・公開しています。代表的なものとして、「自分が管理する許可文書の新しいバージョンを作成し、それを有効化できる」権限の組み合わせや、「自分の認証情報を新規発行できる」権限、「より強い権限を持つ役割を一時的に引き渡せる」権限などが知られています。本話では、これらの構造を架空のクラウドサービスで安全に再現します。
☁️ IAMの基本|誰が・何に・何をしてよいか
権限は「主体×対象×操作」の3点セットで決まる
IAM(Identity and Access Management)の基本は驚くほど単純です。「誰が(主体/アイデンティティ)」「何に対して(対象/スコープ)」「何をしてよいか(操作/ケーパビリティ)」という3つを組み合わせて許可を定義します。本話では、架空のクラウドサービス「Vela Cloud」を舞台にします。Vela Cloudでは、この3点セットを次のような形式で表現します。
{
"identity": "user:u-2291",
"grants": [
{ "capability": "object:Read", "scope": "bucket:reports/*" },
{ "capability": "grant:CreateVersion", "scope": "grant:self" },
{ "capability": "grant:ActivateVersion", "scope": "grant:self" }
]
}
| 一般的なIAMの概念 | Vela Cloudでの呼び方 | 意味 |
|---|---|---|
| 主体(Identity) | identity | 誰が操作するか |
| 許可文書(Policy) | grant document | 何ができるかを定義した文書 |
| 操作(Action) | capability | 何をしてよいか |
| 対象(Resource) | scope | 何に対して行えるか |
最小権限の原則(Principle of Least Privilege)
「その作業に必要な権限だけを、必要な期間だけ与える」という考え方です。言葉にすると当たり前ですが、実際の組織では「とりあえず広めに権限を渡す」「過去に付与した権限がそのまま放置される」といった事情で、この原則からどんどん離れていくのが実情です。権限昇格の多くは、この積み重なった余剰権限の隙間で発生します。
🔍 なぜ見つけにくいのか|権限レビューの死角
組み合わせの数は、権限の数より遥かに多い
権限が10個あるとき、それを2つずつ組み合わせて確認しようとすると45通りの組み合わせが生まれます(10個から2個を選ぶ組み合わせの数)。実際の組織では1人の担当者が数十から数百の権限を持つことも珍しくなく、組み合わせの数は数千通りに膨れ上がります。「権限Aは単体で安全か」を1件ずつ確認するレビューでは、この組み合わせのリスクを発見することはほぼ不可能です。
棚に並んだ鍵は、それぞれ安全に見える
倉庫の鍵と、その倉庫の監視カメラの録画を消去できる権限は、別々に持っていればさほど問題に見えないかもしれません。しかし両方を同じ人物が持っていたら、侵入の証拠ごと消し去ることができます。クラウドの権限昇格も同じ構造で、単体では問題ない権限が組み合わさることで、想定されていない強い力を生み出します。
多くの組織がこの問題に対処するため、権限の自動分析ツールを使い、「この主体が持つ権限を組み合わせると最終的にどこまで到達できるか」をグラフとして可視化する手法を取り入れています。次の実践チャレンジでは、まさにこの「組み合わせの発見」を体験します。
💻 実践チャレンジ:Vela CloudのIAMコンソールから昇格せよ
与えられた権限一覧から、危険な組み合わせを見つけて実行する
以下は、あなた(user:u-2291)がVela Cloud上で実際に持っている権限一覧です。一見、どれも「自分の持ち物」に対する操作ばかりで、過剰な権限には見えません。この中から、組み合わせることで自分自身に管理者権限を追加できる2つの権限を見つけてください。
$ vela-cli iam describe-grants –identity user:u-2291
| # | capability | scope |
|---|---|---|
| 1 | object:Read | bucket:reports/* |
| 2 | object:Write | bucket:reports/* |
| 3 | grant:View | grant:self |
| 4 | grant:CreateVersion | grant:self |
| 5 | grant:ActivateVersion | grant:self |
| 6 | compute:ListInstances | compute:* |
| 7 | billing:ViewInvoice | billing:self |
| ⚠️ | admin:* | *(すべての対象) |
下の2つのプルダウンから権限を選び、組み合わせを検証してください。
ステージ1をクリアすると、ステージ2が解放されます。両方クリアした時点でスコアが確定します。
📊 ステージ進捗: 0/2|挑戦回数: 0回
上の権限一覧から危険な2つを選んで「検証する」を押し、正しい組み合わせを見つけてください。検証に成功すると合言葉が表示されるので、それを入力してください(例: IAM-PRIVESC-2)。
「自分の持ち物を確認する」権限と「自分の持ち物を書き換える」権限を分けて考えてみましょう。一覧の中に、確認専用の権限と、変更を実際に反映させる権限がそれぞれあります。
grant:Viewだけでは新しい内容を見られるだけで、まだ何も変わりません。「新しいバージョンを作る」権限と「そのバージョンを有効にする」権限の2つが揃うと、内容を書き換えて反映までできてしまいます。
下の「昇格を実行する」ボタンを押すと、見つけた2つの権限を使った処理が実行されます。表示された管理者シークレットをそのまま入力してください。
🚨 管理者専用パネルへのアクセスに成功しました
発見した管理者シークレット: CTF{IAM_CHAIN_T0_ADM1N}
上の権限一覧のgrant:CreateVersionとgrant:ActivateVersionを使った処理が、ボタンを押すと自動的に実行されます。実行後に表示される管理者パネルの中の文字列をそのまま入力してください。
🛡️ 防御側の視点|権限昇格をどう防ぐか
「組み合わせ」を前提にした権限設計とレビュー
- 最小権限の原則の徹底:必要な権限だけを必要な期間だけ付与し、定期的に未使用の権限を回収する
- 危険な権限の組み合わせの自動検出:個別の権限だけでなく、組み合わせによる到達可能性をグラフ解析するツールを使う(権限昇格パスの可視化)
- 自分自身の許可文書を変更できる権限を一般利用者に与えない:
grant:CreateVersion・grant:ActivateVersionのような「許可そのものを書き換える」権限は、専用の管理ロールに限定する - 変更の監査ログ:誰が・いつ・どの許可文書を書き換えたかを必ず記録し、異常な変更(特に自分自身への権限追加)を検知する
- 一時的な強い権限はその場で失効させる:作業が終わったら強い権限を自動的に剥奪する仕組み(一時昇格・Just-In-Timeアクセス)を使う
「権限の一覧」ではなく「権限の到達範囲」を見る
権限レビューを「誰が何を持っているか」のチェックリストで終わらせず、「その権限を起点にどこまで到達できるか」という経路全体で評価することが重要です。多くのクラウド事業者は、こうした到達可能性の分析を自動化する診断ツールを提供しています。
個々の許可は正しくレビューされていても、その組み合わせまでは見ていない——これが今回の脆弱性クラスの本質です。次のセクションでは今回の学びをまとめます。
📝 まとめ+FAQ+次回予告
権限は「足し算」でなく「掛け算」で危険になる
第6話では、個別には無害な権限同士が組み合わさることで特権昇格に至る、クラウドIAM特有の脆弱性クラスを体験しました。CTFの「フラグ探し」ではなく、実際の権限レビューで起きている死角そのものです。
・IAMの権限は「主体×対象×操作」の組み合わせで決まる
・個別には無害な権限同士が組み合わさることで、想定外の強い権限(特権昇格)を生む
・代表例は「自分の許可文書を書き換え、有効化できる」権限の組み合わせ
・防御の鍵は最小権限の原則と、組み合わせによる到達可能性の自動分析
Q. 実際のクラウドサービスでもこのような権限昇格は起きていますか?
はい。複数のクラウド事業者のセキュリティ研究チームや専門のペネトレーションテスト企業が、これに類するIAM権限昇格パターンを継続的に発見・公開しています。本話の「許可文書を書き換えて有効化する」という構造は、実際に知られている手法の1つを学習用に再構成したものです。
Q. なぜ実在のクラウドサービスのAPI形式そのままではなく、架空のVela Cloudを使うのですか?
実在のサービスのAPI形式や名称をそのまま模倣すると、本物の操作方法の解説と誤認されるおそれがあるためです。本話では概念と構造を正確に保ったまま、架空の名称・架空のAPI形式に置き換えています。
Q. このシミュレーターは実際のクラウドAPIに接続していますか?
いいえ。権限一覧・許可文書のバージョン管理・有効化処理はすべてこのページ内だけで完結するJavaScriptのオブジェクトとして実装されており、外部のクラウドサービスやネットワーク通信には一切接続していません。
Q. 進捗やスコアの情報はどこかに送信されますか?
送信されません。すべてブラウザのlocalStorage(あなたの端末内)だけに保存され、外部のサーバーには一切送信されません。
OAuth/SSOの落とし穴|認可コード窃取とredirect_uri検証バイパス
今回学んだ「権限の境界」というテーマを、認証・認可の仕組みであるOAuthに広げます。redirect_uriの検証の緩さがどのようにアカウント乗っ取りにつながるかを体験します。
📚 参考情報
- OWASP Top 10(A01:2021 Broken Access Control)
- CWE-269(Improper Privilege Management)
- クラウドIAM権限昇格に関する公開セキュリティ研究(複数のクラウドセキュリティ専門企業による技法の体系化)


コメント