セキュリティ

メールヘッダ・インジェクションとは | 分かりやすく図解で解説

2019年12月2日

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

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を使用することで、メールヘッダ・インジェクション攻撃を防げます。

バージョンの古いメール送信用APIは「メールヘッダ・インジェクション」対策がおこなわれていない場合もあるので要注意です。

外部から入力された改行コードは削除する

上記以外の対策としては、外部から入力された改行コードを削除するという方法もあります。

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

helpful