web-dev-qa-db-ja.com

Broken Access ControlとInsecure Direct Object参照の違いは何ですか?

私が正しく理解している場合、主な違いは、安全でない直接オブジェクト参照攻撃を実行するにはユーザーがログインする必要があることですが、壊れたアクセス制御攻撃を悪用するためにログインする必要はありません。

これでいいの?違いは何ですか?

1

[〜#〜] owasp [〜#〜] からの安全でない直接オブジェクト参照の定義:

安全でない直接オブジェクト参照は、アプリケーションがユーザー提供の入力に基づいてオブジェクトへの直接アクセスを提供するときに発生します。この脆弱性の結果として、攻撃者は認証をバイパスし、データベースレコードやファイルなどのシステム内のリソースに直接アクセスできます。

[〜#〜] owasp [〜#〜] からの壊れたアクセス制御の定義

承認と呼ばれることもあるアクセス制御は、Webアプリケーションがコンテンツと機能へのアクセスを一部のユーザーに許可し、他のユーザーには許可しない方法です。これらのチェックは認証後に実行され、「承認された」ユーザーが実行できることを管理します。アクセス制御は単純な問題のように聞こえますが、正しく実装するのは非常に困難です。 Webアプリケーションのアクセス制御モデルは、サイトが提供するコンテンツと機能に密接に関連しています。さらに、ユーザーは、さまざまな能力または特権を持つ多数のグループまたはロールに分類される場合があります。

これらの非標準の用語をどのように解釈するかに応じて、それらは同じものとして解釈される可能性があります。

ただし、オブジェクトへの直接アクセスは、通常、特権情報へのアクセスを取得するための認証制御の欠如を意味しますが、壊れたアクセス制御は、アクセス制御が意図したとおりに機能していないことを示します。

たとえば、http://example.com/some-report/report-1231231231312.pdfなどのURLで特定のユーザーのレポートを作成し、アプリケーションが認証を必要としない場合、これはオブジェクトへの直接アクセスになります。開発者がそもそもアクセス制御を実装していない可能性があります。したがって、アクセス制御は壊れず、オブジェクトへの直接アクセスのみです。つまり、レポートはURLに書き込まれますが、コアとは別のファイルの場所にすぎませんアプリケーションはリソースの配信を制御できません。

多くの場合、両方の用語は同じ脆弱性を表すためにも使用できます。たとえば、レポートはログインしているユーザーに対してのみ動的に生成されますが、後でログインすることなくレポートにアクセスできます。この場合、開発者は、アクセス制御ではなく、レポートを作成するための関数を作成します。

安全でない直接オブジェクト参照

3
Eric G

それは各脆弱性の特定のインスタンスに依存します。安全でない直接オブジェクト参照は、通常、データベースオブジェクトにクライアントに公開されたIDがある場所です。たとえば、RESTスタイルのURLを使用するアプリでは、

http://myapp.test/users/2

ユーザーアカウントを表示し、次に変更した場合

http://myapp.test/users/4

他の誰かのアカウントを表示します。この場合、ログインする必要がありますが、たとえば、アクセスすることを示す脆弱性仕様には何も記載されていません。

http://myapp.test/page/12

一方、認証されていない場合、DORは、ページがログイン中にのみアクセスされることを想定しているため、安全ではありません。

壊れたアクセス制御は、アプリケーション機能へのアクセス制御が正しく制御されないが、それがデータベースオブジェクトへのアクセスに関連する必要がない場合のより一般的なケースです。

だから例えば。

http://myapp.test/super_secret_admin_panel

認証なしでアクセスできると、アクセス制御が壊れてしまいます。しかし、認証されたユーザーが必要のない機能にアクセスすることに関連している状況が発生する可能性があるため、通常のスタッフメンバーが

http://myapp.test/all_staff_salary_details

人事部門のメンバーのみがアクセスできるようにする必要がある場合。

したがって、TL; DRは、ユーザーがログインしているかどうかに関係なく、両方の問題が発生する可能性があるわけではありません。

0
Rory McCune