Insecure Direct Object Reference(IDOR)とは?

Insecure Direct Object Reference(IDOR)とは?

Insecure Direct Object Reference(IDOR)は、アクセス制御が適切に実装されていないために、
ユーザーが本来アクセスするべきでないリソース(ファイル、データ、ユーザー情報など)に直接アクセスできてしまう脆弱性です。
IDORは、URLやAPIリクエストに含まれるIDなどを手動で変更することで悪用されることが多く、
セッション管理認可制御が不十分なアプリケーションにとって重大なセキュリティリスクとなります。

実際のデータ漏洩事例

2020年、某航空会社の予約管理システムにおいてIDOR脆弱性が報告されました。
攻撃者は、予約IDを連番で変更するだけで他人の搭乗情報やパスポート番号にアクセスでき、
数十万件の個人情報が閲覧可能な状態となっていました。
この事件は、大規模なデータ漏洩として報道され、企業の信頼性に大きなダメージを与えました。

攻撃者による悪用方法

IDORは、次のような単純なリクエスト改変で悪用されます:

GET /user/profile?id=1001

これを攻撃者が以下のように変更します:

GET /user/profile?id=1002

サーバー側で認可チェックがなければ、攻撃者は他人の情報を自由に閲覧・編集できるようになります。

なぜ危険なのか?

IDORは目立ちにくく、簡単に見逃されるため、攻撃者にとっては“おいしい”脆弱性です。
一般ユーザーに成りすまし、企業顧客の個人情報、医療データ、財務情報などを不正取得できる可能性があり、
特に同時セッションの乗っ取りセッション固定攻撃と組み合わせると極めて危険です。

脆弱なコードの例

// 認証済みユーザーのIDを信頼しすぎている
String id = request.getParameter("id");
User user = userService.findById(id);
return user.getProfile();

安全な実装例

// ログインユーザーIDと照合して正当性を検証
String requestedId = request.getParameter("id");
String loggedInUserId = session.getAttribute("userId");

if (!requestedId.equals(loggedInUserId)) {{
    response.sendError(HttpServletResponse.SC_FORBIDDEN, "アクセス権限がありません。");
    return;
}}

User user = userService.findById(loggedInUserId);
return user.getProfile();

IDOR を防ぐ方法

  • すべてのリソースアクセス時に認可チェックをサーバーサイドで実施
  • ユーザーIDやオブジェクトIDを外部公開しない(UUIDなどのランダム値を使う)
  • アクセス制御のためのロールベースアクセス制御(RBAC)または属性ベースアクセス制御(ABAC)の導入
  • セキュリティ自動テスト(SAST/DAST)による脆弱性の検出
  • セッション固定やトークン管理と合わせて対策

企業に与える影響

IDORの脆弱性による情報漏洩は、個人情報保護法違反GDPRの罰則対象となり、
数百万〜数千万単位の罰金、顧客離れ、訴訟、株価の暴落などのリスクを企業にもたらします。
特に金融、医療、教育分野での被害は深刻です。

まとめ

Insecure Direct Object Reference(IDOR)は、実装ミスや設計ミスによって生じやすい脆弱性です。
攻撃は単純ですが、影響は重大です。APIやWebアプリケーションでは、
ロールやセッション情報に基づいた厳格なアクセス制御
を導入することで、
ログイン脆弱性データ漏洩のリスクを最小限に抑えることができます。

キーワード: IDOR, Insecure Direct Object Reference, アクセス制御の欠陥, 認可ミス, ロールベース制御, ログイン脆弱性, セッション管理, サイバーセキュリティ, 個人情報保護, データ漏洩, APIセキュリティ, 同時セッション

Leave a Comment

Your email address will not be published. Required fields are marked *

Recent Post

安全でないクッキー

 安全でないクッキー(Insecure Cookies)による情報漏洩リスクと対策 Webアプリケーションにおけるセッション管理やユーザー識別に使われるCookie(クッキー)は、非常に便利である一方で、不適切に設定された場合は大きなセキュリティ脅威となります。「Secure」や「HttpOnly」などの属性が正しく設定されていないクッキーは、セッションハイジャックやXSS(クロスサイトスクリプティング)などの攻撃に利用されやすくなります。 「クッキーは小さなファイルだが、脆弱性は巨大な損失を引き起こす」 📌 企業で実際に発生したセキュリティインシデントの例 ECサイトが「HttpOnly」属性なしでセッションクッキーを発行しており、XSS攻撃を受けてユーザーのセッションが盗まれた。 モバイルアプリとの連携用APIがHTTPS通信でない場合でも、「Secure」属性なしのクッキーが平文で送信され、中間者攻撃(MITM)により情報漏洩。 開発環境で出力されていたデバッグ用クッキーに、認証トークンが保存されていたことが判明し、社内からの情報漏洩に繋がった。 これらはすべて、クッキーの設定ミスにより発生したインシデントであり、ログイン脆弱性やセッションハイジャックと直結しています。

ログからの情報漏洩 ― 見落とされがちなセキュリティ脆弱性

企業におけるセキュリティ対策では、ファイアウォールや認証強化に注目が集まる一方、ログファイルに関するセキュリティは軽視されがちです。しかし、ログへの過剰な出力や機密情報の記録は、重大な情報漏洩に直結するリスクを孕んでいます。 ログは開発者の「味方」であると同時に、攻撃者にとっては「宝の山」である。 📌 実際に企業で起こった情報漏洩のシナリオ クラウドサーバーに保管されたログファイルに、ユーザーのパスワードやセッショントークンが記録されていた。ログが外部公開状態となっており、第三者がアクセス。 REST APIのエラーログに、リクエスト本文(クレジットカード情報含む)がそのまま記録されており、開発環境の共有ディレクトリから漏洩。 未処理の例外情報としてスタックトレースがログ出力され、データベース接続情報やパスワードが含まれていた。 これらの事例では、ログイン脆弱性、並列セッションの乗っ取り、個人情報の外部流出など、深刻な結果に繋がっています。 🛠

URLに機密情報を含めることによる重大なセキュリティ脆弱性

🔐 URLに機密情報を含めることによる重大なセキュリティ脆弱性 サイバーセキュリティの現場では、「URLに機密データを含める」という行為が大きなリスクとして認識されています。セッションID、トークン、クレジットカード情報、ユーザー認証情報などがURLに含まれると、予期せぬログ保存や第三者への漏洩の危険が高まります。 URLは「見える場所」であり、ログや履歴、リファラ(Referer)などを通じて簡単に漏洩する性質があります。 📌 実際に企業で起こりうるデータ漏洩のシナリオ 社内ポータルのリンクにセッションIDが含まれ、アクセスログに残存し、ログインなりすましの被害。 問い合わせフォームで入力された個人情報がGETメソッドで送信され、URLパラメータに含まれてリファラ経由で外部サービスに流出。 短縮URLやメール共有時に、クレジットカード情報付きのURLが第三者に渡る。 こうした事例は、データ漏洩、不正ログイン、同時セッション乗っ取りなど深刻なセキュリティ事件に繋がります。

弱い暗号化アルゴリズムが招く重大なセキュリティ脆弱性

🔐 弱い暗号化アルゴリズムが招く重大なセキュリティ脆弱性 データの暗号化は、セキュリティ対策の基礎中の基礎です。しかし、「弱い暗号化アルゴリズム(Weak Encryption Algorithms)」を使用していると、そのセキュリティは簡単に破られてしまいます。企業が使い続けているレガシーシステムや古い開発基盤において、依然としてMD5やSHA-1、DESなどの脆弱な暗号が使用されているケースは少なくありません。 セキュリティの世界では「過去の暗号技術」は現在の脆弱性です。今なお使われている旧式の暗号は、攻撃者にとってチャンスそのものです。 📌 実際に企業で起こりうるデータ漏洩のシナリオ 旧式の顧客情報データベースでMD5によるパスワード保存が行われていた結果、ハッシュ化されたパスワードがレインボーテーブルで容易に解読。 古いVPNシステムがDESで通信を暗号化しており、ブルートフォース攻撃で機密情報が漏洩。

welcome our Blog

Scroll to Top