CWE-352
Compound Element ID:352(Compound Element Variant: Composite)
Status: Draft
クロスサイトリクエストフォージェリ
解説
解説要約
本脆弱性が存在する Web アプリケーションは、フォーマットに沿った、妥当で一貫性のあるリクエストが、送信したユーザの意図通りに渡されたものかを十分に検証しない、あるいは検証が不可能です。
詳細な解説
Web サーバがリクエストを検証せずに受け取るよう設計されている場合、攻撃者がクライアントを騙し、意図しないリクエストを Web サーバに送信させる可能性があります。その場合、Web サーバはそのリクエストを正規のものとして取り扱います。
この攻撃はURL、画像の読み込み、XMLHttpRequest 等を介して行われ、データの漏えいや意図しないコードの実行を招く可能性があります。
別名
セッションライディング
クロスサイトリファレンスフォージェリ
XSRF
理論的な補足
CSRFのトポロジーは、複数の経路に渡ります。
1. 攻撃者から、仲介するユーザに対して。内部もしくは外部の経路において作用します。
2. 仲介するユーザから、犠牲となるサーバに対して。内部の経路において作用します。
脆弱性の発生時期
アーキテクチャおよび設計
該当するプラットフォーム
言語
言語に依存
分類
Webサーバ
一般的な影響
影響を受ける範囲 | 影響 |
---|---|
機密性 完全性 可用性 |
技術的インパクト:権限の取得やなりすまし、防御メカニズムの回避、アプリケーションデータの読み取り 重大性は CSRF の脆弱性が存在する機能の性質によって変わります。攻撃者は事実上、被害者と同じように操作を行うことが可能です。被害者が管理者あるいは権限のあるユーザだった場合には、web アプリケーションの完全なコントロール(データの削除や窃取、製品のアンインストールや製品の全てのユーザに対する攻撃の基盤としての利用等)を与えることになります。攻撃者は被害者の識別を持っているため、CSRF の及ぶ範囲は被害者の持つ権限内に制限されます。 |
攻撃を受ける可能性
中〜高
検出手段
手動分析
本脆弱性はペネトレーションテスト、脅威モデル及び試験者がアクティブセッションを変更、記録できるインタラクティブなツールのような、手動の(人による)分析を必要とする技術とツールによって検出可能です。
具体的には、手動による分析は本脆弱性の発見に有効であり、ビジネスロジックを理解していればフォールスポジティブを最小化します。しかし、時間的な制約の中でコード全てを分析することは不可能でしょう。ブラックボックス分析において特権アカウントの情報がない場合、アプリケーションにおいてセキュリティ上最も重要な部分への配慮が十分ではない可能性があります。
潜在的な問題を特定し、手動分析に役立つ OWASP CSRFTester の利用が推奨されます。
有効性:高
手動分析は完全に自動化された手段よりも効果的です。脆弱性が設計及びビジネスルールに関係する場合に特に有効です。
自動静的分析
現在のところ、CSRF は自動分析を使用しても確実に防ぐことは困難です。これは、各アプリケーションがそれぞれ、外部からの影響を受けるリクエストを決定付ける暗黙のセキュリティポリシーを持っていること、及びユーザが作成しようとするリクエストに対する高い信頼を要求するリクエストに対して、ユーザの代わりに自動実行していることが原因です。例えば、web サイトの公開部分にあるキーワード検索は、一般的にユーザがリンクをクリックしたしたときに自動的に実行されるリンク内でエンコードされることが期待されています。
有効性:限定的
脆弱なコード例
例 1:
この PHP のコード例は、ユーザの投稿が適切なセッションを持っていることを確認することにより、フォームの投稿処理を安全にしようとしたものです。しかし、攻撃者は適切なセッションをすでに保持しているユーザの web ブラウザからのリクエストを偽造するため、CSRF 攻撃はこの対策では防ぐことができません。 以下の HTML はユーザにプロフィールのアップデートを行わせるためのものです。
Example Language: HTML (Bad Code)
<form action="/url/profile.php" method="post"> <input type="text" name="firstname"/> <input type="text" name="lastname"/> <br/> <input type="text" name="email"/> <input type="submit" name="submit" value="Update"/> </form>
profile.php には、以下のコードが含まれています。
Example Language: PHP (Bad Code)
// initiate the session in order to validate sessions session_start(); //if the session is registered to a valid user then allow update if (! session_is_registered("username")) { echo "invalid session detected!"; // Redirect user to login page [...] exit; } // The user session is valid, so process the request // and update the information update_profile(); function update_profile { // read in the data from $POST and send an update // to the database SendUpdateToDatabase($_SESSION['username'], $_POST['email']); [...] echo "Your profile has been successfully updated."; }
一見、適切なセッションを確認しているためこのコードは保護されているように見えます。しかし、CSRF 攻撃は実質的に、image タグ、リンク、埋め込みや object タグ または、背景イメージを呼び出すその他の属性を含めており、あらゆるタグや HTML 構造から実行可能です。
攻撃者は、標的の web アプリケーションにログインしている間にページを訪れたあらゆるユーザのユーザ名やメールアドレスを変更するコードをしのばせることが可能です。そのコードは以下のように無害な web ページに見えます。
発見された事例
参照 | 詳細 |
---|---|
CVE-2004-1703 | Add user accounts via a URL in an img tag |
CVE-2004-1995 | Add user accounts via a URL in an img tag |
CVE-2004-1967 | Arbitrary code execution by specifying the code in a crafted img tag or URL |
CVE-2004-1842 | Gain administrative privileges via a URL in an img tag |
CVE-2005-1947 | Delete a victim's information via a URL or an img tag |
CVE-2005-2059 | Change another users settings via a URL or an img tag |
CVE-2005-1674 | Perform actions as administrator via a URL or an img tag |
CVE-2009-3520 | modify password for the administrator |
CVE-2009-3022 | CMS allows modification of configuration via CSRF attack against the administrator |
CVE-2009-3759 | web interface allows password changes or stopping a virtual machine via CSRF |
被害の緩和策
フェーズ:アーキテクチャおよび設計
戦略: ライブラリ、フレームワーク
本脆弱性の発生を防ぐ、あるいは本脆弱性を回避しやすい構造を提供する、十分に検査されたライブラリやフレームワークを使用してください。
例として、OWASP CSRFGuard などのCSRF対策パッケージが挙げられます。
他の例としては、CSRF に対するコンポーネントを持つ ESAPI Session Management control が挙げられます。
フェーズ:実装
多くの CSRF 対策は攻撃者からのスクリプトにより回避されるため、実装するアプリケーションにクロスサイトスクリプティングの問題 (CWE-79) が無いことを確認して下さい。
フェーズ:アーキテクチャおよび設計
一意の乱数をフォーム毎に生成、セットし、フォームが受け取る乱数を検証してください。
この乱数は推測困難なものにして下さい (CWE-330).。
この緩和策はクロスサイトスクリプティング(CWE-79)により回避可能であることに注意してください。
フェーズ:アーキテクチャおよび設計
特に危険な処理を特定してください。ユーザが危険な処理を行った場合、ユーザがその処理を意図しているかを確認する個別の確認リクエストを送信してください。
この緩和策はクロスサイトスクリプティング(CWE-79)により回避可能であることに注意してください。
フェーズ:アーキテクチャおよび設計
Felten と Zeller の提唱する "double-submitted cookie" メソッドを使用して下さい。
この手法は Javascript を必要するため、Javascript が有効でないブラウザには効果がありません。
この緩和策はクロスサイトスクリプティング(CWE-79)により回避可能であることに注意してください。
フェーズ:アーキテクチャおよび設計
状態の変更を引き起こす全てのリクエストにおいて、GET メソッドを使用しないで下さい。
フェーズ:実装
意図したページからリクエストが送信されているかを確認するため、HTTP Referer ヘッダを確認して下さい。ユーザやプロキシがプライバシー上の理由で Referer の送信を無効にしている可能性があるため、本来の機能として違反する可能性があります。
この緩和策はクロスサイトスクリプティング(CWE-79)により回避可能であることに注意してください。攻撃者はクロスサイトスクリプティングによって、ユーザになりすました Referer を生成する、あるいは Referer の許可されたページから、悪意のあるリクエストを生成する可能性があります。
関係性
Nature | Type | ID | Name | View(s) this relationship pertains to |
---|---|---|---|---|
Requires | Weakness Base | 346 | Origin Validation Error | Research Concepts1000 |
Requires | Weakness Base | 441 | Unintended Proxy/Intermediary | Research Concepts1000 |
Requires | Weakness Base | 613 | Unintended Proxy/Intermediary | Research Concepts1000 |
Requires | Weakness Class | 642 | External Control of Critical State Data | Research Concepts1000 |
ChildOf | Weakness Class | 345 | Insufficient Verification of Data Authenticity | Development Concepts (primary)699 |
Research Concepts (primary)1000 | ||||
ChildOf | Category | 716 | OWASP Top Ten 2007 Category A5 - Cross Site Request Forgery (CSRF) | Weaknesses in OWASP Top Ten (2007) (primary)629 |
ChildOf | Category | 751 | 2009 Top 25 - Insecure Interaction Between Components | Weaknesses in the 2009 CWE/SANS Top 25 Most Dangerous Programming Errors (primary)750 |
ChildOf | Category | 801 | 2010 Top 25 - Insecure Interaction Between Components | Weaknesses in the 2010 CWE/SANS Top 25 Most Dangerous Programming Errors(primary)800 |
ChildOf | Category | 814 | OWASP Top Ten 2010 Category A5 - Cross-Site Request Forgery(CSRF) | Weaknesses in OWASP Top Ten (2010)(primary)809 |
MemberOf | View | 635 | Weaknesses Used by NVD | Weaknesses Used by NVD (primary)635 |
PeerOf | Weakness Base | 79 | Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') | Research Concepts1000 |
関係性の補足
クロスサイトスクリプティング(XSS)により、CSRF が発生する可能性があります。
(必ずしも、CSRF の原因が XSS であるとは限りません。)
要調査事項 (CWE の見解)
問題が顕著になり始めた 2008 年前後までは、CVE において過少報告されてきましたが、CSRF はほとんどの Web アプリケーションに存在する脆弱性です。
他組織での分類
組織名または組織での分類 | ノード ID | CWEの分類との適合度 | 分類名 |
---|---|---|---|
PLOVER | Cross-Site Request Forgery (CSRF) | ||
OWASP Top Ten 2007 | A5 | 同等 | Cross Site Request Forgery (CSRF) |
WASC | 9 | Cross-site Request Forgery |
関連する攻撃パターン
CAPEC-ID | 攻撃パターン名 (CAPEC Version 1.5) |
---|---|
62 | Cross Site Request Forgery (aka Session Riding) |
111 | JSON Hijacking (aka JavaScript Hijacking) |
参照
[REF-17] Michael Howard, David LeBlanc and John Viega. "24 Deadly Sins of Software Security". "Sin 2: Web-Server Related Vulnerabilities (XSS, XSRF, and Response Splitting)." Page 37. McGraw-Hill. 2010.
Peter W. "Cross-Site Request Forgeries (Re: The Dangers of Allowing Users to Post Images)".
Bugtraq. <http://marc.info/?l=bugtraq&m=99263135911884&w=2>.
OWASP. "Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet". <http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet>.
Edward W. Felten and William Zeller. "Cross-Site Request Forgeries: Exploitation and Prevention". 2008-10-18. <http://freedom-to-tinker.com/sites/default/files/csrf.pdf>.
Robert Auger. "CSRF - The Cross-Site Request Forgery (CSRF/XSRF) FAQ". <http://www.cgisecurity.com/articles/csrf-faq.shtml>.
Cross-site request forgery. Wikipedia. 2008-12-22. <http://en.wikipedia.org/wiki/Cross-site_request_forgery>.
Jason Lam. "Top 25 Series - Rank 4 - Cross Site Request Forgery". SANS Software Security Institute. 2010-03-03. <http://blogs.sans.org/appsecstreetfighter/2010/03/03/top-25-series-%E2%80%93-rank-4-%E2%80%93-cross-site-request-forgery/>.
更新履歴
[2011年04月21日]
2010年10月12日時点のデータを元に更新
[2009年06月29日]
2009年02月02日時点の下記 URL を元に作成
http://cwe.mitre.org/data/definitions/352.html
登録日 2011/04/21
最終更新日 2023/04/04