水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > .NET FrameworkでSMTPコマンドインジェクション

.NET FrameworkでSMTPコマンドインジェクション

2011年1月11日(火曜日)

.NET FrameworkでSMTPコマンドインジェクション

公開: 2011年1月22日18時40分頃

こんなお話が。

.NET FrameworkのSystem.Net.Mail.AlternateViewクラスやSystem.Net.Mail.AttachmentクラスにSMTPコマンドインジェクションの問題があるそうで。

SMTPでメールを送る際は、EHLO, MAIL FROM, RCPT TOなどのコマンドを送った後にDATAコマンドを送り、その後にメール本文を送って、QUITコマンドで終了します。コマンドの終端はCRLFですが、メール本文を送る際には改行を含められないと困りますので、本文のデータは .(ピリオド) 一文字だけの行が終端を表すルールになっています。従って、メール本文のつもりで . だけの行を送ると、SMTPサーバはそれをデータの終端とみなし、以降の入力をコマンドとして処理してしまう場合があります。

そのため、本文に . で始まる行があった場合は、もう一つ . を追加してから送信する必要があります。これは RFC5321 4.5.2 に書かれています。

Before sending a line of mail text, the SMTP client checks the first character of the line. If it is a period, one additional period is inserted at the beginning of the line.

以上、RFC5321 4.5.2. Transparency より

昔はともかく、最近ではメール送信の処理はカプセル化されていて、プログラマがこのあたりを意識する必要はほとんどありません。……が、今回問題になったクラスではこの処理をしてくれないので、プログラマが意識しないと問題が起きるというわけですね。

※普通にバグだと思いますが、修正すると既存の対応済みのコードで動作に問題が出る可能性があるので、あえて修正はせずに時期バージョンで動作を変更するのでしょうね。個人的には直してしまっても良いと思うのですが。

関連する話題: Web / セキュリティ

最近の日記

関わった本など