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.pdf → 1002.pdf | 請求書・契約書 |
| APIリクエストボディ改ざん | {"account_id": 55} → 56 | 口座・決済情報 |
| HTTP Headerの改ざん | X-User-ID: 100 → 101 | セッション越境 |
| 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 API・GraphQL上でのIDORが急増。バグバウンティ報告の常連トップ脆弱性
IDORと関連する脆弱性・対策の全体像
IDORと似た概念との比較
| 概念 | 内容 | IDORとの違い |
|---|---|---|
| IDOR | パラメータ書き換えで他人リソースへアクセス | 認可チェック漏れが原因 |
| SQLインジェクション | SQLを操作してDB不正アクセス | 入力値のエスケープ漏れが原因 |
| CSRF | ユーザーに意図しないリクエストを実行させる | 被害者が自分の権限で操作させられる |
| Mass Assignment | オブジェクトの全フィールドが書き換えられる | フィールド単位での過剰な更新 |
| パストラバーサル | ../../../etc/passwd でファイルに到達 | ディレクトリ操作による不正アクセス |
関連する規格・RFC
| 規格・番号 | 内容 |
|---|---|
| OWASP Top 10 A01:2021 | Broken Access Controlの第1位。IDORを代表的サブカテゴリとして明記 |
| OWASP ASVS 4.0 (V4) | アクセス制御検証標準。IDORのテスト要件を定義 |
| CWE-639 | Authorization Bypass Through User-Controlled Key — IDORに対応するCWE分類 |
| CWE-284 | Improper Access Control — 上位カテゴリ |
| NIST SP 800-53 AC-3 | アクセス制御ポリシーの実施に関するコントロール |
関連用語
- アクセス制御 — 誰がどのリソースにアクセスできるかを制御する仕組み全般
- 認証と認可 — 「本人確認」と「権限確認」の違い。IDORは認可の欠陥
- OWASP Top 10 — Webアプリの重大リスクをまとめたセキュリティ指針
- SQLインジェクション — 入力欄を悪用してDBを操作するWebアプリ攻撃の代表例
- バグバウンティ — 脆弱性発見者に報奨金を払うプログラム。IDORは報告件数トップクラス
- ペネトレーションテスト — IDORの有無を確認するために実施するセキュリティ診断