Shikata Ga Nai

Private? There is no such things.

水平から垂直への権限昇格:横移動から管理者権限を奪う

Hello there, ('ω')ノ

✅ 概要

通常、水平的権限昇格(他ユーザーのデータへの不正アクセス)は、それ自体でも重大な問題ですが──

攻撃対象の相手が「管理者アカウント」だった場合、 結果として垂直的権限昇格(管理機能への不正アクセス)にもつながる

という “複合的な攻撃” になる可能性があります。


🎯 攻撃の流れ(実例)

1. IDORなどにより別ユーザーの情報を取得

https://insecure-website.com/myaccount?id=456

この「456」が管理者アカウントのIDだった場合…


2. 管理者ページにアクセス成功

  • 管理者用ページが /myaccount の中で統合されており、
  • そこにログイン中ユーザーの制限が無ければ、
  • 管理者の情報がそのまま表示される可能性あり

3. 管理者のアカウントを乗っ取る方法の例

方法 説明
✅ パスワード変更ができてしまう パスワード入力なしで変更できる脆弱な実装がある場合
✅ パスワードが平文で表示されている 管理画面にそのまま表示されている設計ミス
✅ セッションやトークンが表示されている CookieやJWTが見えてしまう
✅ 管理者専用機能へのリンクが使える 「他ユーザーの操作」から「アプリ全体の操作」へ昇格

🔓 なぜ危険か?

  • 水平的脆弱性(IDORなど)は多くのシステムに存在
  • そこから「高権限アカウント」にアクセスできれば
  • 意図せず垂直的な脆弱性に変化してしまう

✅ 対策方法

対策 内容
✅ すべての機能にユーザーの権限チェックを導入 リソースごとに resource.owner == session.user を確認
✅ 管理者機能はルートレベルで分離し、厳密に制限 例:/admin/* に認可フィルターをかける
✅ パスワード変更時には再認証を要求 元のパスワード確認を挟む

✅ まとめ

水平的権限昇格は放置すると垂直的権限昇格にもつながる危険な入口です。

攻撃者はまず「他ユーザーの情報」を狙い、 その中に「管理者」が含まれていれば、システム全体が乗っ取られる可能性があります

Best regards, (^^ゞ