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

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

ウェブサイトによっては利用者が入力下した内容を特定のメールアドレスへ 配信するシステもあります。

メールアドレスは固定となり、管理者以外からの変更ができないようになっていますが、 実装によっては利用者が任意のアドレスへ送信することが可能となっています。

このような問題を引き起こす脆弱性を「メールヘッダ・インジェクション」といいます。

発生する可能性のある脅威

実装例

フォームから情報を送信する際の一例です。

open (MAIL, "| /usr/sbin/sendmail -t -i");
print MAIL << "EOF";
To: info\@example.com
From: $email
Subject: お問い合わせ($name)
Content-Type: text/plain; charset="ISO-2022?JP"

$inquiry
EOF
close (MAIL);

上記実装では、sendmailコマンドの標準入力にメールヘッダ及び、メール本文を加えることで メールの送信を行います。

    To: info@example.com
    From: anzen@example.net
    Subject: お問い合わせ(anzen)
    Content-Type: text/plain; charset="ISO-2022?JP"

    Hello, World

上記のような例で「test@example.net%0d%0aBcc%3a%20test@example.org」と アドレス欄に入力すると、以下のようにBCCの指定が作成され、別のアドレス 宛にもメールが送信されるようになります。

    To: info@example.com
    From: test@example.net
    Bcc: test@example.org
    Subject: お問い合わせ(anzen)
    Content-Type: text/plain; charset="ISO-2022?JP"

    Hello, World

対策例

  • ユーザーの入力内容をメールヘッダーへ出力しない

  • メールヘッダーに展開する変数から改行コードを除去する