目次
メールヘッダ・インジェクションとは
Webサイトには「お問い合わせフォーム」や「アンケート」などのように特定の相手にメールを送信する機能があります。この時、Webサイトで入力した内容を送信する相手はシステム側で固定(主にWebサイトの管理者など)されているのが一般的です。

メールヘッダ・インジェクション攻撃は「お問い合わせフォーム」や「アンケート」などのように特定の相手にメールを送信する機能に対して、入力データを"改ざん"することで、メールの送信先を「悪意のある攻撃者」によって操作する攻撃のことをいいます。

上記図の例では、システム側で固定されている宛先であるWebサイトの管理者以外にも、複数人にメールが送信されています。
[具体例] メールヘッダ・インジェクションとは「メールヘッダ」を"改ざん"する攻撃

メールは以下のような構成になっています。

メールヘッダは「項目: 設定値<改行>」の形式で表されます。そしてメールヘッダとメール本文の区別は1行空けることで判定しています。メールヘッダ・インジェクションは、このメールヘッダを「改ざん」する攻撃です。
例えば、以下のような「メールタイトル」を入力できる「お問い合わせフォーム」があるとします。

ここでタイトルに「メールのタイトルです%0d%0aBcc%3a%20△△@△△△.△△」と入力するとどうなるでしょうか。
※%0d%0aは「改行コード」、%3aは「:」、%20は「スペース」を表します。
From: <×××@××.××>
Message-ID: <e5694148-b927-44e4-a6e9-2a4c7c56cc49@fc4210.××.××>
MIME-Version: 1.0
Subject: メールのタイトルです
Bcc: <△△@△△△.△△>
To: <〇〇〇@〇〇.〇〇>
SVTjgpLliIbjgYvjgorjgoTjgZnjgY/op6PoqqzvvIhhMDYwMzE0NzE1ODLv
4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pS
4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBQTgubmVaab
入力の結果を確認してみると、メールタイトルの後にBccで△△@△△△.△△が追加されています。これがメールヘッダ・インジェクション攻撃です。
入力内容を「改ざん」することで、メールの送信先を「悪意のある攻撃者」によって操作できてしまうのです。
スポンサーリンク
メールヘッダ・インジェクション対策
外部からの入力は全てメール本文に設定する
メールタイトル(Subject)のような項目を外部から入力可能にすると、改行コードを使用してメールヘッダを「改ざん」することが可能です。
そのため、外部からはメールタイトル(Subject)のような項目を入力不可とし、外部からの入力は全てメール本文に設定することで、メールヘッダ・インジェクション攻撃を防げます。
メールヘッダ・インジェクション対策されているメール送信APIを使用する
Webアプリケーションを作成する言語には、メール送信用のAPIが用意されています。
メールヘッダ・インジェクション対策されているメール送信用APIを使用することで、メールヘッダ・インジェクション攻撃を防げます。

外部から入力された改行コードは削除する
上記以外の対策としては、外部から入力された改行コードを削除するという方法もあります。
メールヘッダを「改ざん」する手法は、改行コードを含む文字列を外部から入力してくるので、その入力内容から改行コードを取り除くことで、メールヘッダ・インジェクション攻撃を防げます。