My Photo

« 2014冬アニメ第1話感想 | Main | WordPressでsession_start()など初期化処理をしたい »

January 23, 2014

メールヘッダ・インジェクション脆弱性

発生箇所 メール送信機能のあるページ
影響を受けるページ 直接影響を受けるページはない。メールを送られたユーザが被害を受ける。
影響の種類 迷惑メールの送信、メールの宛先や件名・本文の改ざん、ウイルス添付メールの送信
利用者の関与の度合い 不要

概要

メールヘッダ・インジェクションは宛先(To)や件名(Subject)などのメールヘッダを外部から指定する際に、改行文字を使ってメールヘッダや本文を追加・変更する手法である。
影響は以下。

  • 件名や送信元、本文が改変される。
  • 迷惑メールの送信に悪用される。
  • ウイルスメールの送信に悪用される。

攻撃手法

以下のようなメール送信フォームを考える。

<form action="mail.php" method="POST">
メール:<input type="text" name="from"><br>
本文:<textarea name="body"></textarea>
<input type="submit" value="送信">
</form>

フォームからのリクエストを受けてメールを送信するスクリプトは以下になる。

$from = $_POST['from'];
$body = $_POST['body'];
mb_language('Japanese');
mb_send_mail(
  "aaa@example.jp", "問い合わせがありました。",
  "以下の問い合わせがありましたので対応をお願いします\n\n" . $body,
  "From: " . $from);

上記スクリプトで使用している mb_send_mail() の第4引数は追加のメールヘッダで、これを利用してFromアドレスを設定している。
この引数は改行で区切ることで複数のヘッダを指定可能である。しかし、上記のスクリプトでそのことを考慮されておらず、メールヘッダインジェクション脆弱性がある。

最初に示したメール送信フォームでFromアドレス用のinputタグをtextareaタグに変えたフォームを考える。
このフォームで先のスクリプトのメールヘッダ・インジェクション脆弱性を利用して宛先を追加することができる。Fromアドレスのtextareaに

aaa@example.jp
Bcc: bbb@example.jp

と入力すると、スクリプトで指定した宛先の他にBccヘッダが追加され、Bccヘッダで指定したメールアドレスにもメールが送信される。
他に添付ファイルを追加したり、ヘッダの下に空行を1行入れてさらに入力すれば本文を改ざんすることも可能である。

脆弱性の原因

メールのメッセージヘッダは各フィールドが改行で区切られている。
アプリケーションが外部から指定するパラメータの改行をチェックしていない場合、ヘッダや本文を追加・変更できることになる。これがメールヘッダ・インジェクション脆弱性の原因である。

対策

以下の対策が推奨される。

  • メール送信に専用のライブラリを使用する

メール送信に専用ライブラリを使用せずにsendmailコマンドを使用すると、アプリケーションがメールのメッセージ組み立ての責任を持たなければならず、メールヘッダ・インジェクション脆弱性が入り込みやすい。また、OSコマンド・インジェクション脆弱性が混入する可能性がある。
また、メールヘッダ・インジェクション脆弱性は本来はメール送信ライブラリで対策されるべきものである。
しかし、多くのメール送信ライブラリにメールヘッダ・インジェクション脆弱性が見つかっているため、さらに以下のいずれかの実施が推奨される。

  • 外部からのパラメータをメールヘッダに含ませないようにする。
  • 外部からのパラメータには改行を含まないようにチェックする。

mb_send_mail()のようなメール送信ライブラリの関数のラッパー関数を作成し、ラッパー関数側で改行文字をチェックするとよい。

また、予防的対策としてメールアドレスと件名のチェックがある。メールアドレス・件名には本来、改行は含まれないので、入力値の妥当性検証でチェックされるべきものである。よって、適切に入力値の検証がなされれば予防的な対策となる。
RFC5322で定められたメールアドレスの規定はかなり複雑なので、WEBアプリケーションの要件としてメールアドレスの仕様を定め、その要件にマッチしているか入力値を検証すればよい。

参考文献:体系的に学ぶWebアプリケーションの作り方 4.9.2 メールヘッダ・インジェクション脆弱性

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩

ソフトバンククリエイティブ 2011-03-03
売り上げランキング : 4070

Amazonで詳しく見る
by G-Tools

« 2014冬アニメ第1話感想 | Main | WordPressでsession_start()など初期化処理をしたい »

PHP」カテゴリの記事

セキュリティ」カテゴリの記事

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference メールヘッダ・インジェクション脆弱性:

« 2014冬アニメ第1話感想 | Main | WordPressでsession_start()など初期化処理をしたい »

June 2021
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof