はじめに
貴社がメール機能に渡すデータを自由に操作できる場合、クライアントはサーバからメールを送ることが可能です。これは驚くべきことではありません。
PHPアプリにおけるメールインジェクションの脆弱性が多く見受けられるのは憂慮すべき事態であり、この弱点が世界中のスパマーにとって秘密の手段となっています。しかし、なぜこれほどまでに広まっているのでしょうか?
メールインジェクションが問題視されるのは、エンジニアが攻撃手法や、メール機能にデータを渡す前に入力値を適切に処理する重要性を十分に理解していないからです。本記事では、メールヘッダーインジェクション、メールHTMLインジェクション、SMTPヘッダーインジェクション、そしてメールインジェクションの実例について解説します。
お問い合わせフォームは、ウェブサイトやウェブアプリに一般的に設置され、受信者に向けてメールを送るために利用されます。多くの場合、これらのフォームではメールヘッダーが使われます。これらのヘッダーはウェブサーバのメールライブラリで解析され、SMTP命令に変換され、その後SMTPサーバで処理されます。
残念ながら、クライアントからの入力はメールライブラリに渡す前に十分な検証が行われないことが多いです。その結果、お問い合わせフォームはメールヘッダーインジェクション(SMTPヘッダーインジェクションや単にメールインジェクションとも呼ばれる)に対して脆弱になる可能性があります。悪意のあるクライアントは、メッセージに追加のヘッダーを挿入し、メールサーバの動作を予期せぬものに変えるおそれがあります。
インターネット初期からある規格の一つに、SMTP規格(Simple Mail Transfer Protocol)があります。当初は、メールの送信者と受信者を示す限られた命令しか認識していませんでした。しかし、メールヘッダーが増えるにつれて、メールは非常に複雑になりました。
SMTPを理解するには、まずエンベロープとメール本文の区別を理解する必要があります。エンベロープはメッセージの基本部分であり、SMTP通信において重要な役割を果たします。エンベロープには以下の情報が含まれます:
MAIL FROM: エンベロープの送信者がこの命令で指定されます。
RCPT TO: エンベロープの受信者を指定する命令です。複数回使用することで、複数の受信者を同時に指定できます。
この命令でメール本文(ペイロード)の送信が開始されます。本文は、1行の空行によってメールヘッダーから区切られます。
SMTP通信ではメールヘッダーはそのまま送られ、メールクライアントやプログラミング言語のメール処理ライブラリで解析されます。以下はその例です:
このヘッダーは実際の送信者を表示しますが、MAIL FROMで指定された内容と異なる場合があります。(多くのメールクライアントでは、MAIL FROMで指定された送信者が通常Return-Pathヘッダーに表示されます。)
このヘッダーは実際の受信者を表示し、RCPT TOで指定された内容と異なる場合があります。(多くのメールクライアントでは、RCPT TOで指定された受信者が通常Delivered-Toヘッダーに表示されます。)
入力値の適切な分離は、メールインジェクションを防ぐ基本的な方法です。しかし、この場合、ホワイトリストによる検証は難しいという問題があります。件名はホワイトリストで制限できる可能性がありますが、本文はより多くの文字を許容する必要があるかもしれません。メールアドレスは、その表記の揺れなど様々な理由から検証が困難であることが知られています。(メールアドレスに注釈が含まれることがあるとご存知でしたか?)
できる限り最善を尽くし、入力検証のセキュリティ強化策を講じることを検討してください.
これらの脅威はWallarmを利用することで検知・防止が可能です。このプラットフォームは、最新の脅威を監視し、発生時にアラームを通知します。Wallarmのマルチクラウドプラットフォームは、レガシーなアプリや最新のクラウド環境のAPIセキュリティを守る際にも、貴社のビジネスを新たな脅威から守るための重要な機能を提供します。どのWAF/WAAPが攻撃の検知に優れているか確認でき、攻撃者がどのようにアプリを狙うかを把握することが可能です。現行のアプリセキュリティ体制で検知されている攻撃の種類を示し、WAFの実力を評価することができます。
最新情報を購読