ぷ~ろぐぷ~ろぐ身辺雑記、アニメ・マンガ、Jリーグ(特に新潟)のこととか。発生箇所メール送信機能のあるページ影響を受けるページ直接影響を受けるページはない。メールを送られたユーザが被害を受ける。概要メールヘッダ・インジェクションは宛先(To)や件名(Subject)などのメールヘッダを外部から指定する際に、改行文字を使ってメールヘッダや本文を追加・変更する手法である。件名や送信元、本文が改変される。迷惑メールの送信に悪用される。ウイルスメールの送信に悪用される。以下のようなメール送信フォームを考える。value="送信"></form>フォームからのリクエストを受けてメールを送信するスクリプトは以下になる。"問い合わせがありました。第4引数は追加のメールヘッダで、これを利用してFromアドレスを設定している。この引数は改行で区切ることで複数のヘッダを指定可能である。上記のスクリプトでそのことを考慮されておらず、メールヘッダインジェクション脆弱性がある。最初に示したメール送信フォームでFromアドレス用のinputタグをtextareaタグに変えたフォームを考える。このフォームで先のスクリプトのメールヘッダ・インジェクション脆弱性を利用して宛先を追加することができる。bbb@example.jpと入力すると、スクリプトで指定した宛先の他にBccヘッダが追加され、Bccヘッダで指定したメールアドレスにもメールが送信される。他に添付ファイルを追加したり、ヘッダの下に空行を1行入れてさらに入力すれば本文を改ざんすることも可能である。脆弱性の原因メールのメッセージヘッダは各フィールドが改行で区切られている。アプリケーションが外部から指定するパラメータの改行をチェックしていない場合、ヘッダや本文を追加・変更できることになる。これがメールヘッダ・インジェクション脆弱性の原因である。以下の対策が推奨される。メール送信に専用のライブラリを使用するメール送信に専用ライブラリを使用せずにsendmailコマンドを使用すると、アプリケーションがメールのメッセージ組み立ての責任を持たなければならず、メールヘッダ・インジェクション脆弱性が入り込みやすい。OSコマンド・インジェクション脆弱性が混入する可能性がある。メールヘッダ・インジェクション脆弱性は本来はメール送信ライブラリで対策されるべきものである。多くのメール送信ライブラリにメールヘッダ・インジェクション脆弱性が見つかっているため、さらに以下のいずれかの実施が推奨される。外部からのパラメータをメールヘッダに含ませないようにする。外部からのパラメータには改行を含まないようにチェックする。mb_send_mail()のようなメール送信ライブラリの関数のラッパー関数を作成し、ラッパー関数側で改行文字をチェックするとよい。予防的対策としてメールアドレスと件名のチェックがある。メールアドレス・件名には本来、改行は含まれないので、入力値の妥当性検証でチェックされるべきものである。よって、適切に入力値の検証がなされれば予防的な対策となる。RFC5322で定められたメールアドレスの規定はかなり複雑なので、WEBアプリケーションの要件としてメールアドレスの仕様を定め、その要件にマッチしているか入力値を検証すればよい。テクノポップのカリスマ。