Webアプリケーション攻撃

IDOR(安全でない直接オブジェクト参照) あいどあ

アクセス制御認可バイパスOWASPパラメータ改ざん水平権限昇格APIセキュリティ
IDORって何?

簡単に言うとこんな感じ!

URLの中にある「注文番号」や「ユーザーID」みたいな数字をちょっと書き換えるだけで、他人のデータが見えちゃう脆弱性だよ!鍵がかかっていないロッカーに「番号を変えたら誰でも開く」って書いてあるような状態で、ホントに危ないやつなんだ!


IDORとは

IDOR(Insecure Direct Object Reference:安全でない直接オブジェクト参照) とは、Webアプリケーションがファイル・データベースレコード・URLパラメータなどの内部オブジェクトを参照する際に、そのアクセスが正しく制御されていない脆弱性のことです。攻撃者はURLやAPIリクエストの中にある数値・IDなどを書き換えるだけで、本来アクセスできないはずの他ユーザーのデータに到達できてしまいます。

典型例としては、https://example.com/invoice?id=1001 という請求書閲覧ページで、id=1002 に変えると他人の請求書が見えてしまうケースが挙げられます。サーバー側が「このユーザーがこのIDにアクセスしてよいか」という認可(Authorization)チェックを省略・漏れしていることが根本原因です。

IDORは OWASP Top 10 において「Broken Access Control(壊れたアクセス制御)」の代表的な攻撃手法として繰り返し挙げられており、実際の情報漏洩インシデントでも非常に多く登場します。システムを発注・選定する立場の方にとっても「ちゃんと認可チェックが実装されているか」を確認する重要なポイントです。


IDORの仕組みと攻撃パターン

攻撃が成立するまでの流れ

1. ユーザーAがログインし、自分の注文詳細を閲覧
   GET /order?order_id=5001

2. サーバーはDBから order_id=5001 のデータを返す
   (このとき「Aのオーダーか」の確認を怠っている)

3. 攻撃者がパラメータを書き換えてリクエスト
   GET /order?order_id=5002

4. サーバーが他人のオーダーデータをそのまま返す → 情報漏洩!

代表的な攻撃パターン一覧

パターン具体例漏洩しうる情報
URLクエリパラメータ改ざん?user_id=100?user_id=101個人情報・住所
パス改ざん/files/invoice_1001.pdf1002.pdf請求書・契約書
APIリクエストボディ改ざん{"account_id": 55}56口座・決済情報
HTTP Headerの改ざんX-User-ID: 100101セッション越境
GUIDでも設計次第で漏洩推測困難だが漏洩経路があれば同様あらゆるリソース

水平権限昇格 vs 垂直権限昇格

IDORが引き起こすのは主に水平権限昇格(Horizontal Privilege Escalation)です。同じ権限レベルの別ユーザーのデータに横滑りでアクセスする点が特徴です。

水平権限昇格(IDOR の典型)
  一般ユーザーA ──書き換え──→ 一般ユーザーBのデータ
  ↑ 権限レベルは変わらない。横に移動するだけ

垂直権限昇格(権限昇格攻撃)
  一般ユーザー ──昇格──→ 管理者権限
  ↑ 権限レベルが上がる

歴史と背景

  • 2007年 — OWASP Top 10 2007にて「Insecure Direct Object Reference」として初めてリスト入り。当初から危険度の高い脆弱性として認識される
  • 2013年 — OWASP Top 10 2013でも独立項目として継続掲載。クラウド・SaaSの普及とともに実被害が増加
  • 2017年 — OWASP Top 10 2017で「A5: Broken Access Control」に統合。IDORはその中核的パターンに位置づけられる
  • 2019年 — FacebookのAPIでIDOR的欠陥が多数のバグバウンティレポートで報告され注目が集まる
  • 2021年 — OWASP Top 10 2021で「A01: Broken Access Control」が第1位に。全カテゴリ中最多の発見率94%のアプリが何らかのアクセス制御の欠陥を持つと報告
  • 現在 — APIファーストの設計が主流になるにつれ、REST APIGraphQL上でのIDORが急増。バグバウンティ報告の常連トップ脆弱性

IDORと関連する脆弱性・対策の全体像

IDORの攻撃経路と対策レイヤー 攻撃者 パラメータ改ざん フロントエンド URLパラメータ / API サーバーサイド 認可チェック 「このユーザーにOK?」 DB データ 認可チェックが無い場合、直接DBへ 主な対策(サーバーサイドに実装が必要) ① セッションベースの認可確認 ログイン中ユーザーの所有物か をDBで突き合わせて確認する ② 間接参照の利用 内部IDを直接渡さず セッション紐づきのキーを使う ③ GUID/UUIDの採用 連番IDを推測困難な ランダムIDに変える ⚠️ よくある誤解 「UUIDにすれば安全」は誤り。漏洩したUUIDは攻撃に使われる。①の認可確認が最重要! 発注・検収時のチェックポイント 「別ユーザーでログインしてURLのIDを書き換えると他人のデータが見えますか?」をテストに含める

IDORと似た概念との比較

概念内容IDORとの違い
IDORパラメータ書き換えで他人リソースへアクセス認可チェック漏れが原因
SQLインジェクションSQLを操作してDB不正アクセス入力値のエスケープ漏れが原因
CSRFユーザーに意図しないリクエストを実行させる被害者が自分の権限で操作させられる
Mass Assignmentオブジェクトの全フィールドが書き換えられるフィールド単位での過剰な更新
パストラバーサル../../../etc/passwd でファイルに到達ディレクトリ操作による不正アクセス

関連する規格・RFC

規格・番号内容
OWASP Top 10 A01:2021Broken Access Controlの第1位。IDORを代表的サブカテゴリとして明記
OWASP ASVS 4.0 (V4)アクセス制御検証標準。IDORのテスト要件を定義
CWE-639Authorization Bypass Through User-Controlled Key — IDORに対応するCWE分類
CWE-284Improper Access Control — 上位カテゴリ
NIST SP 800-53 AC-3アクセス制御ポリシーの実施に関するコントロール

関連用語