水無月ばけらのえび日記

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 / セキュリティ

最近の日記

関わった本など

インクルーシブHTML+CSS & JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターンデザイニングWebアクセシビリティ - アクセシブルな設計やコンテンツ制作のアプローチコーディングWebアクセシビリティ - WAI-ARIAで実現するマルチデバイス環境のWebアプリケーション体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践ウェブの仕事力が上がる標準ガイドブック 5 WebプログラミングWeb Site Expert #13Dreamweaver プロフェッショナル・スタイル [CS3対応] (Style for professional)

その他サイト