進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

オープンリダイレクトの概要

Flower icon used to indicate that the content is for Salesforce Classic

Trailblazer の皆さん!

Salesforce には Lightning Experience と Salesforce Classic の 2 つの異なるデスクトップユーザインターフェースがあります。このモジュールは Salesforce Classic 向けです。

インターフェース間の切り替え、Lightning Experience の有効化などについての詳細は、Trailhead の「Lightning Experience の基本」モジュールを参照してください。

学習の目的

この単元を完了すると、次のことができるようになります。
  • オープンリダイレクトの脆弱性の概要を説明する。
  • アプリケーション内にあるこの脆弱性を識別する。
  • オープンリダイレクトの脆弱性がユーザに与える影響を説明する。

オープンリダイレクトとは?

URL リダイレクトは、ユーザを自動的の別の Web ページに送ります。多くの場合、Web サイトへの移動をガイドする場合や、同じ所有者に属する複数のドメイン名が 1 つの Web サイトを参照できるようにする場合に使用されます。開発者にとっては残念なことですが、攻撃者は適切に実装されていない URL リダイレクトを悪用できます。

オープンリダイレクト (「任意のリダイレクト」とも呼ばれる) は、よく知られている Web アプリケーションの脆弱性です。ユーザによって制御される値で決まる場所にアプリケーションがリダイレクトします。次の例は、脆弱なアプリケーションを示します。

https://www.vulnerable-site.com?startURL=https://www.good-site.com

この URL では、vulnerable-site.com アプリケーションが、ページの読み込み時に自動的にユーザを www.good-site.com にリダイレクトします。特に問題はなさそうに見えませんか? ただし、攻撃者が URL を次のように変更したらどうなるでしょうか?

https://www.vulnerable-site.com?startURL=https://www.evil-hacker.com

今回、アプリケーションはユーザを good-site.com ではなく evil-hacker.com にリダイレクトします。

Salesforce アプリケーションにはオープンリダイレクトに対する脆弱性があるのでしょうか? この脆弱性の詳細と、自分のアプリケーションでどう対処できるかを詳しく見ていきましょう。

ヒント

ヒント

ちょっと待ってください! 「インジェクションの脆弱性防止」モジュールをまだ修了していない場合は、まずそちらから始めてください。このモジュールを開始する前に、練習用に脆弱なコードが設定された特別な Developer Edition 組織へのサインアップが必要になります。

オープンリダイレクトの発生個所

あなたは Kingdom Management アプリの主任 Apex 開発者として、さまざまな城で物資要求を追跡するカスタムページを作成しました。ユーザが物資要求を編集して、[Save (保存)] または [Cancel (キャンセル)] をクリックすると、ユーザはアプリケーション内のメニューページにリダイレクトされます。これは一般的な Web アプリケーションの設計パターンです。これを実現するために、次の Visualforce および Apex コードを記述しました。

Visualforce:
<apex:commandButton action="{!save}" value="Save"/>
Apex:
public PageReference save(){
	update accounts;
	String onsave = ApexPages.currentPage().getParameters().get('onSave');
	PageReference savePage = new PageReference(onSave);
	savePage.setRedirect(true);
	return savePage;
}

[Save (保存)] をクリックしたユーザは、パラメータ onSave に保存された URL に移動します。コードを確認し、この機能をデモ環境でテストしてください。

  1. Kingdom Management 開発者組織で、アプリケーションピッカーから Open Redirect アプリケーションに移動します。
  2. [Open Redirect Basics Demo (オープンリダイレクトの基本デモ)] タブを選択します。
  3. onSave URL パラメータにはメニューの URL が入力されていることを確認します (https://[your_instance].visual.force.com/apex/open_redirect_basics_demo?onCancel=%2Fhome%2Fhome.jsp&;onSave=%2Fhome%2Fhome.jsp&tsid=02uf4000000rGfu)
  4. いずれかの取引先を編集し、[Save (保存)] をクリックします。
  5. onSave URL パラメータに保存されている URL (つまり /home/home.jsp) にリダイレクトされたことを確認します。
コードは、意図したとおりに実行されています。脆弱性はどこにあるのでしょう?

攻撃者がアプリケーションのリダイレクトを悪用する方法

リダイレクトは要件を満たしていますが、アプリケーションの無防備なユーザたちは脆弱なままです。これは、ユーザが要求を変更してリダイレクト先を指示できるためです。すでに学習した内容に基づくと、あなたのアプリケーションはオープンリダイレクトに対して脆弱なようです。

Kingdom Management 開発者組織で、いかに簡単にこの脆弱性を悪用できるかを確認できます。

  1. アプリケーションピッカーから Open Redirect アプリケーションに移動します。
  2. [Open Redirect Basics Demo (オープンリダイレクトの基本デモ)] タブを選択します。
  3. onSave URL パラメータを見つけます。
  4. パラメータにリストされた URL を、リック・アストリーのミュージックビデオの URL「https://www.youtube.com/watch?v=dQw4w9WgXcQ」に置き換えます。
  5. URL は「/apex/open_redirect_basics_demo?onSave=https://www.youtube.com/watch?v=dQw4w9WgXcQ」のようになります。
  6. では、オープンリダイレクト攻撃の結果をテストしましょう。Enter キーを押してページを送信するか、次の URL を読み込みます。
    /apex/open_redirect_basics_demo?onSave=https://www.youtube.com/watch?v=dQw4w9WgXcQ

    デモ環境が別のインスタンス上にある場合、URL は「https://c.na3.visual.force.com/apex/open_redirect_basics_demo?onSave=https://www.youtube.com/watch?p=dQw4w9WgXcQ」と似ていても、同一ではない可能性があります。

  7. 取引先を編集して、[Save (保存)] をクリックします。
  8. リック・アストリーの動画にリダイレクトされたら、攻撃は成功です。
このページを使用してオープンリダイレクト機能を探究し、さらにコードを編集できます (ヒント: [Cancel (キャンセル)] ボタンにもオープンリダイレクトの問題があります。見つけてみてください)。

オープンリダイレクトの影響

ご覧のとおり、オープンリダイレクトの脆弱性は知らないうちにいとも簡単にコードに取り込まれます。ただし、この脆弱性は、Web アプリケーションの他の種類の脆弱性ほど深刻には見えないかもしれません (ふざけた動画でそれほど大きな損害が起きるとは思えません)。オープンリダイレクトは決して脆弱性ではないと唱える開発者もいます。それどころか、これは設計どおりに動作する機能です。

しかし、犯罪を目論むハッカーがこの種の脆弱性をどう利用するかを考えてみてください。Trudy は、Kingdom Management のユーザを標的にするハッカーで、ログイン情報 (ユーザ名とパスワード) を盗み出して顧客の Salesforce アカウントに侵入しようとしています。Trudy はオープンリダイレクトを使用してこの企みを実行できるでしょうか?

残念ながら、できます。では、その方法を見ていきましょう。

Trudy は、オープンリダイレクトのデモのときとまったく同じように onSave のリダイレクト機能を利用します。ただし、Trudy は動画にリダイレクトするのではなく、URL パラメータを変更してユーザを自分の Web サイトにリダイレクトします。ユーザは [Save (保存)] をクリックし、次のようなログインページにリダイレクトされます。

攻撃者のオープンリダイレクトログイン画面

Trudy は、attackerwebsite.com のスタイルを、セッションが期限切れになると表示される Salesforce ログインページに見えるように設定しました。ユーザが URL バーに気付かない場合、この偽ログインページにログイン情報を入力して、ユーザ名とパスワードを Trudy に直接送信してしまうかもしれません。この種の攻撃は一般的に「フィッシング」と呼ばれます。オープンリダイレクトは、信頼するアプリケーションによるリダイレクト先にユーザは疑いを抱かないことに攻撃者がつけ込めるため、フィッシングでよく使用されるツールです。

次の単元で説明するように、Salesforce はこの種の脅威を深刻に受け止めており、標準ページでユーザをオープンリダイレクトから保護しています。

retargeting