• 検索結果がありません。

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

1. ウェブアプリケーションのセキュリティ実装

1.8 メールヘッダ・インジェクション

トと多くはありません。受付開始当初から断続的に届出を受けています。下記は、IPA が届出を受け、同 脆弱性の対策が施されたソフトウェア製品の例です。

・CGI RESCUE 製「フォームメール」におけるメールの不正送信が可能な脆弱性 http://jvndb.jvn.jp/jvndb/JVNDB-2009-000023

・「MailDwarf」においてメールの不正送信が可能な脆弱性 http://jvndb.jvn.jp/jvndb/JVNDB-2007-000229

■ 根本的解決

「To」、「Cc」、「Bcc」、「Subject」等のメールヘッダの内容が外部からの入力に依存する場合や、メー ル送信プログラムへの出力処理に問題がある場合、外部からの入力をそのまま出力すると、外部から 与えられた改行コードが余分な改行として差し込まれることになります。これを許すと、任意のメールヘ ッダの挿入や、メール本文の改変、任意の宛先へのメール送信に悪用される原因となります。

外部からの入力をメールヘッダに出力しない実装29をお勧めします。

メールヘッダを固定値にできない場合の例としては、メールの件名を変更したい場合等があります。

外部からの入力をメールヘッダに出力する場合、ウェブアプリケーションの実行環境や言語に用意 されているメール送信用 API を使用することをお勧めします。ただし、API によっては改行コードの取り 扱いが不適切なもの、複数のメールヘッダが挿入できる仕様のものがあります。その場合、脆弱性が 修正されたバージョンを使用するか、改行を許可しないよう、開発者自身で適切な処理を実装します。

改行を許可しない適切な処理には、改行コードの後に空白か水平タブを入れることで継続行として 処理する方法や、改行コード以降の文字を削除する方法、改行が含まれていたらウェブページの生成 の処理を中止する方法等が考えられます。

これは、いわば「論外」の実装ですが、hidden パラメータ等に宛先をそのまま指定するという事例の 届出がありましたので、避けるべき実装として紹介します。

ウェブアプリケーションに渡されるパラメータに宛先を直接指定する実装は、パラメータ値の改変に より、メールシステムの第三者中継につながる可能性があります。

29 3.8 の修正例 1 を参照。

☞ HTML で宛先を指定しない。

☞ メールヘッダを固定値にできない場合、ウェブアプリケーションの実行環境や言語に 用意されているメール送信用 API を使用する。

☞ メールヘッダを固定値にして、外部からの入力はすべてメール本文に出力する。

8-(i)-a

8-(i)-b

8-(ii)

1.8 メールヘッダ・インジェクション

■ 保険的対策

外部からの入力の全てについて、改行コードを削除します30。あるいは改行コードだけではなく、制 御コード全てを削除してもよいかもしれません。ただし、ウェブアプリケーションが、メール本文に出力 するデータ等、改行コードを含みうる文字列にも、全ての入力に対して処理を行うと、そのウェブアプリ ケーションが正しく動作しなくなるため、注意が必要です。

以上の対策により、メールヘッダ・インジェクション攻撃に対する安全性の向上が期待できます。メー ルヘッダ・インジェクションに関する情報については、次の資料も参考にしてください。

■ 参考 URL

IPA: 知っていますか?脆弱性 (ぜいじゃくせい) 「10. メール不正中継」

http://www.ipa.go.jp/security/vuln/vuln_contents/mail.html http://www.ipa.go.jp/security/vuln/vuln_contents/mail_flash.html IPA: セキュア・プログラミング講座 「メールの第三者中継対策

http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/201.html

30 3.8 の修正例 2 を参照。

☞ 外部からの入力の全てについて、改行コードを削除する。

8-(iii)