Coders Conquer Security:シェアして学ぶシリーズ - メールヘッダインジェクション

2019年3月21日発行
ジャープ・カラン・シン著
ケーススタディ

Coders Conquer Security:シェアして学ぶシリーズ - メールヘッダインジェクション

2019年3月21日発行
ジャープ・カラン・シン著
リソースを見る
リソースを見る

最近のWebサイトやアプリケーションでは、ユーザーが電子メールを使ってフィードバックやアポイントメント・リマインダー、その他さまざまな情報をアプリケーション経由で送信できるようになっているのが一般的です。通常、このプロセスは非常に良心的であり、ほとんどの人は潜在的なセキュリティリスクの観点から考えることはありません。

しかし、ユーザーの入力を可能にする他のデザイン要素と同様に、適切に設定されていなければ、一見取るに足らない機能であっても、悪意のあるユーザーによって悪意のある目的のために操作される可能性があります。ユーザーが入力フィールドにコードを入力し、それがサーバーで誤って処理されるようにするだけでいいのです。突然、電子メールアプリケーションが武器になってしまうのです。

このエピソードでは、以下のことを学びます。

  • 攻撃者がメールヘッダインジェクションを引き起こす方法
  • メールヘッダーインジェクションが危険な理由
  • この脆弱性を修正することができる技術

攻撃者はどのようにしてメールヘッダインジェクションを引き起こすのか?

プログラム可能とはあまり考えられませんが、ほとんどのメール連絡用アプリケーションや、ウェブサイトやアプリケーションに組み込まれた機能は、問い合わせの性質を変える入力を受け付けることができます。これは通常、ユーザーが電子メールアドレスなどの情報を契約フィールドに入力した後、サーバーが自動的に行うものです。その後、プログラムがメッセージを設定し、適切な受信者を追加し、デフォルトのメールサーバーを使用してメッセージを送信します。

典型的なメールのPOSTリクエストは次のようなものです。

POST /contact.php HTTP/1.1
ホスト: www.example.com

そして、ユーザーが情報を入力した後に、以下のようなコードを生成します。

name=RealName&replyTo=RealName@ValidServer.com&message=YourAppointmentReminder

トラブルが発生するのは、ハッカーが連絡先情報だけではなく、プロセスにコードを注入し始めたときです。これは、SQLインジェクション型の攻撃と似ていますが、メールアプリケーションに対して行われます。操作されたクエリの例としては、アプリケーションから標的となるユーザーに代わりにスパムを送信するようなものがあり、次のようになります。

name=FakeName\nbcc: SpammedVictim@TargetAddress.com&replyTo= FakeName@ValidServer.com&message=Spammed メッセージ

メールヘッダインジェクションはなぜ危険なのか?

悪意のあるユーザーのスキルとその意図に応じて、メールヘッダインジェクション攻撃は、単に迷惑なものから非常に危険なものまで、深刻度の範囲が異なります。深刻度の低いものでは、社内の秘密または非公開のメールボックスに送信された送信メッセージのBCCフィールドに自分の連絡先情報を挿入し、ハッカーに公開することができるかもしれません。

さらに言えば、メールサーバーを完全にコントロールして、スパムやフィッシングなどの攻撃メールを組織から送信できるようになるかもしれません。彼らは、メールが社内のサーバーから発信されていることを偽装する必要はありません。もしあなたがその活動を監視していなければ、彼らはそのプロセスを自動化し、あなたの組織のサーバーを使って、あなたが実際にその活動を扇動しているように見せかけて、何百、何千もの電子メールを送信することもできます。

メールヘッダーインジェクション問題の解決に向けて

SQLインジェクションなどの攻撃と同様に、悪意のあるユーザーがEメールヘッダーの脆弱性を悪用する可能性を排除するには、ユーザーの入力を決して信用しないことが重要です。ユーザーが情報を入力できた場合、それがメールアドレスの入力のような些細なプロセスに見えたとしても、最悪の事態を想定しなければなりません。少なくとも、最悪の事態が起こりうることを想定しなければなりません。

アプリやWebサイトにメール連絡機能を追加する場合も含め、すべてのパラメータに対して入力検証を行う必要があります。ホワイトリストは、有効と思われるプロセスやフィールドを特別に有効にし、それ以外のものをすべて拒否するために使用できます。実際、ほとんどのフレームワークには、必要な機能だけをロックするためのライブラリが用意されています。これにより、悪意のあるユーザーが入力したコードやコマンドがサーバーに認識され、処理されることを防ぐことができます。

メールヘッダーインジェクションの詳細情報

さらに詳しい情報は、OWASPがEメールヘッダーインジェクションについてどのように述べているかをご参照ください。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料デモで、新たに得た防御の知識を試すこともできます。この脆弱性やその他の脅威への対策については、Secure Code Warrior ブログをご覧ください。

電子メールのインジェクションを見つけて修正する準備ができていると思いますか?プラットフォームにアクセスして、自分のスキルを試してみましょう。[Start Here] (ここからスタート)

リソースを見る
リソースを見る

著者

Jaap Karan Singh

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Coders Conquer Security:シェアして学ぶシリーズ - メールヘッダインジェクション

2019年3月21日発行
Jaap Karan Singh著

最近のWebサイトやアプリケーションでは、ユーザーが電子メールを使ってフィードバックやアポイントメント・リマインダー、その他さまざまな情報をアプリケーション経由で送信できるようになっているのが一般的です。通常、このプロセスは非常に良心的であり、ほとんどの人は潜在的なセキュリティリスクの観点から考えることはありません。

しかし、ユーザーの入力を可能にする他のデザイン要素と同様に、適切に設定されていなければ、一見取るに足らない機能であっても、悪意のあるユーザーによって悪意のある目的のために操作される可能性があります。ユーザーが入力フィールドにコードを入力し、それがサーバーで誤って処理されるようにするだけでいいのです。突然、電子メールアプリケーションが武器になってしまうのです。

このエピソードでは、以下のことを学びます。

  • 攻撃者がメールヘッダインジェクションを引き起こす方法
  • メールヘッダーインジェクションが危険な理由
  • この脆弱性を修正することができる技術

攻撃者はどのようにしてメールヘッダインジェクションを引き起こすのか?

プログラム可能とはあまり考えられませんが、ほとんどのメール連絡用アプリケーションや、ウェブサイトやアプリケーションに組み込まれた機能は、問い合わせの性質を変える入力を受け付けることができます。これは通常、ユーザーが電子メールアドレスなどの情報を契約フィールドに入力した後、サーバーが自動的に行うものです。その後、プログラムがメッセージを設定し、適切な受信者を追加し、デフォルトのメールサーバーを使用してメッセージを送信します。

典型的なメールのPOSTリクエストは次のようなものです。

POST /contact.php HTTP/1.1
ホスト: www.example.com

そして、ユーザーが情報を入力した後に、以下のようなコードを生成します。

name=RealName&replyTo=RealName@ValidServer.com&message=YourAppointmentReminder

トラブルが発生するのは、ハッカーが連絡先情報だけではなく、プロセスにコードを注入し始めたときです。これは、SQLインジェクション型の攻撃と似ていますが、メールアプリケーションに対して行われます。操作されたクエリの例としては、アプリケーションから標的となるユーザーに代わりにスパムを送信するようなものがあり、次のようになります。

name=FakeName\nbcc: SpammedVictim@TargetAddress.com&replyTo= FakeName@ValidServer.com&message=Spammed メッセージ

メールヘッダインジェクションはなぜ危険なのか?

悪意のあるユーザーのスキルとその意図に応じて、メールヘッダインジェクション攻撃は、単に迷惑なものから非常に危険なものまで、深刻度の範囲が異なります。深刻度の低いものでは、社内の秘密または非公開のメールボックスに送信された送信メッセージのBCCフィールドに自分の連絡先情報を挿入し、ハッカーに公開することができるかもしれません。

さらに言えば、メールサーバーを完全にコントロールして、スパムやフィッシングなどの攻撃メールを組織から送信できるようになるかもしれません。彼らは、メールが社内のサーバーから発信されていることを偽装する必要はありません。もしあなたがその活動を監視していなければ、彼らはそのプロセスを自動化し、あなたの組織のサーバーを使って、あなたが実際にその活動を扇動しているように見せかけて、何百、何千もの電子メールを送信することもできます。

メールヘッダーインジェクション問題の解決に向けて

SQLインジェクションなどの攻撃と同様に、悪意のあるユーザーがEメールヘッダーの脆弱性を悪用する可能性を排除するには、ユーザーの入力を決して信用しないことが重要です。ユーザーが情報を入力できた場合、それがメールアドレスの入力のような些細なプロセスに見えたとしても、最悪の事態を想定しなければなりません。少なくとも、最悪の事態が起こりうることを想定しなければなりません。

アプリやWebサイトにメール連絡機能を追加する場合も含め、すべてのパラメータに対して入力検証を行う必要があります。ホワイトリストは、有効と思われるプロセスやフィールドを特別に有効にし、それ以外のものをすべて拒否するために使用できます。実際、ほとんどのフレームワークには、必要な機能だけをロックするためのライブラリが用意されています。これにより、悪意のあるユーザーが入力したコードやコマンドがサーバーに認識され、処理されることを防ぐことができます。

メールヘッダーインジェクションの詳細情報

さらに詳しい情報は、OWASPがEメールヘッダーインジェクションについてどのように述べているかをご参照ください。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料デモで、新たに得た防御の知識を試すこともできます。この脆弱性やその他の脅威への対策については、Secure Code Warrior ブログをご覧ください。

電子メールのインジェクションを見つけて修正する準備ができていると思いますか?プラットフォームにアクセスして、自分のスキルを試してみましょう。[Start Here] (ここからスタート)

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。