メールヘッダ・インジェクション(安全なウェブサイトの作り方)

IPAの「安全なウェブサイトの作り方」を読み進める第7回!
※この記事は上記の文書を個人的にまとめた防備録となるので注意。

この文書の目次は以下。

1) SQL インジェクション
2) OS コマンド・インジェクション
3) パス名パラメータの未チェック/ディレクトリ・トラバーサル
4) セッション管理の不備
5) クロスサイト・スクリプティング
6) CSRF(クロスサイト・リクエスト・フォージェリ)
7) HTTP ヘッダ・インジェクション
8) メールヘッダ・インジェクション
9) アクセス制御や認可制御の欠落

前回はHTTPヘッダ・インジェクションついて学んだ。
今回は「メールヘッダ・インジェクション」について。

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

安全なウェブサイトの作り方より。

ウェブアプリケーションの中には、利用者が入力した商品申し込みやアンケート等の内容を、特定のメールアドレスに送信する機能を持つものがあります。一般に、このメールアドレスは固定で、ウェブアプリケーションの管理者以外の人は変更できませんが、実装によっては、外部の利用者がこのメールアドレスを自由に指定できてしまう場合があります。

例えば、悪意のある人に指定された任意の宛先にメールが送信される。
それは、迷惑メールとなる・・・ってこと?

発生しうる脅威は以下。
・メールの第三者中継

注意が必要なウェブサイトは以下。
・問い合わせページやアンケートページがあるサイト

2.メールヘッダ・インジェクションの対策

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

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

この方法なら確実だけど・・・
どうしても外部からの入力で決めたい場合もあるよね。

そういう時はアプリケーション側で判断して、複数のヘッダを用意しておけばいいのか?
ただ、複数でも全てをカバーできなさそう。

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

外部からの入力をメールヘッダに出力する場合、ウェブアプリケーションの実行環境や言語に用意されているメール送信用 API を使用することをお勧めします。

やっぱり積極的にこういうのを使っていくべき。
FuelPHPにもメール送信用のパッケージがある。

HTML で宛先を指定しない

hiddenをそのまま使うなよってこと。

保険的対策

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

参考

安全なウェブサイトの作り方

コメント

タイトルとURLをコピーしました