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