[jira] [Created] (JAMES-4132) Incoming SMTP: limit header size

"Benoit Tellier (Jira)" <[email protected]>
Newsgroups gmane.comp.jakarta.james.devel
Message-ID <[email protected]>
Benoit Tellier created JAMES-4132:
-------------------------------------

             Summary: Incoming SMTP: limit header size
                 Key: JAMES-4132
                 URL: https://issues.apache.org/jira/browse/JAMES-4132
             Project: James Server
          Issue Type: Improvement
          Components: SMTPServer
    Affects Versions: master
            Reporter: Benoit Tellier
             Fix For: 3.9.0


h3. Context

The processing of large amounts of header is known to cause prolems in the mail community

CF https://www.cve.org/CVERecord?id=CVE-2024-23184

Processing 500.000 headers can result in 32s delays in earlier versions of Dovecot.

Apache james do not limit header size prior processing. 

Apache James is significantly more efficient handling large amounts of header and we were able to process 10MB emails of only headers in a subsecond fashion.

Yet offering options for limiting received header sizes would be an appreciable feature.

h3. How ?

I would like the James project to ship tools to enforce protective measures and be able to enforce a configurable maximim size of headers of incoming emails. Say 64KB. We can also limit the count of headers. 500 seems like a common practice.

I propose to implement a EnforceHeaderLimitationsMessageHook implementing JamesMessageHook within server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver.

Example setup:

{code:java}
<smtpservers>
    <smtpserver enabled="true">
        <handlerchain>
            <handler class="org.apache.james.smtpserver.EnforceHeaderLimitationsMessageHook">
                <maxLines>500</maxLines>
                <maxSize>64KB</maxSize>
            </handler>
            <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
        </handlerchain>
    </smtpserver>
</smtpservers>
{code}

Iterate all header lines and verify the two aforementionned limits.

If not exceeded DECLINE will allow keep processing the mail.

If exceeded reject the mail:

{code:java}
552 Too many header lines
552 Header size too large
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.