web-dev-qa-db-ja.com

認証されていないCSRFはまだCSRFですか?

OWASP defines Cross-Site Request Forgery(CSRF)as

エンドユーザーに、現在認証されているWebアプリケーションで不要なアクションを強制的に実行させる攻撃

(強調鉱山)

攻撃の例はリンクhttp://example.com/logoutクリックするとログアウトされる認証済みユーザーに送信されます。ユーザーに提供したリンクをクリックさせることで、システムの状態(この場合はユーザーログイン)を変更することができました。

認証されているかどうかに関係なく、誰でも投票できる投票システムを想像してみてください。システムは誰が投票したかを追跡しません(それ自体が明らかに問題です)。

投票カウンターを増やすHTTP呼び出しを制限なしで再生できます。 クリックして(ログインせずに)他の誰かにそのリプレイリンクを送信し、投票カウンターを増やすことは、CSRFの脆弱性と見なされますか?

私の意見では、これはCSRFではないということです:

  • 定義の「認証された」部分が欠けている(セマンティクスの場合)
  • この分類の目的は、攻撃者が他の方法では実行できないコマンドを実行できるようにすることです(認証が必要なため)。上記の認証されていない投票のケースは、IMOの方が A4(Broken Access Control) で説明されています。
3
WoJ

そのログインをクリックして(ログインせずに)クリックして投票カウンターを増やす誰かにその再生リンクを送信することは、CSRFの脆弱性と見なされますか?

CSRFの2013 OWASPエントリ を確認すると、彼らの攻撃シナリオ(私の心に)は、あなたの例に似た何かを説明しているようです:

このアプリケーションを使用すると、ユーザーは秘密を含まない状態変更要求を送信できます。したがって、攻撃者は被害者のアカウントから攻撃者のアカウントに送金するリクエストを作成し、この攻撃を、攻撃者の制御下にあるさまざまなサイトに保存されている画像リクエストまたはiframeに埋め込みます。

この例の場合、認証は必要ないため、そのシナリオはすべての場合に当てはまります。攻撃者はユーザーにサイトに対してリクエストを発行させ、状態を変化させる可能性があります。

OWASPが認証されているセッションについて言及しているのは、サイトの状態変更に影響を与えるために何が必要かについての彼らの側の仮定を反映していると思います。私は認証が実際にCSRFの定義の一部であるとは思いません- CSRFに関するウィキペディアのエントリ の言及:

CSRFには通常、次の特性があります。

  • これには、ユーザーのIDに依存するサイトが含まれます。
  • そのアイデンティティに対するサイトの信頼を悪用します。
  • ユーザーのブラウザをだまして、ターゲットサイトにHTTPリクエストを送信させます。
  • これには、副作用のあるHTTPリクエストが含まれます。

そのため、実際にはアプリケーションがCSRFに対して脆弱であると考えることができると思います。ユーザーは副作用を伴うリクエストを発行せざるを得ず、そのリクエストは常に成功します(少なくとも理論的には、ユーザーのIPに関連付けられる可能性があります) 、 例えば)。

CSRFが純粋に攻撃者に「他の方法ではできないこと」を許可することについて確信がない-ユーザーを作成することであると主張することができると思う彼らがそうしなかったかもしれない何かをしなさい。

1