第11章. クロスサイト・リクエスト・フォージェリ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
実行したい演算子を実行できるAPIエンドポイントが存在することは既に知っているが、特権アクセス(例えば管理者アカウント)が必要なため、そのエンドポイントにアクセスできないことがある。この章では、JavaScript のコード・スニペットを使うのではなく、管理者または演算子が我々の代わりに演算を実行するようなクロスサイト・リクエスト・フォージェリ(CSRF)エクスプロイトを構築する。
CSRF攻撃は、ブラウザの演算子やWebサイトとブラウザの信頼関係を利用する。セキュリティを確保するためにこの信頼関係に依存しながらも、ブラウザへの信頼が高すぎるAPI呼び出しを発見することで、ちょっとした努力で、リクエストを生成したユーザが知らないうちに、ユーザが自分の代わりにリクエストを行うようなリンクやフォームを作成することができる。
ブラウザのリクエストは裏で行われるため、CSRF攻撃は攻撃されたユーザに気づかれないことが多い。つまり、この種の攻撃は特権ユーザを利用し、ユーザに気づかれることなくサーバに対して演算子を実行することができる。最もステルス性の高い攻撃のひとつであり、2000年代初頭に始まって以来、ウェブ全体に大混乱を引き起こしてきた。
クエリ・パラメータの改ざん
CSRF攻撃の最も基本的な形態である、ハイパーリンクを介したパラメータ改ざんについて考えてみよう(図11-1参照)。ウェブ上のほとんどのハイパーリンクは HTTP GET リクエストに対応している。最も一般的なハイパーリンクは、HTMLスニペットに埋め込まれた<a href="https://my-site.com"></a> 。
HTTP GETリクエストの構造は、それがどこから送信され、どこから読み取られ、どのようにネットワーク上を移動するかに関係なく、シンプルで一貫している。HTTP GETが有効であるためには、HTTP仕様のサポートされているバージョンに従わなければならない。
HTTP GETリクエストの構造は以下の通りである:
GET/resource-url?key=valueHTTP/1.1 Host:www.mega-bank.com
すべてのHTTP GETリクエストは、HTTPメソッド(GET)、リソースURL、オプションのクエリパラメータのセットを含む。クエリパラメータの開始は? で示され、空白が発見されるまで続く。この後にHTTP仕様が来て、次の行にリソースURLを置くことができるホストが来る。
ウェブサーバがこのリクエストを受け取ると、適切なハンドラクラスにルーティングされる。ハンドラクラスは、クエリパラメータと、リクエストを行ったユーザを特定するための追加情報、リクエスト元のブラウザの種類、返されるデータの形式を受け取る。
図11-1. CSRF GET-悪意のあるリンクが拡散され、クリックされると、認証済みユーザに代わって状態を変更する HTTP GET リクエストが実行される。
この概念をより具体的にするために、例を見てみよう。最初の例は、最も人気のあるNode.jsベースのウェブ・サーバー・ソフトウェアであるExpressJSの上に書かれたサーバ側ルーティング・クラスだ: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access