audk/NetworkPkg/TcpDxe
Doug Flick 1904a64bcc NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4541
REF: https://www.rfc-editor.org/rfc/rfc1948.txt
REF: https://www.rfc-editor.org/rfc/rfc6528.txt
REF: https://www.rfc-editor.org/rfc/rfc9293.txt

Bug Overview:
PixieFail Bug #8
CVE-2023-45236
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
CWE-200 Exposure of Sensitive Information to an Unauthorized Actor

Updates TCP ISN generation to use a cryptographic hash of the
connection's identifying parameters and a secret key.
This prevents an attacker from guessing the ISN used for some other
connection.

This is follows the guidance in RFC 1948, RFC 6528, and RFC 9293.

RFC: 9293 Section 3.4.1.  Initial Sequence Number Selection

   A TCP implementation MUST use the above type of "clock" for clock-
   driven selection of initial sequence numbers (MUST-8), and SHOULD
   generate its initial sequence numbers with the expression:

   ISN = M + F(localip, localport, remoteip, remoteport, secretkey)

   where M is the 4 microsecond timer, and F() is a pseudorandom
   function (PRF) of the connection's identifying parameters ("localip,
   localport, remoteip, remoteport") and a secret key ("secretkey")
   (SHLD-1).  F() MUST NOT be computable from the outside (MUST-9), or
   an attacker could still guess at sequence numbers from the ISN used
   for some other connection.  The PRF could be implemented as a
   cryptographic hash of the concatenation of the TCP connection
   parameters and some secret data.  For discussion of the selection of
   a specific hash algorithm and management of the secret key data,
   please see Section 3 of [42].

   For each connection there is a send sequence number and a receive
   sequence number.  The initial send sequence number (ISS) is chosen by
   the data sending TCP peer, and the initial receive sequence number
   (IRS) is learned during the connection-establishing procedure.

   For a connection to be established or initialized, the two TCP peers
   must synchronize on each other's initial sequence numbers.  This is
   done in an exchange of connection-establishing segments carrying a
   control bit called "SYN" (for synchronize) and the initial sequence
   numbers.  As a shorthand, segments carrying the SYN bit are also
   called "SYNs".  Hence, the solution requires a suitable mechanism for
   picking an initial sequence number and a slightly involved handshake
   to exchange the ISNs.

Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>

Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
2024-05-24 15:48:52 +00:00
..
ComponentName.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
SockImpl.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
SockImpl.h NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
SockInterface.c NetworkPkg/TcpDxe: Fix debug macro arguments 2022-09-09 01:42:39 +00:00
Socket.h NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpDispatcher.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpDriver.c NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpDriver.h NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpDxe.inf NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpDxe.uni NetworkPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:15 -07:00
TcpDxeExtra.uni NetworkPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:15 -07:00
TcpFunc.h NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpInput.c NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpIo.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpMain.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpMain.h NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpMisc.c NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00
TcpOption.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpOption.h NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpOutput.c NetworkPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TcpProto.h NetworkPkg: RFC1323 definition changed to RFC7323 2024-01-16 01:17:34 +00:00
TcpTimer.c NetworkPkg TcpDxe: SECURITY PATCH CVE-2023-45236 2024-05-24 15:48:52 +00:00