On Sun, Jul 28, 2024 at 05:56:33PM +0100, Jeremy Harris via Exim-users wrote:

> >  BUT in the log, I get the following message:
> >
> >   H=gmail-smtp-in.l.google.com [142.251.16.26] TLS error on
> >   connection (recv): The TLS connection was non-properly terminated.
> 
> Google is violating standards, according to the OpenSSL library.

No, rather the Google MTA is not wasting valuable resources doing
unnecessary TLS-layer framing to avoid truncation attacks that
don't apply to SMTP, which does application-layer framing.

> Complain to them (and you'll be ignoredr, like the rest of us).

Exim really should be updated to ignore OpenSSL's truncation detection,
I don't recall whether that even already happened and the OP is running
an older version?

All it takes is including `SSL_OP_IGNORE_UNEXPECTED_EOF` in a call
to `SSL_CTX_set_options()`.

For comparison, the associated delta in Postfix below.

-- 
    Viktor.

commit 6876e420275bb44e98827c76306f7ff5481eb192
Author: Wietse Venema <wie...@porcupine.org>
Date:   Sat Jan 21 00:00:00 2023 -0500

    postfix-3.8-20230121

--- a/postfix/HISTORY
+++ b/postfix/HISTORY
@@ -26779 +26779,10 @@ Apologies for any names omitted.
        warning message tls.tls_dh.c.
+
+20230115
+       Workaround for a breaking change in OpenSSL 3: always turn
+       on SSL_OP_IGNORE_UNEXPECTED_EOF, to avoid warning messages
+       and missed opportunities for TLS session reuse. This is
+       safe because the SMTP protocol implements application-level
+       framing, and is therefore not affected by TLS truncation
+       attacks. Fix by Viktor Dukhovni. Files: tls/tls.h, tls_client.c,
+       tls/tls_server.c.
--- a/postfix/src/tls/tls.h
+++ b/postfix/src/tls/tls.h
@@ -389,2 +389,9 @@ extern void tls_param_init(void);
 
+/*
+ * Always used when defined, SMTP has no truncation attacks.
+ */
+#ifndef SSL_OP_IGNORE_UNEXPECTED_EOF
+#define SSL_OP_IGNORE_UNEXPECTED_EOF    0L
+#endif
+
 #define TLS_KNOWN_PROTOCOLS \
@@ -405,3 +412,4 @@ extern void tls_param_init(void);
 #define TLS_SSL_OP_MANAGED_BITS \
-       (SSL_OP_CIPHER_SERVER_PREFERENCE | TLS_SSL_OP_PROTOMASK(~0))
+       (SSL_OP_CIPHER_SERVER_PREFERENCE | SSL_OP_IGNORE_UNEXPECTED_EOF | \
+        TLS_SSL_OP_PROTOMASK(~0))
 
--- a/postfix/src/tls/tls_client.c
+++ b/postfix/src/tls/tls_client.c
@@ -715,2 +715,11 @@ TLS_APPL_STATE *tls_client_init(const 
TLS_CLIENT_INIT_PROPS *props)
 
+    /*
+     * Presently we use TLS only with SMTP where truncation attacks are not
+     * possible as a result of application framing.  If we ever use TLS in
+     * some other application protocol where truncation could be relevant,
+     * we'd need to disable truncation detection conditionally, or explicitly
+     * clear the option in that code path.
+     */
+    off |= SSL_OP_IGNORE_UNEXPECTED_EOF;
+
     /*
diff --git a/postfix/src/tls/tls_server.c b/postfix/src/tls/tls_server.c
index 6caf3ab54..b76cfbc70 100644
--- a/postfix/src/tls/tls_server.c
+++ b/postfix/src/tls/tls_server.c
@@ -514,2 +514,11 @@ TLS_APPL_STATE *tls_server_init(const 
TLS_SERVER_INIT_PROPS *props)
 
+    /*
+     * Presently we use TLS only with SMTP where truncation attacks are not
+     * possible as a result of application framing.  If we ever use TLS in
+     * some other application protocol where truncation could be relevant,
+     * we'd need to disable truncation detection conditionally, or explicitly
+     * clear the option in that code path.
+     */
+    off |= SSL_OP_IGNORE_UNEXPECTED_EOF;
+
     /*

-- 
## subscription configuration (requires account):
##   https://lists.exim.org/mailman3/postorius/lists/exim-users.lists.exim.org/
## unsubscribe (doesn't require an account):
##   exim-users-unsubscr...@lists.exim.org
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to