web-dev-qa-db-ja.com

sendmailがヘッダーに余分なキャリッジリターンを追加するのはなぜですか?

CentOS5サーバーでSendMail8.14.4を実行しています。

日本のユーザーがメッセージを送信していて、サーバーによって処理されると、SendMailは何らかの理由で追加のキャリッジリターンを追加しています。

電子メールには、(おそらく)国際文字を含む値を持つXヘッダーが含まれています。 notepad ++でMIMEソースを調べると、STXCANのような奇妙なことがわかるので、「おそらく」と言います。

テスト範囲を次のように絞り込むことができました。

enter image description here

Sendmailを介して送信すると、最終的にSendMailは次のようになります。

enter image description here (ips、Q-ID、およびホスト名は、無実を保護するために変更されました)

ここで明らかに潜在的な危険信号です。ヘッダー値は引用符で始まりますが、ありません終了値があります。それはRFC標準で要求されていますか?それともその部分は赤いニシンですか?

最終的な結果として、ヘッダー値がメッセージ本文にリークします。

enter image description here

Sendmailが余分なキャリッジリターンを追加している理由について何か考えはありますか?

5
Mike B

それは実際には非常に簡単です: RFC 2822セクション2.2. 長いヘッダーを許可します。ここで、ヘッダーはフィールド名の後に : 次の行がスペースで始まる(簡略化されている)限り、折りたたんで次の行に進みます。

原則として、この標準で空白の折り畳みが許可されている場合(WSP文字だけでなく)、WSPの前にCRLFを挿入できます。たとえば、ヘッダーフィールドは次のとおりです。
Subject: This is a test
は次のように表すことができます:

Subject: This  
 is a test

元の入力の3行目は、スペースではなく文字で始まります c コロンは含まれていません : これにより、前のヘッダーの続きでも次のヘッダーフィールドでもありません(§2.2)。

それはそれをヘッダーの終わりとしてマークします...

そして体の始まり。

Sendmailは、その不正な形式のメッセージを「修正」し、ヘッダーの終わりと本文の始まりとして認識されるものの間に必要な空白行を追加します。

単純なtelnetメールセッションでその動作を再現できます。

[user@example ~]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

<<< 220 example.com ESMTP Sendmail 8.14.4/8.14.4; Fri, 17 Jul 2015 20:29:26 +0200

helo localhost

<<< 250 example.com Hello localhost [127.0.0.1], pleased to meet you

mail from:me@localhost

<<< 250 2.1.0 me@localhost... Sender ok

RCPT TO:[email protected]

<<< 250 2.1.5 [email protected]... Recipient ok

data

<<< 354 Enter mail, end with "." on a line by itself

Subject: test
X-header: do not try
this at home

start the body
.
<<< 250 2.0.0 t6HITQXA020072 Message accepted for delivery
quit

これにより、例と同様のメッセージが表示されます。

[user@example ~/Maildir/new]$ cat 1437157845.20091_2.example.com

Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on example.com
X-Spam-Level:
X-Spam-Status: No, score=-1.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
        MISSING_HEADERS autolearn=no version=3.3.1
Received: from localhost (localhost [127.0.0.1])
        by example.com (8.14.4/8.14.4) with SMTP id t6HITQXA020072
        for [email protected]; Fri, 17 Jul 2015 20:30:06 +0200
Date: Fri, 17 Jul 2015 20:29:26 +0200
From: [email protected]
Message-Id: <[email protected]>
Subject: test
X-header: do not try

this at home

start the body

元のヘッダーの継続と本文の「新しい」開始の間に新しい行が追加されます。

7
HBruijn