From nobody Sun Apr 14 19:22:50 2024
X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
	by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4VHgDp6PGzz5GvW0;
	Sun, 14 Apr 2024 19:22:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
	 client-signature RSA-PSS (4096 bits) client-digest SHA256)
	(Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4VHgDp5cXfz4hMX;
	Sun, 14 Apr 2024 19:22:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
	t=1713122570;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=3PhLyc7OL99d9+Nkkt4J7xD6noKTXceO/hhkoonAkk0=;
	b=WZqmjg1xIAotbELmK9e1aaiX9pd48QvoYlQwasx7VNwhg2GlMElENZURLSTE2TnIZXObYr
	9mGcbhHMkvmCdT1FSMwlPbKIn+MgEBjiOVCUfHCTTU3LNsVF8FFDdY4UE1LaA4E5OgdccZ
	5kqbIQ5ZdfKbrdFZ9k5N9AKxpGz/dxYeT3MEFkpsD4rgDWYujV0KVSGqmYiYpabbAZDQPv
	T8MQ44VP+sX1SwSccq3IFJout3XI9c7LVDd9qVJdYW4esiKSxMOeAXaFwAYIHkiNEvTb8r
	n4rN5QfJVGp52IPahXBtjLQYLqenfcF3OLhSZ9zOkCckIK0X1MJRR8tsNeZAmQ==
ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1713122570; a=rsa-sha256; cv=none;
	b=Z1eiiVcSYsRHJz55Fawv1X4c7ycbxxWbVhPhjIFdIZOC3G9gpla9T6S1xDnEjZ9W9/bzSg
	LIG0XnhABpQri83NGZy1uCQFdKmq5XF+G2tlIPobLg1ezrXf3qD807bBbMDeQH2hOmeYPO
	ULMTlN0DR3uuzXPKznLG4p1vIkNvh/EoPEyCSaanuD3tzbhiq7sce9EfIes6Y+xlonHNFB
	WyvEg5tWeF0+WoP+LSAjfx1dVZq7eIXh3BU32mXD4pEsS9vmcOul/7D9GjeYHpBgpkUHoq
	YKOQqsu3zO2HQ8fVREYwE0N5XwRqNTfFFHKK2jbgYxSRh72wTj3BEb1pb2IqIw==
ARC-Authentication-Results: i=1;
	mx1.freebsd.org;
	none
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1713122570;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=3PhLyc7OL99d9+Nkkt4J7xD6noKTXceO/hhkoonAkk0=;
	b=wtVF8zecipl+yX5unMhnavGC5PcJyr+6D46GrdkupQAVMXus9am/2D3jeIa5gjSepPOqlJ
	TaSbAWWNkgkvRnjXDLtd+fPO4+kyOrSoYP5tn/M9H/2Hpyu6QFETTQzg7SMsYC2V+7+cn4
	uM0pFDOsFPrCxY3j+4woKaZC6k+mUnEEHsXFXI1Ad5QNcLB9g35tymaSsQJcq5Ld/wxrIh
	X5hlFP6DOChZPQ/XwbxRk6JxNhv39w9dvsqKboQDtJquWmsq5IFpWh326rXx8AcN/syKP7
	8PXTz8ItawWU3h8ajQjhYvpcFg6oy2AKEwrf9g5NVVw/3h78v+G5VYZZOhMZ7w==
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(Client did not present a certificate)
	by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4VHgDp4w8pzSBl;
	Sun, 14 Apr 2024 19:22:50 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
	by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 43EJMokF072682;
	Sun, 14 Apr 2024 19:22:50 GMT
	(envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
	by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 43EJMoWt072679;
	Sun, 14 Apr 2024 19:22:50 GMT
	(envelope-from git)
Date: Sun, 14 Apr 2024 19:22:50 GMT
Message-Id: <202404141922.43EJMoWt072679@gitrepo.freebsd.org>
To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org,
        dev-commits-ports-main@FreeBSD.org
From: Bernard Spil <brnrd@FreeBSD.org>
Subject: git: 8ab790d4be21 - main - security/openssl31: Security
  update for CVE-2024-2511
List-Id: Commits to the main branch of the FreeBSD ports repository <dev-commits-ports-main.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main
List-Help: <mailto:dev-commits-ports-main+help@freebsd.org>
List-Post: <mailto:dev-commits-ports-main@freebsd.org>
List-Subscribe: <mailto:dev-commits-ports-main+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-ports-main+unsubscribe@freebsd.org>
X-BeenThere: dev-commits-ports-main@freebsd.org
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: brnrd
X-Git-Repository: ports
X-Git-Refname: refs/heads/main
X-Git-Reftype: branch
X-Git-Commit: 8ab790d4be21a270c42ff57b4764f6f346be61ad
Auto-Submitted: auto-generated

The branch main has been updated by brnrd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8ab790d4be21a270c42ff57b4764f6f346be61ad

commit 8ab790d4be21a270c42ff57b4764f6f346be61ad
Author:     Bernard Spil <brnrd@FreeBSD.org>
AuthorDate: 2024-04-14 19:21:03 +0000
Commit:     Bernard Spil <brnrd@FreeBSD.org>
CommitDate: 2024-04-14 19:21:03 +0000

    security/openssl31: Security update for CVE-2024-2511
    
    Security:       7c217849-f7d7-11ee-a490-84a93843eb75
    MFH:            2024Q2
---
 security/openssl31/Makefile                  |   2 +-
 security/openssl31/files/patch-CVE-2024-2511 | 116 +++++++++++++++++++++++++++
 2 files changed, 117 insertions(+), 1 deletion(-)

diff --git a/security/openssl31/Makefile b/security/openssl31/Makefile
index 30cfce427510..7e91b88065a6 100644
--- a/security/openssl31/Makefile
+++ b/security/openssl31/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	openssl
 PORTVERSION=	3.1.5
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	security devel
 MASTER_SITES=	https://www.openssl.org/source/ \
 		ftp://ftp.cert.dfn.de/pub/tools/net/openssl/source/
diff --git a/security/openssl31/files/patch-CVE-2024-2511 b/security/openssl31/files/patch-CVE-2024-2511
new file mode 100644
index 000000000000..ac88f50f791c
--- /dev/null
+++ b/security/openssl31/files/patch-CVE-2024-2511
@@ -0,0 +1,116 @@
+From 7e4d731b1c07201ad9374c1cd9ac5263bdf35bce Mon Sep 17 00:00:00 2001
+From: Matt Caswell <matt@openssl.org>
+Date: Tue, 5 Mar 2024 15:43:53 +0000
+Subject: [PATCH] Fix unconstrained session cache growth in TLSv1.3
+
+In TLSv1.3 we create a new session object for each ticket that we send.
+We do this by duplicating the original session. If SSL_OP_NO_TICKET is in
+use then the new session will be added to the session cache. However, if
+early data is not in use (and therefore anti-replay protection is being
+used), then multiple threads could be resuming from the same session
+simultaneously. If this happens and a problem occurs on one of the threads,
+then the original session object could be marked as not_resumable. When we
+duplicate the session object this not_resumable status gets copied into the
+new session object. The new session object is then added to the session
+cache even though it is not_resumable.
+
+Subsequently, another bug means that the session_id_length is set to 0 for
+sessions that are marked as not_resumable - even though that session is
+still in the cache. Once this happens the session can never be removed from
+the cache. When that object gets to be the session cache tail object the
+cache never shrinks again and grows indefinitely.
+
+CVE-2024-2511
+
+Reviewed-by: Neil Horman <nhorman@openssl.org>
+Reviewed-by: Tomas Mraz <tomas@openssl.org>
+(Merged from https://github.com/openssl/openssl/pull/24044)
+---
+ ssl/ssl_lib.c            |  5 +++--
+ ssl/ssl_sess.c           | 28 ++++++++++++++++++++++------
+ ssl/statem/statem_srvr.c |  5 ++---
+ 3 files changed, 27 insertions(+), 11 deletions(-)
+
+diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
+index b5cc4af2f0302..e747b7f90aa71 100644
+--- ssl/ssl_lib.c.orig
++++ ssl/ssl_lib.c
+@@ -3737,9 +3737,10 @@ void ssl_update_cache(SSL *s, int mode)
+ 
+     /*
+      * If the session_id_length is 0, we are not supposed to cache it, and it
+-     * would be rather hard to do anyway :-)
++     * would be rather hard to do anyway :-). Also if the session has already
++     * been marked as not_resumable we should not cache it for later reuse.
+      */
+-    if (s->session->session_id_length == 0)
++    if (s->session->session_id_length == 0 || s->session->not_resumable)
+         return;
+ 
+     /*
+diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c
+index bf84e792251b8..241cf43c46296 100644
+--- ssl/ssl_sess.c.orig
++++ ssl/ssl_sess.c
+@@ -154,16 +154,11 @@ SSL_SESSION *SSL_SESSION_new(void)
+     return ss;
+ }
+ 
+-SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src)
+-{
+-    return ssl_session_dup(src, 1);
+-}
+-
+ /*
+  * Create a new SSL_SESSION and duplicate the contents of |src| into it. If
+  * ticket == 0 then no ticket information is duplicated, otherwise it is.
+  */
+-SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
++static SSL_SESSION *ssl_session_dup_intern(const SSL_SESSION *src, int ticket)
+ {
+     SSL_SESSION *dest;
+ 
+@@ -287,6 +282,27 @@ SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
+     return NULL;
+ }
+ 
++SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src)
++{
++    return ssl_session_dup_intern(src, 1);
++}
++
++/*
++ * Used internally when duplicating a session which might be already shared.
++ * We will have resumed the original session. Subsequently we might have marked
++ * it as non-resumable (e.g. in another thread) - but this copy should be ok to
++ * resume from.
++ */
++SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
++{
++    SSL_SESSION *sess = ssl_session_dup_intern(src, ticket);
++
++    if (sess != NULL)
++        sess->not_resumable = 0;
++
++    return sess;
++}
++
+ const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len)
+ {
+     if (len)
+diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
+index 5d59d53563ed8..8e493176f658e 100644
+--- ssl/statem/statem_srvr.c.orig
++++ ssl/statem/statem_srvr.c
+@@ -2338,9 +2338,8 @@ int tls_construct_server_hello(SSL *s, WPACKET *pkt)
+      * so the following won't overwrite an ID that we're supposed
+      * to send back.
+      */
+-    if (s->session->not_resumable ||
+-        (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
+-         && !s->hit))
++    if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
++            && !s->hit)
+         s->session->session_id_length = 0;
+ 
+     if (usetls13) {