* [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg
@ 2024-02-10 3:04 Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-10 3:04 UTC (permalink / raw)
To: devel
Cc: Douglas Flick [MSFT], Saloni Kasbekar, Zachary Clark-williams,
Andrew Fish, Leif Lindholm, Michael D Kinney
After talking with Micheal Kinney, I was advised to resend
these with edk2-stable202402, and CC Stewards.
These patches are time sensitive and need reviews.
This patch series corrects an additional security concern
found in Dhc6Dxe related to CVE-2023-45229.
Additionally this fixes some issues on the mailing list
that were not pulled in before merging into Edk2.
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Doug Flick (3):
[edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH
CVE-2023-45229 Related Patch
[edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
[edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 +++++++++++++++++------------
NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 +--
NetworkPkg/SecurityFixes.yaml | 1 +
3 files changed, 141 insertions(+), 112 deletions(-)
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115338): https://edk2.groups.io/g/devel/message/115338
Mute This Topic: https://groups.io/mt/104272125/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
@ 2024-02-10 3:04 ` Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 18:56 ` Leif Lindholm
2024-02-10 3:04 ` [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup Doug Flick via groups.io
` (3 subsequent siblings)
4 siblings, 2 replies; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-10 3:04 UTC (permalink / raw)
To: devel
Cc: Doug Flick, Saloni Kasbekar, Zachary Clark-williams, Andrew Fish,
Leif Lindholm, Michael D Kinney, Doug Flick [MSFT]
From: Doug Flick <dougflick@microsoft.com>
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4673
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4534
This was not part of the Quarkslab bugs however the same pattern
as CVE-2023-45229 exists in Dhcp6UpdateIaInfo.
This patch replaces the code in question with the safe function
created to patch CVE-2023-45229
>
> if (EFI_ERROR (
> Dhcp6SeekInnerOptionSafe (
> Instance->Config->IaDescriptor.Type,
> Option,
> OptionLen,
> &IaInnerOpt,
> &IaInnerLen
> )
> ))
> {
> return EFI_DEVICE_ERROR;
> }
>
Additionally corrects incorrect usage of macro to read the status
> - StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN
(Option)));
> + StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)
DHCP6_OFFSET_OF_STATUS_CODE (Option));
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 ++++++++++++++++++++--------------
1 file changed, 134 insertions(+), 98 deletions(-)
diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
index 3b8feb4a2032..6000e885afaf 100644
--- a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
+++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
@@ -510,6 +510,97 @@ Dhcp6CallbackUser (
return Status;
}
+/**
+ Seeks the Inner Options from a DHCP6 Option
+
+ @param[in] IaType The type of the IA option.
+ @param[in] Option The pointer to the DHCP6 Option.
+ @param[in] OptionLen The length of the DHCP6 Option.
+ @param[out] IaInnerOpt The pointer to the IA inner option.
+ @param[out] IaInnerLen The length of the IA inner option.
+
+ @retval EFI_SUCCESS Seek the inner option successfully.
+ @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,
+ the pointers are not modified
+**/
+EFI_STATUS
+Dhcp6SeekInnerOptionSafe (
+ IN UINT16 IaType,
+ IN UINT8 *Option,
+ IN UINT32 OptionLen,
+ OUT UINT8 **IaInnerOpt,
+ OUT UINT16 *IaInnerLen
+ )
+{
+ UINT16 IaInnerLenTmp;
+ UINT8 *IaInnerOptTmp;
+
+ if (Option == NULL) {
+ ASSERT (Option != NULL);
+ return EFI_DEVICE_ERROR;
+ }
+
+ if (IaInnerOpt == NULL) {
+ ASSERT (IaInnerOpt != NULL);
+ return EFI_DEVICE_ERROR;
+ }
+
+ if (IaInnerLen == NULL) {
+ ASSERT (IaInnerLen != NULL);
+ return EFI_DEVICE_ERROR;
+ }
+
+ if (IaType == Dhcp6OptIana) {
+ //
+ // Verify we have a fully formed IA_NA
+ //
+ if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ //
+ // Get the IA Inner Option and Length
+ //
+ IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
+
+ //
+ // Verify the IaInnerLen is valid.
+ //
+ IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));
+ if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;
+ } else if (IaType == Dhcp6OptIata) {
+ //
+ // Verify the OptionLen is valid.
+ //
+ if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
+
+ //
+ // Verify the IaInnerLen is valid.
+ //
+ IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
+ if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;
+ } else {
+ return EFI_DEVICE_ERROR;
+ }
+
+ *IaInnerOpt = IaInnerOptTmp;
+ *IaInnerLen = IaInnerLenTmp;
+
+ return EFI_SUCCESS;
+}
+
/**
Update Ia according to the new reply message.
@@ -528,13 +619,23 @@ Dhcp6UpdateIaInfo (
{
EFI_STATUS Status;
UINT8 *Option;
+ UINT32 OptionLen;
UINT8 *IaInnerOpt;
UINT16 IaInnerLen;
UINT16 StsCode;
UINT32 T1;
UINT32 T2;
+ T1 = 0;
+ T2 = 0;
+
ASSERT (Instance->Config != NULL);
+
+ // OptionLen is the length of the Options excluding the DHCP header.
+ // Length of the EFI_DHCP6_PACKET from the first byte of the Header field to the last
+ // byte of the Option[] field.
+ OptionLen = Packet->Length - sizeof (Packet->Dhcp6.Header);
+
//
// If the reply was received in response to a solicit with rapid commit option,
// request, renew or rebind message, the client updates the information it has
@@ -549,13 +650,29 @@ Dhcp6UpdateIaInfo (
//
Option = Dhcp6SeekIaOption (
Packet->Dhcp6.Option,
- Packet->Length - sizeof (EFI_DHCP6_HEADER),
+ OptionLen,
&Instance->Config->IaDescriptor
);
if (Option == NULL) {
return EFI_DEVICE_ERROR;
}
+ //
+ // Calculate the distance from Packet->Dhcp6.Option to the IA option.
+ //
+ // Packet->Size and Packet->Length are both UINT32 type, and Packet->Size is
+ // the size of the whole packet, including the DHCP header, and Packet->Length
+ // is the length of the DHCP message body, excluding the DHCP header.
+ //
+ // (*Option - Packet->Dhcp6.Option) is the number of bytes from the start of
+ // DHCP6 option area to the start of the IA option.
+ //
+ // Dhcp6SeekInnerOptionSafe() is searching starting from the start of the
+ // IA option to the end of the DHCP6 option area, thus subtract the space
+ // up until this option
+ //
+ OptionLen = OptionLen - (UINT32)(Option - Packet->Dhcp6.Option);
+
//
// The format of the IA_NA option is:
//
@@ -591,32 +708,32 @@ Dhcp6UpdateIaInfo (
//
//
- // sizeof (option-code + option-len + IaId) = 8
- // sizeof (option-code + option-len + IaId + T1) = 12
- // sizeof (option-code + option-len + IaId + T1 + T2) = 16
- //
- // The inner options still start with 2 bytes option-code and 2 bytes option-len.
+ // Seek the inner option
//
+ if (EFI_ERROR (
+ Dhcp6SeekInnerOptionSafe (
+ Instance->Config->IaDescriptor.Type,
+ Option,
+ OptionLen,
+ &IaInnerOpt,
+ &IaInnerLen
+ )
+ ))
+ {
+ return EFI_DEVICE_ERROR;
+ }
+
if (Instance->Config->IaDescriptor.Type == Dhcp6OptIana) {
T1 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T1 (Option))));
T2 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T2 (Option))));
//
// Refer to RFC3155 Chapter 22.4. If a client receives an IA_NA with T1 greater than T2,
// and both T1 and T2 are greater than 0, the client discards the IA_NA option and processes
- // the remainder of the message as though the server had not included the invalid IA_NA option.
+ // the remainder of the message as though the server had not included the invalid IA_NA option.
//
if ((T1 > T2) && (T2 > 0)) {
return EFI_DEVICE_ERROR;
}
-
- IaInnerOpt = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
- IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_COMBINED_IAID_T1_T2);
- } else {
- T1 = 0;
- T2 = 0;
-
- IaInnerOpt = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
- IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_IAID);
}
//
@@ -642,7 +759,7 @@ Dhcp6UpdateIaInfo (
Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode);
if (Option != NULL) {
- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_STATUS_CODE (Option))));
if (StsCode != Dhcp6StsSuccess) {
return EFI_DEVICE_ERROR;
}
@@ -662,87 +779,6 @@ Dhcp6UpdateIaInfo (
return Status;
}
-/**
- Seeks the Inner Options from a DHCP6 Option
-
- @param[in] IaType The type of the IA option.
- @param[in] Option The pointer to the DHCP6 Option.
- @param[in] OptionLen The length of the DHCP6 Option.
- @param[out] IaInnerOpt The pointer to the IA inner option.
- @param[out] IaInnerLen The length of the IA inner option.
-
- @retval EFI_SUCCESS Seek the inner option successfully.
- @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,
- the pointers are not modified
-**/
-EFI_STATUS
-Dhcp6SeekInnerOptionSafe (
- IN UINT16 IaType,
- IN UINT8 *Option,
- IN UINT32 OptionLen,
- OUT UINT8 **IaInnerOpt,
- OUT UINT16 *IaInnerLen
- )
-{
- UINT16 IaInnerLenTmp;
- UINT8 *IaInnerOptTmp;
-
- if (Option == NULL) {
- ASSERT (Option != NULL);
- return EFI_DEVICE_ERROR;
- }
-
- if (IaInnerOpt == NULL) {
- ASSERT (IaInnerOpt != NULL);
- return EFI_DEVICE_ERROR;
- }
-
- if (IaInnerLen == NULL) {
- ASSERT (IaInnerLen != NULL);
- return EFI_DEVICE_ERROR;
- }
-
- if (IaType == Dhcp6OptIana) {
- // Verify we have a fully formed IA_NA
- if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {
- return EFI_DEVICE_ERROR;
- }
-
- //
- IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
-
- // Verify the IaInnerLen is valid.
- IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));
- if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {
- return EFI_DEVICE_ERROR;
- }
-
- IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;
- } else if (IaType == Dhcp6OptIata) {
- // Verify the OptionLen is valid.
- if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {
- return EFI_DEVICE_ERROR;
- }
-
- IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
-
- // Verify the IaInnerLen is valid.
- IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
- if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {
- return EFI_DEVICE_ERROR;
- }
-
- IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;
- } else {
- return EFI_DEVICE_ERROR;
- }
-
- *IaInnerOpt = IaInnerOptTmp;
- *IaInnerLen = IaInnerLenTmp;
-
- return EFI_SUCCESS;
-}
-
/**
Seek StatusCode Option in package. A Status Code option may appear in the
options field of a DHCP message and/or in the options field of another option.
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115339): https://edk2.groups.io/g/devel/message/115339
Mute This Topic: https://groups.io/mt/104272126/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
@ 2024-02-10 3:04 ` Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 19:16 ` Leif Lindholm
2024-02-10 3:04 ` [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml Doug Flick via groups.io
` (2 subsequent siblings)
4 siblings, 2 replies; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-10 3:04 UTC (permalink / raw)
To: devel
Cc: Doug Flick, Saloni Kasbekar, Zachary Clark-williams, Andrew Fish,
Leif Lindholm, Michael D Kinney, Doug Flick [MSFT]
From: Doug Flick <dougflick@microsoft.com>
Removes duplicate check after merge
>
> //
> // Verify the PacketCursor is within the packet
> //
> if ( (*PacketCursor < Packet->Dhcp6.Option)
> || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size -
sizeof (EFI_DHCP6_HEADER))))
> {
> return EFI_INVALID_PARAMETER;
> }
>
Additionally Calculates the Packet->Length before appending
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
index 705c665c519d..348602c4e1a8 100644
--- a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
+++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
@@ -657,15 +657,6 @@ Dhcp6AppendOption (
return EFI_BUFFER_TOO_SMALL;
}
- //
- // Verify the PacketCursor is within the packet
- //
- if ( (*PacketCursor < Packet->Dhcp6.Option)
- || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size - sizeof (EFI_DHCP6_HEADER))))
- {
- return EFI_INVALID_PARAMETER;
- }
-
WriteUnaligned16 ((UINT16 *)*PacketCursor, OptType);
*PacketCursor += DHCP6_SIZE_OF_OPT_CODE;
WriteUnaligned16 ((UINT16 *)*PacketCursor, OptLen);
@@ -929,6 +920,11 @@ Dhcp6AppendIaOption (
*PacketCursor += sizeof (T2);
}
+ //
+ // Update the packet length
+ //
+ Packet->Length += BytesNeeded;
+
//
// Fill all the addresses belong to the Ia
//
@@ -945,11 +941,6 @@ Dhcp6AppendIaOption (
//
*Len = HTONS ((UINT16)(*PacketCursor - (UINT8 *)Len - 2));
- //
- // Update the packet length
- //
- Packet->Length += BytesNeeded;
-
return EFI_SUCCESS;
}
@@ -957,6 +948,7 @@ Dhcp6AppendIaOption (
Append the appointed Elapsed time option to Buf, and move Buf to the end.
@param[in, out] Packet A pointer to the packet, on success Packet->Length
+ will be updated.
@param[in, out] PacketCursor The pointer in the packet, on success PacketCursor
will be moved to the end of the option.
@param[in] Instance The pointer to the Dhcp6 instance.
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115340): https://edk2.groups.io/g/devel/message/115340
Mute This Topic: https://groups.io/mt/104272127/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup Doug Flick via groups.io
@ 2024-02-10 3:04 ` Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 17:14 ` [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
2024-02-12 17:17 ` Saloni Kasbekar
4 siblings, 1 reply; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-10 3:04 UTC (permalink / raw)
To: devel
Cc: Doug Flick, Saloni Kasbekar, Zachary Clark-williams, Andrew Fish,
Leif Lindholm, Michael D Kinney, Doug Flick [MSFT]
From: Doug Flick <dougflick@microsoft.com>
This captures the related security change for Dhcp6Dxe that is related
to CVE-2023-45229
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/SecurityFixes.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/NetworkPkg/SecurityFixes.yaml b/NetworkPkg/SecurityFixes.yaml
index 7e900483fec5..fa42025e0d82 100644
--- a/NetworkPkg/SecurityFixes.yaml
+++ b/NetworkPkg/SecurityFixes.yaml
@@ -8,6 +8,7 @@ CVE_2023_45229:
commit_titles:
- "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Patch"
- "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Unit Tests"
+ - "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch"
cve: CVE-2023-45229
date_reported: 2023-08-28 13:56 UTC
description: "Bug 01 - edk2/NetworkPkg: Out-of-bounds read when processing IA_NA/IA_TA options in a DHCPv6 Advertise message"
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115341): https://edk2.groups.io/g/devel/message/115341
Mute This Topic: https://groups.io/mt/104272128/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
@ 2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 18:56 ` Leif Lindholm
1 sibling, 0 replies; 12+ messages in thread
From: Saloni Kasbekar @ 2024-02-12 17:14 UTC (permalink / raw)
To: Douglas Flick [MSFT], devel@edk2.groups.io
Cc: Doug Flick, Clark-williams, Zachary, Andrew Fish, Leif Lindholm,
Kinney, Michael D
Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
-----Original Message-----
From: Douglas Flick [MSFT] <doug.edk2@gmail.com>
Sent: Friday, February 9, 2024 7:05 PM
To: devel@edk2.groups.io
Cc: Doug Flick <dougflick@microsoft.com>; Kasbekar, Saloni <saloni.kasbekar@intel.com>; Clark-williams, Zachary <zachary.clark-williams@intel.com>; Andrew Fish <afish@apple.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Doug Flick [MSFT] <doug.edk2@gmail.com>
Subject: [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch
From: Doug Flick <dougflick@microsoft.com>
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4673
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4534
This was not part of the Quarkslab bugs however the same pattern as CVE-2023-45229 exists in Dhcp6UpdateIaInfo.
This patch replaces the code in question with the safe function created to patch CVE-2023-45229
>
> if (EFI_ERROR (
> Dhcp6SeekInnerOptionSafe (
> Instance->Config->IaDescriptor.Type,
> Option,
> OptionLen,
> &IaInnerOpt,
> &IaInnerLen
> )
> ))
> {
> return EFI_DEVICE_ERROR;
> }
>
Additionally corrects incorrect usage of macro to read the status
> - StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN
(Option)));
> + StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)
DHCP6_OFFSET_OF_STATUS_CODE (Option));
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 ++++++++++++++++++++--------------
1 file changed, 134 insertions(+), 98 deletions(-)
diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c index 3b8feb4a2032..6000e885afaf 100644
--- a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
+++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
@@ -510,6 +510,97 @@ Dhcp6CallbackUser (
return Status; } +/**+ Seeks the Inner Options from a DHCP6 Option++ @param[in] IaType The type of the IA option.+ @param[in] Option The pointer to the DHCP6 Option.+ @param[in] OptionLen The length of the DHCP6 Option.+ @param[out] IaInnerOpt The pointer to the IA inner option.+ @param[out] IaInnerLen The length of the IA inner option.++ @retval EFI_SUCCESS Seek the inner option successfully.+ @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,+ the pointers are not modified+**/+EFI_STATUS+Dhcp6SeekInnerOptionSafe (+ IN UINT16 IaType,+ IN UINT8 *Option,+ IN UINT32 OptionLen,+ OUT UINT8 **IaInnerOpt,+ OUT UINT16 *IaInnerLen+ )+{+ UINT16 IaInnerLenTmp;+ UINT8 *IaInnerOptTmp;++ if (Option == NULL) {+ ASSERT (Option != NULL);+ return EFI_DEVICE_ERROR;+ }++ if (IaInnerOpt == NULL) {+ ASSERT (IaInnerOpt != NULL);+ return EFI_DEVICE_ERROR;+ }++ if (IaInnerLen == NULL) {+ ASSERT (IaInnerLen != NULL);+ return EFI_DEVICE_ERROR;+ }++ if (IaType == Dhcp6OptIana) {+ //+ // Verify we have a fully formed IA_NA+ //+ if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {+ return EFI_DEVICE_ERROR;+ }++ //+ // Get the IA Inner Option and Length+ //+ IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);++ //+ // Verify the IaInnerLen is valid.+ //+ IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));+ if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {+ return EFI_DEVICE_ERROR;+ }++ IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;+ } else if (IaType == Dhcp6OptIata) {+ //+ // Verify the OptionLen is valid.+ //+ if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {+ return EFI_DEVICE_ERROR;+ }++ IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);++ //+ // Verify the IaInnerLen is valid.+ //+ IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));+ if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {+ return EFI_DEVICE_ERROR;+ }++ IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;+ } else {+ return EFI_DEVICE_ERROR;+ }++ *IaInnerOpt = IaInnerOptTmp;+ *IaInnerLen = IaInnerLenTmp;++ return EFI_SUCCESS;+}+ /** Update Ia according to the new reply message. @@ -528,13 +619,23 @@ Dhcp6UpdateIaInfo (
{ EFI_STATUS Status; UINT8 *Option;+ UINT32 OptionLen; UINT8 *IaInnerOpt; UINT16 IaInnerLen; UINT16 StsCode; UINT32 T1; UINT32 T2; + T1 = 0;+ T2 = 0;+ ASSERT (Instance->Config != NULL);++ // OptionLen is the length of the Options excluding the DHCP header.+ // Length of the EFI_DHCP6_PACKET from the first byte of the Header field to the last+ // byte of the Option[] field.+ OptionLen = Packet->Length - sizeof (Packet->Dhcp6.Header);+ // // If the reply was received in response to a solicit with rapid commit option, // request, renew or rebind message, the client updates the information it has@@ -549,13 +650,29 @@ Dhcp6UpdateIaInfo (
// Option = Dhcp6SeekIaOption ( Packet->Dhcp6.Option,- Packet->Length - sizeof (EFI_DHCP6_HEADER),+ OptionLen, &Instance->Config->IaDescriptor ); if (Option == NULL) { return EFI_DEVICE_ERROR; } + //+ // Calculate the distance from Packet->Dhcp6.Option to the IA option.+ //+ // Packet->Size and Packet->Length are both UINT32 type, and Packet->Size is+ // the size of the whole packet, including the DHCP header, and Packet->Length+ // is the length of the DHCP message body, excluding the DHCP header.+ //+ // (*Option - Packet->Dhcp6.Option) is the number of bytes from the start of+ // DHCP6 option area to the start of the IA option.+ //+ // Dhcp6SeekInnerOptionSafe() is searching starting from the start of the+ // IA option to the end of the DHCP6 option area, thus subtract the space+ // up until this option+ //+ OptionLen = OptionLen - (UINT32)(Option - Packet->Dhcp6.Option);+ // // The format of the IA_NA option is: //@@ -591,32 +708,32 @@ Dhcp6UpdateIaInfo (
// //- // sizeof (option-code + option-len + IaId) = 8- // sizeof (option-code + option-len + IaId + T1) = 12- // sizeof (option-code + option-len + IaId + T1 + T2) = 16- //- // The inner options still start with 2 bytes option-code and 2 bytes option-len.+ // Seek the inner option //+ if (EFI_ERROR (+ Dhcp6SeekInnerOptionSafe (+ Instance->Config->IaDescriptor.Type,+ Option,+ OptionLen,+ &IaInnerOpt,+ &IaInnerLen+ )+ ))+ {+ return EFI_DEVICE_ERROR;+ }+ if (Instance->Config->IaDescriptor.Type == Dhcp6OptIana) { T1 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T1 (Option)))); T2 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T2 (Option)))); // // Refer to RFC3155 Chapter 22.4. If a client receives an IA_NA with T1 greater than T2, // and both T1 and T2 are greater than 0, the client discards the IA_NA option and processes- // the remainder of the message as though the server had not included the invalid IA_NA option.+ // the remainder of the message as though the server had not included the invalid IA_NA option. // if ((T1 > T2) && (T2 > 0)) { return EFI_DEVICE_ERROR; }-- IaInnerOpt = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);- IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_COMBINED_IAID_T1_T2);- } else {- T1 = 0;- T2 = 0;-- IaInnerOpt = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);- IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_IAID); } //@@ -642,7 +759,7 @@ Dhcp6UpdateIaInfo (
Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode); if (Option != NULL) {- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_STATUS_CODE (Option)))); if (StsCode != Dhcp6StsSuccess) { return EFI_DEVICE_ERROR; }@@ -662,87 +779,6 @@ Dhcp6UpdateIaInfo (
return Status; } -/**- Seeks the Inner Options from a DHCP6 Option-- @param[in] IaType The type of the IA option.- @param[in] Option The pointer to the DHCP6 Option.- @param[in] OptionLen The length of the DHCP6 Option.- @param[out] IaInnerOpt The pointer to the IA inner option.- @param[out] IaInnerLen The length of the IA inner option.-- @retval EFI_SUCCESS Seek the inner option successfully.- @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,- the pointers are not modified-**/-EFI_STATUS-Dhcp6SeekInnerOptionSafe (- IN UINT16 IaType,- IN UINT8 *Option,- IN UINT32 OptionLen,- OUT UINT8 **IaInnerOpt,- OUT UINT16 *IaInnerLen- )-{- UINT16 IaInnerLenTmp;- UINT8 *IaInnerOptTmp;-- if (Option == NULL) {- ASSERT (Option != NULL);- return EFI_DEVICE_ERROR;- }-- if (IaInnerOpt == NULL) {- ASSERT (IaInnerOpt != NULL);- return EFI_DEVICE_ERROR;- }-- if (IaInnerLen == NULL) {- ASSERT (IaInnerLen != NULL);- return EFI_DEVICE_ERROR;- }-- if (IaType == Dhcp6OptIana) {- // Verify we have a fully formed IA_NA- if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {- return EFI_DEVICE_ERROR;- }-- //- IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);-- // Verify the IaInnerLen is valid.- IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));- if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {- return EFI_DEVICE_ERROR;- }-- IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;- } else if (IaType == Dhcp6OptIata) {- // Verify the OptionLen is valid.- if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {- return EFI_DEVICE_ERROR;- }-- IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);-- // Verify the IaInnerLen is valid.- IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));- if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {- return EFI_DEVICE_ERROR;- }-- IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;- } else {- return EFI_DEVICE_ERROR;- }-- *IaInnerOpt = IaInnerOptTmp;- *IaInnerLen = IaInnerLenTmp;-- return EFI_SUCCESS;-}- /** Seek StatusCode Option in package. A Status Code option may appear in the options field of a DHCP message and/or in the options field of another option.--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115362): https://edk2.groups.io/g/devel/message/115362
Mute This Topic: https://groups.io/mt/104272126/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
2024-02-10 3:04 ` [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup Doug Flick via groups.io
@ 2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 19:16 ` Leif Lindholm
1 sibling, 0 replies; 12+ messages in thread
From: Saloni Kasbekar @ 2024-02-12 17:14 UTC (permalink / raw)
To: Douglas Flick [MSFT], devel@edk2.groups.io
Cc: Doug Flick, Clark-williams, Zachary, Andrew Fish, Leif Lindholm,
Kinney, Michael D
Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
-----Original Message-----
From: Douglas Flick [MSFT] <doug.edk2@gmail.com>
Sent: Friday, February 9, 2024 7:05 PM
To: devel@edk2.groups.io
Cc: Doug Flick <dougflick@microsoft.com>; Kasbekar, Saloni <saloni.kasbekar@intel.com>; Clark-williams, Zachary <zachary.clark-williams@intel.com>; Andrew Fish <afish@apple.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Doug Flick [MSFT] <doug.edk2@gmail.com>
Subject: [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
From: Doug Flick <dougflick@microsoft.com>
Removes duplicate check after merge
>
> //
> // Verify the PacketCursor is within the packet // if (
> (*PacketCursor < Packet->Dhcp6.Option)
> || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size -
sizeof (EFI_DHCP6_HEADER))))
> {
> return EFI_INVALID_PARAMETER;
> }
>
Additionally Calculates the Packet->Length before appending
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
index 705c665c519d..348602c4e1a8 100644
--- a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
+++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
@@ -657,15 +657,6 @@ Dhcp6AppendOption (
return EFI_BUFFER_TOO_SMALL; } - //- // Verify the PacketCursor is within the packet- //- if ( (*PacketCursor < Packet->Dhcp6.Option)- || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size - sizeof (EFI_DHCP6_HEADER))))- {- return EFI_INVALID_PARAMETER;- }- WriteUnaligned16 ((UINT16 *)*PacketCursor, OptType); *PacketCursor += DHCP6_SIZE_OF_OPT_CODE; WriteUnaligned16 ((UINT16 *)*PacketCursor, OptLen);@@ -929,6 +920,11 @@ Dhcp6AppendIaOption (
*PacketCursor += sizeof (T2); } + //+ // Update the packet length+ //+ Packet->Length += BytesNeeded;+ // // Fill all the addresses belong to the Ia //@@ -945,11 +941,6 @@ Dhcp6AppendIaOption (
// *Len = HTONS ((UINT16)(*PacketCursor - (UINT8 *)Len - 2)); - //- // Update the packet length- //- Packet->Length += BytesNeeded;- return EFI_SUCCESS; } @@ -957,6 +948,7 @@ Dhcp6AppendIaOption (
Append the appointed Elapsed time option to Buf, and move Buf to the end. @param[in, out] Packet A pointer to the packet, on success Packet->Length+ will be updated. @param[in, out] PacketCursor The pointer in the packet, on success PacketCursor will be moved to the end of the option. @param[in] Instance The pointer to the Dhcp6 instance.--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115363): https://edk2.groups.io/g/devel/message/115363
Mute This Topic: https://groups.io/mt/104272127/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
2024-02-10 3:04 ` [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml Doug Flick via groups.io
@ 2024-02-12 17:14 ` Saloni Kasbekar
0 siblings, 0 replies; 12+ messages in thread
From: Saloni Kasbekar @ 2024-02-12 17:14 UTC (permalink / raw)
To: Douglas Flick [MSFT], devel@edk2.groups.io
Cc: Doug Flick, Clark-williams, Zachary, Andrew Fish, Leif Lindholm,
Kinney, Michael D
Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
-----Original Message-----
From: Douglas Flick [MSFT] <doug.edk2@gmail.com>
Sent: Friday, February 9, 2024 7:05 PM
To: devel@edk2.groups.io
Cc: Doug Flick <dougflick@microsoft.com>; Kasbekar, Saloni <saloni.kasbekar@intel.com>; Clark-williams, Zachary <zachary.clark-williams@intel.com>; Andrew Fish <afish@apple.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Doug Flick [MSFT] <doug.edk2@gmail.com>
Subject: [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
From: Doug Flick <dougflick@microsoft.com>
This captures the related security change for Dhcp6Dxe that is related to CVE-2023-45229
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
---
NetworkPkg/SecurityFixes.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/NetworkPkg/SecurityFixes.yaml b/NetworkPkg/SecurityFixes.yaml index 7e900483fec5..fa42025e0d82 100644
--- a/NetworkPkg/SecurityFixes.yaml
+++ b/NetworkPkg/SecurityFixes.yaml
@@ -8,6 +8,7 @@ CVE_2023_45229:
commit_titles: - "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Patch" - "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Unit Tests"+ - "NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch" cve: CVE-2023-45229 date_reported: 2023-08-28 13:56 UTC description: "Bug 01 - edk2/NetworkPkg: Out-of-bounds read when processing IA_NA/IA_TA options in a DHCPv6 Advertise message"--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115365): https://edk2.groups.io/g/devel/message/115365
Mute This Topic: https://groups.io/mt/104272128/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
` (2 preceding siblings ...)
2024-02-10 3:04 ` [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml Doug Flick via groups.io
@ 2024-02-12 17:14 ` Doug Flick via groups.io
2024-02-12 17:17 ` Saloni Kasbekar
4 siblings, 0 replies; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-12 17:14 UTC (permalink / raw)
To: devel
Additional details requested for why this change should go in this
release after the code freeze.
1. The additional security concern refers to 4673 – edk2/NetworkPkg:
Out-of-bounds read when processing IA_NA/IA_TA options in a DHCPv6
Advertise message (tianocore.org). Which was seen as:
"[...] this is very closely related to CVE-2023-45229, which is
already public, see no need to embargo. Making this BZ public.
CVE-2023-45229 was very recently mitigated under BZ 4518. We Will fix
this as an enhancement to the patches for BZ 4518."
While no PoC exists for this bug of an abundance of caution, it's
critical that this "enhancement" make it into the release
2. Corrects an incorrect offset
- StsCode = NTOHS (ReadUnaligned16 ((UINT16
*)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16
*)(DHCP6_OFFSET_OF_STATUS_CODE (Option))));
3. Adds the additional commits to a security yaml file so downstream
consumer may find the commits and ensure they have the patches - or
have the commits so they can cherry pick them appropriately.
On Fri, Feb 9, 2024 at 6:04 PM Douglas Flick [MSFT] <doug.edk2@gmail.com> wrote:
>
> After talking with Micheal Kinney, I was advised to resend
> these with edk2-stable202402, and CC Stewards.
>
> These patches are time sensitive and need reviews.
>
> This patch series corrects an additional security concern
> found in Dhc6Dxe related to CVE-2023-45229.
>
> Additionally this fixes some issues on the mailing list
> that were not pulled in before merging into Edk2.
>
> Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
>
> Doug Flick (3):
> [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH
> CVE-2023-45229 Related Patch
> [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
> [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
>
> NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 +++++++++++++++++------------
> NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 +--
> NetworkPkg/SecurityFixes.yaml | 1 +
> 3 files changed, 141 insertions(+), 112 deletions(-)
>
> --
> 2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115364): https://edk2.groups.io/g/devel/message/115364
Mute This Topic: https://groups.io/mt/104272125/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
` (3 preceding siblings ...)
2024-02-12 17:14 ` [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
@ 2024-02-12 17:17 ` Saloni Kasbekar
4 siblings, 0 replies; 12+ messages in thread
From: Saloni Kasbekar @ 2024-02-12 17:17 UTC (permalink / raw)
To: Douglas Flick [MSFT], devel@edk2.groups.io, Kinney, Michael D
Cc: Clark-williams, Zachary, Andrew Fish, Leif Lindholm
Hi Mike,
Could you please consider taking this for the edk2-stable202402 patches? While they weren't part of the bugs reported by Quarkslab, they follow a similar pattern and expose similar vulnerabilities to the bugs reported. My recommendation would be to pull in these changes for the stable release so that we have all the known vulnerabilities fixed as a part of the release.
Thanks,
Saloni
-----Original Message-----
From: Douglas Flick [MSFT] <doug.edk2@gmail.com>
Sent: Friday, February 9, 2024 7:05 PM
To: devel@edk2.groups.io
Cc: Douglas Flick [MSFT] <doug.edk2@gmail.com>; Kasbekar, Saloni <saloni.kasbekar@intel.com>; Clark-williams, Zachary <zachary.clark-williams@intel.com>; Andrew Fish <afish@apple.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Kinney, Michael D <michael.d.kinney@intel.com>
Subject: [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg
After talking with Micheal Kinney, I was advised to resend these with edk2-stable202402, and CC Stewards.
These patches are time sensitive and need reviews.
This patch series corrects an additional security concern found in Dhc6Dxe related to CVE-2023-45229.
Additionally this fixes some issues on the mailing list that were not pulled in before merging into Edk2.
Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Doug Flick (3):
[edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH
CVE-2023-45229 Related Patch
[edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
[edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml
NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 +++++++++++++++++------------
NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 +--
NetworkPkg/SecurityFixes.yaml | 1 +
3 files changed, 141 insertions(+), 112 deletions(-)
--
2.43.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115366): https://edk2.groups.io/g/devel/message/115366
Mute This Topic: https://groups.io/mt/104272125/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
@ 2024-02-12 18:56 ` Leif Lindholm
1 sibling, 0 replies; 12+ messages in thread
From: Leif Lindholm @ 2024-02-12 18:56 UTC (permalink / raw)
To: Douglas Flick [MSFT]
Cc: devel, Doug Flick, Saloni Kasbekar, Zachary Clark-williams,
Andrew Fish, Michael D Kinney
On Fri, Feb 09, 2024 at 19:04:56 -0800, Douglas Flick [MSFT] wrote:
> From: Doug Flick <dougflick@microsoft.com>
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4673
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4534
>
> This was not part of the Quarkslab bugs however the same pattern
> as CVE-2023-45229 exists in Dhcp6UpdateIaInfo.
>
> This patch replaces the code in question with the safe function
> created to patch CVE-2023-45229
>
> >
> > if (EFI_ERROR (
> > Dhcp6SeekInnerOptionSafe (
> > Instance->Config->IaDescriptor.Type,
> > Option,
> > OptionLen,
> > &IaInnerOpt,
> > &IaInnerLen
> > )
> > ))
> > {
> > return EFI_DEVICE_ERROR;
> > }
> >
Could you possibly introduce a declaration for
Dhcp6SeekInnerOptionSafe () instead of moving it? (Or break the move
out as a separate commit.)
That would significantly reduce the likelihood of mistakes during review.
/
Leif
> Additionally corrects incorrect usage of macro to read the status
>
> > - StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN
> (Option)));
> > + StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)
> DHCP6_OFFSET_OF_STATUS_CODE (Option));
>
> Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
>
> Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
> ---
> NetworkPkg/Dhcp6Dxe/Dhcp6Io.c | 232 ++++++++++++++++++++--------------
> 1 file changed, 134 insertions(+), 98 deletions(-)
>
> diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
> index 3b8feb4a2032..6000e885afaf 100644
> --- a/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
> +++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Io.c
> @@ -510,6 +510,97 @@ Dhcp6CallbackUser (
> return Status;
> }
>
> +/**
> + Seeks the Inner Options from a DHCP6 Option
> +
> + @param[in] IaType The type of the IA option.
> + @param[in] Option The pointer to the DHCP6 Option.
> + @param[in] OptionLen The length of the DHCP6 Option.
> + @param[out] IaInnerOpt The pointer to the IA inner option.
> + @param[out] IaInnerLen The length of the IA inner option.
> +
> + @retval EFI_SUCCESS Seek the inner option successfully.
> + @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,
> + the pointers are not modified
> +**/
> +EFI_STATUS
> +Dhcp6SeekInnerOptionSafe (
> + IN UINT16 IaType,
> + IN UINT8 *Option,
> + IN UINT32 OptionLen,
> + OUT UINT8 **IaInnerOpt,
> + OUT UINT16 *IaInnerLen
> + )
> +{
> + UINT16 IaInnerLenTmp;
> + UINT8 *IaInnerOptTmp;
> +
> + if (Option == NULL) {
> + ASSERT (Option != NULL);
> + return EFI_DEVICE_ERROR;
> + }
> +
> + if (IaInnerOpt == NULL) {
> + ASSERT (IaInnerOpt != NULL);
> + return EFI_DEVICE_ERROR;
> + }
> +
> + if (IaInnerLen == NULL) {
> + ASSERT (IaInnerLen != NULL);
> + return EFI_DEVICE_ERROR;
> + }
> +
> + if (IaType == Dhcp6OptIana) {
> + //
> + // Verify we have a fully formed IA_NA
> + //
> + if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {
> + return EFI_DEVICE_ERROR;
> + }
> +
> + //
> + // Get the IA Inner Option and Length
> + //
> + IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
> +
> + //
> + // Verify the IaInnerLen is valid.
> + //
> + IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));
> + if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {
> + return EFI_DEVICE_ERROR;
> + }
> +
> + IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;
> + } else if (IaType == Dhcp6OptIata) {
> + //
> + // Verify the OptionLen is valid.
> + //
> + if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {
> + return EFI_DEVICE_ERROR;
> + }
> +
> + IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
> +
> + //
> + // Verify the IaInnerLen is valid.
> + //
> + IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
> + if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {
> + return EFI_DEVICE_ERROR;
> + }
> +
> + IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;
> + } else {
> + return EFI_DEVICE_ERROR;
> + }
> +
> + *IaInnerOpt = IaInnerOptTmp;
> + *IaInnerLen = IaInnerLenTmp;
> +
> + return EFI_SUCCESS;
> +}
> +
> /**
> Update Ia according to the new reply message.
>
> @@ -528,13 +619,23 @@ Dhcp6UpdateIaInfo (
> {
> EFI_STATUS Status;
> UINT8 *Option;
> + UINT32 OptionLen;
> UINT8 *IaInnerOpt;
> UINT16 IaInnerLen;
> UINT16 StsCode;
> UINT32 T1;
> UINT32 T2;
>
> + T1 = 0;
> + T2 = 0;
> +
> ASSERT (Instance->Config != NULL);
> +
> + // OptionLen is the length of the Options excluding the DHCP header.
> + // Length of the EFI_DHCP6_PACKET from the first byte of the Header field to the last
> + // byte of the Option[] field.
> + OptionLen = Packet->Length - sizeof (Packet->Dhcp6.Header);
> +
> //
> // If the reply was received in response to a solicit with rapid commit option,
> // request, renew or rebind message, the client updates the information it has
> @@ -549,13 +650,29 @@ Dhcp6UpdateIaInfo (
> //
> Option = Dhcp6SeekIaOption (
> Packet->Dhcp6.Option,
> - Packet->Length - sizeof (EFI_DHCP6_HEADER),
> + OptionLen,
> &Instance->Config->IaDescriptor
> );
> if (Option == NULL) {
> return EFI_DEVICE_ERROR;
> }
>
> + //
> + // Calculate the distance from Packet->Dhcp6.Option to the IA option.
> + //
> + // Packet->Size and Packet->Length are both UINT32 type, and Packet->Size is
> + // the size of the whole packet, including the DHCP header, and Packet->Length
> + // is the length of the DHCP message body, excluding the DHCP header.
> + //
> + // (*Option - Packet->Dhcp6.Option) is the number of bytes from the start of
> + // DHCP6 option area to the start of the IA option.
> + //
> + // Dhcp6SeekInnerOptionSafe() is searching starting from the start of the
> + // IA option to the end of the DHCP6 option area, thus subtract the space
> + // up until this option
> + //
> + OptionLen = OptionLen - (UINT32)(Option - Packet->Dhcp6.Option);
> +
> //
> // The format of the IA_NA option is:
> //
> @@ -591,32 +708,32 @@ Dhcp6UpdateIaInfo (
> //
>
> //
> - // sizeof (option-code + option-len + IaId) = 8
> - // sizeof (option-code + option-len + IaId + T1) = 12
> - // sizeof (option-code + option-len + IaId + T1 + T2) = 16
> - //
> - // The inner options still start with 2 bytes option-code and 2 bytes option-len.
> + // Seek the inner option
> //
> + if (EFI_ERROR (
> + Dhcp6SeekInnerOptionSafe (
> + Instance->Config->IaDescriptor.Type,
> + Option,
> + OptionLen,
> + &IaInnerOpt,
> + &IaInnerLen
> + )
> + ))
> + {
> + return EFI_DEVICE_ERROR;
> + }
> +
> if (Instance->Config->IaDescriptor.Type == Dhcp6OptIana) {
> T1 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T1 (Option))));
> T2 = NTOHL (ReadUnaligned32 ((UINT32 *)(DHCP6_OFFSET_OF_IA_NA_T2 (Option))));
> //
> // Refer to RFC3155 Chapter 22.4. If a client receives an IA_NA with T1 greater than T2,
> // and both T1 and T2 are greater than 0, the client discards the IA_NA option and processes
> - // the remainder of the message as though the server had not included the invalid IA_NA option.
> + // the remainder of the message as though the server had not included the invalid IA_NA option.
> //
> if ((T1 > T2) && (T2 > 0)) {
> return EFI_DEVICE_ERROR;
> }
> -
> - IaInnerOpt = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
> - IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_COMBINED_IAID_T1_T2);
> - } else {
> - T1 = 0;
> - T2 = 0;
> -
> - IaInnerOpt = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
> - IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option)))) - DHCP6_SIZE_OF_IAID);
> }
>
> //
> @@ -642,7 +759,7 @@ Dhcp6UpdateIaInfo (
> Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode);
>
> if (Option != NULL) {
> - StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
> + StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_STATUS_CODE (Option))));
> if (StsCode != Dhcp6StsSuccess) {
> return EFI_DEVICE_ERROR;
> }
> @@ -662,87 +779,6 @@ Dhcp6UpdateIaInfo (
> return Status;
> }
>
> -/**
> - Seeks the Inner Options from a DHCP6 Option
> -
> - @param[in] IaType The type of the IA option.
> - @param[in] Option The pointer to the DHCP6 Option.
> - @param[in] OptionLen The length of the DHCP6 Option.
> - @param[out] IaInnerOpt The pointer to the IA inner option.
> - @param[out] IaInnerLen The length of the IA inner option.
> -
> - @retval EFI_SUCCESS Seek the inner option successfully.
> - @retval EFI_DEVICE_ERROR The OptionLen is invalid. On Error,
> - the pointers are not modified
> -**/
> -EFI_STATUS
> -Dhcp6SeekInnerOptionSafe (
> - IN UINT16 IaType,
> - IN UINT8 *Option,
> - IN UINT32 OptionLen,
> - OUT UINT8 **IaInnerOpt,
> - OUT UINT16 *IaInnerLen
> - )
> -{
> - UINT16 IaInnerLenTmp;
> - UINT8 *IaInnerOptTmp;
> -
> - if (Option == NULL) {
> - ASSERT (Option != NULL);
> - return EFI_DEVICE_ERROR;
> - }
> -
> - if (IaInnerOpt == NULL) {
> - ASSERT (IaInnerOpt != NULL);
> - return EFI_DEVICE_ERROR;
> - }
> -
> - if (IaInnerLen == NULL) {
> - ASSERT (IaInnerLen != NULL);
> - return EFI_DEVICE_ERROR;
> - }
> -
> - if (IaType == Dhcp6OptIana) {
> - // Verify we have a fully formed IA_NA
> - if (OptionLen < DHCP6_MIN_SIZE_OF_IA_NA) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - //
> - IaInnerOptTmp = DHCP6_OFFSET_OF_IA_NA_INNER_OPT (Option);
> -
> - // Verify the IaInnerLen is valid.
> - IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)DHCP6_OFFSET_OF_OPT_LEN (Option)));
> - if (IaInnerLenTmp < DHCP6_SIZE_OF_COMBINED_IAID_T1_T2) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - IaInnerLenTmp -= DHCP6_SIZE_OF_COMBINED_IAID_T1_T2;
> - } else if (IaType == Dhcp6OptIata) {
> - // Verify the OptionLen is valid.
> - if (OptionLen < DHCP6_MIN_SIZE_OF_IA_TA) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - IaInnerOptTmp = DHCP6_OFFSET_OF_IA_TA_INNER_OPT (Option);
> -
> - // Verify the IaInnerLen is valid.
> - IaInnerLenTmp = (UINT16)NTOHS (ReadUnaligned16 ((UINT16 *)(DHCP6_OFFSET_OF_OPT_LEN (Option))));
> - if (IaInnerLenTmp < DHCP6_SIZE_OF_IAID) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - IaInnerLenTmp -= DHCP6_SIZE_OF_IAID;
> - } else {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - *IaInnerOpt = IaInnerOptTmp;
> - *IaInnerLen = IaInnerLenTmp;
> -
> - return EFI_SUCCESS;
> -}
> -
> /**
> Seek StatusCode Option in package. A Status Code option may appear in the
> options field of a DHCP message and/or in the options field of another option.
> --
> 2.43.0
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115370): https://edk2.groups.io/g/devel/message/115370
Mute This Topic: https://groups.io/mt/104272126/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
2024-02-10 3:04 ` [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
@ 2024-02-12 19:16 ` Leif Lindholm
2024-02-12 19:31 ` Doug Flick via groups.io
1 sibling, 1 reply; 12+ messages in thread
From: Leif Lindholm @ 2024-02-12 19:16 UTC (permalink / raw)
To: Douglas Flick [MSFT]
Cc: devel, Doug Flick, Saloni Kasbekar, Zachary Clark-williams,
Andrew Fish, Michael D Kinney
On Fri, Feb 09, 2024 at 19:04:57 -0800, Douglas Flick [MSFT] wrote:
> From: Doug Flick <dougflick@microsoft.com>
>
> Removes duplicate check after merge
>
> >
> > //
> > // Verify the PacketCursor is within the packet
> > //
> > if ( (*PacketCursor < Packet->Dhcp6.Option)
> > || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size -
> sizeof (EFI_DHCP6_HEADER))))
> > {
> > return EFI_INVALID_PARAMETER;
> > }
> >
>
> Additionally Calculates the Packet->Length before appending
If this was one of the packages I maintain, I would ask you to break
any "Additionally" out as a separate commit.
> Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
>
> Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
> ---
> NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 ++++++--------------
> 1 file changed, 6 insertions(+), 14 deletions(-)
>
> diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> index 705c665c519d..348602c4e1a8 100644
> --- a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> +++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> @@ -657,15 +657,6 @@ Dhcp6AppendOption (
> return EFI_BUFFER_TOO_SMALL;
> }
>
> - //
> - // Verify the PacketCursor is within the packet
> - //
> - if ( (*PacketCursor < Packet->Dhcp6.Option)
> - || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size - sizeof (EFI_DHCP6_HEADER))))
> - {
> - return EFI_INVALID_PARAMETER;
> - }
> -
I see this exact pattern repeated identically 4 times in this
file. After this deletion.
If we're cleaning this up, someone should look into making a macro or
static helper function.
> WriteUnaligned16 ((UINT16 *)*PacketCursor, OptType);
> *PacketCursor += DHCP6_SIZE_OF_OPT_CODE;
> WriteUnaligned16 ((UINT16 *)*PacketCursor, OptLen);
> @@ -929,6 +920,11 @@ Dhcp6AppendIaOption (
> *PacketCursor += sizeof (T2);
> }
>
> + //
> + // Update the packet length
> + //
> + Packet->Length += BytesNeeded;
> +
That's not just cleanup though, this is a bugfix in its own right?
As in, even if the code is currently laid out in a way that doesn't
trigger an issue, Dhcp6AppendIaAddrOption () depends on this option
being up to date when called.
Or am I overreacting?
/
Leif
> //
> // Fill all the addresses belong to the Ia
> //
> @@ -945,11 +941,6 @@ Dhcp6AppendIaOption (
> //
> *Len = HTONS ((UINT16)(*PacketCursor - (UINT8 *)Len - 2));
>
> - //
> - // Update the packet length
> - //
> - Packet->Length += BytesNeeded;
> -
> return EFI_SUCCESS;
> }
>
> @@ -957,6 +948,7 @@ Dhcp6AppendIaOption (
> Append the appointed Elapsed time option to Buf, and move Buf to the end.
>
> @param[in, out] Packet A pointer to the packet, on success Packet->Length
> + will be updated.
> @param[in, out] PacketCursor The pointer in the packet, on success PacketCursor
> will be moved to the end of the option.
> @param[in] Instance The pointer to the Dhcp6 instance.
> --
> 2.43.0
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115371): https://edk2.groups.io/g/devel/message/115371
Mute This Topic: https://groups.io/mt/104272127/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
2024-02-12 19:16 ` Leif Lindholm
@ 2024-02-12 19:31 ` Doug Flick via groups.io
0 siblings, 0 replies; 12+ messages in thread
From: Doug Flick via groups.io @ 2024-02-12 19:31 UTC (permalink / raw)
To: Leif Lindholm, Douglas Flick [MSFT]
Cc: devel@edk2.groups.io, Saloni Kasbekar, Zachary Clark-williams,
Andrew Fish, Kinney, Michael D
[-- Attachment #1: Type: text/plain, Size: 5297 bytes --]
> If this was one of the packages I maintain, I would ask
> you to break any "Additionally" out as a separate commit.
Thats fair enough. I can go ahead and do that.
> I see this exact pattern repeated identically 4 times in
> this file. After this deletion. If we're cleaning this up,
> someone should look into making a macro or static
> helper function.
That's a good suggestion
> That's not just cleanup though, this is a bugfix in its own > right? As in, even if the code is currently laid out in a way > that doesn't trigger an issue,
> Dhcp6AppendIaAddrOption () depends on this option
> being up to date when called. Or am I overreacting?
Ultimately, I think you're right. This issue was originally pointed on the original mail thread but it was merged in before it could be corrected. Should I create a bugzilla for this and then attach that to the change?
Douglas Flick
________________________________
From: Leif Lindholm <quic_llindhol@quicinc.com>
Sent: Monday, February 12, 2024 11:16:44 AM
To: Douglas Flick [MSFT] <doug.edk2@gmail.com>
Cc: devel@edk2.groups.io <devel@edk2.groups.io>; Doug Flick <dougflick@microsoft.com>; Saloni Kasbekar <saloni.kasbekar@intel.com>; Zachary Clark-williams <zachary.clark-williams@intel.com>; Andrew Fish <afish@apple.com>; Kinney, Michael D <michael.d.kinney@intel.com>
Subject: [EXTERNAL] Re: [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup
[You don't often get email from quic_llindhol@quicinc.com. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
On Fri, Feb 09, 2024 at 19:04:57 -0800, Douglas Flick [MSFT] wrote:
> From: Doug Flick <dougflick@microsoft.com>
>
> Removes duplicate check after merge
>
> >
> > //
> > // Verify the PacketCursor is within the packet
> > //
> > if ( (*PacketCursor < Packet->Dhcp6.Option)
> > || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size -
> sizeof (EFI_DHCP6_HEADER))))
> > {
> > return EFI_INVALID_PARAMETER;
> > }
> >
>
> Additionally Calculates the Packet->Length before appending
If this was one of the packages I maintain, I would ask you to break
any "Additionally" out as a separate commit.
> Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
>
> Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
> ---
> NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c | 20 ++++++--------------
> 1 file changed, 6 insertions(+), 14 deletions(-)
>
> diff --git a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> index 705c665c519d..348602c4e1a8 100644
> --- a/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> +++ b/NetworkPkg/Dhcp6Dxe/Dhcp6Utility.c
> @@ -657,15 +657,6 @@ Dhcp6AppendOption (
> return EFI_BUFFER_TOO_SMALL;
> }
>
> - //
> - // Verify the PacketCursor is within the packet
> - //
> - if ( (*PacketCursor < Packet->Dhcp6.Option)
> - || (*PacketCursor >= Packet->Dhcp6.Option + (Packet->Size - sizeof (EFI_DHCP6_HEADER))))
> - {
> - return EFI_INVALID_PARAMETER;
> - }
> -
I see this exact pattern repeated identically 4 times in this
file. After this deletion.
If we're cleaning this up, someone should look into making a macro or
static helper function.
> WriteUnaligned16 ((UINT16 *)*PacketCursor, OptType);
> *PacketCursor += DHCP6_SIZE_OF_OPT_CODE;
> WriteUnaligned16 ((UINT16 *)*PacketCursor, OptLen);
> @@ -929,6 +920,11 @@ Dhcp6AppendIaOption (
> *PacketCursor += sizeof (T2);
> }
>
> + //
> + // Update the packet length
> + //
> + Packet->Length += BytesNeeded;
> +
That's not just cleanup though, this is a bugfix in its own right?
As in, even if the code is currently laid out in a way that doesn't
trigger an issue, Dhcp6AppendIaAddrOption () depends on this option
being up to date when called.
Or am I overreacting?
/
Leif
> //
> // Fill all the addresses belong to the Ia
> //
> @@ -945,11 +941,6 @@ Dhcp6AppendIaOption (
> //
> *Len = HTONS ((UINT16)(*PacketCursor - (UINT8 *)Len - 2));
>
> - //
> - // Update the packet length
> - //
> - Packet->Length += BytesNeeded;
> -
> return EFI_SUCCESS;
> }
>
> @@ -957,6 +948,7 @@ Dhcp6AppendIaOption (
> Append the appointed Elapsed time option to Buf, and move Buf to the end.
>
> @param[in, out] Packet A pointer to the packet, on success Packet->Length
> + will be updated.
> @param[in, out] PacketCursor The pointer in the packet, on success PacketCursor
> will be moved to the end of the option.
> @param[in] Instance The pointer to the Dhcp6 instance.
> --
> 2.43.0
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115372): https://edk2.groups.io/g/devel/message/115372
Mute This Topic: https://groups.io/mt/104272127/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
[-- Attachment #2: Type: text/html, Size: 12137 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-02-12 19:31 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-10 3:04 [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 1/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: SECURITY PATCH CVE-2023-45229 Related Patch Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 18:56 ` Leif Lindholm
2024-02-10 3:04 ` [edk2-devel] [PATCH 2/3] [edk2-stable202402] NetworkPkg: Dhcp6Dxe: Additional Code Cleanup Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 19:16 ` Leif Lindholm
2024-02-12 19:31 ` Doug Flick via groups.io
2024-02-10 3:04 ` [edk2-devel] [PATCH 3/3] [edk2-stable202402] NetworkPkg: : Updating SecurityFixes.yaml Doug Flick via groups.io
2024-02-12 17:14 ` Saloni Kasbekar
2024-02-12 17:14 ` [edk2-devel] [PATCH 0/3] [edk2-stable202402] Corrects additional concern in NetworkPkg Doug Flick via groups.io
2024-02-12 17:17 ` Saloni Kasbekar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox