summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Peng <peng.zhang1.cn@windriver.com>2024-11-26 16:11:15 +0800
committerArmin Kuster <akuster808@gmail.com>2024-12-15 13:57:37 -0500
commit2d7769f90b09703f516a8c499972525726db6f95 (patch)
tree6edbd469f7f11dd46ab3a22720440bd6f869760a
parent483946a97bf49752538675ed56a8acd864c6a12b (diff)
downloadmeta-openembedded-2d7769f90b09703f516a8c499972525726db6f95.tar.gz
frr: fix CVE-2024-31948
CVE-2024-31948: In FRRouting (FRR) through 9.1, an attacker using a malformed Prefix SID attribute in a BGP UPDATE packet can cause the bgpd daemon to crash. Reference: [https://nvd.nist.gov/vuln/detail/CVE-2024-31948] Upstream patches: [https://github.com/FRRouting/frr/commit/ba6a8f1a31e1a88df2de69ea46068e8bd9b97138] [https://github.com/FRRouting/frr/commit/babb23b74855e23c987a63f8256d24e28c044d07] Signed-off-by: Zhang Peng <peng.zhang1.cn@windriver.com> Signed-off-by: Armin Kuster <akuster808@gmail.com>
-rw-r--r--meta-networking/recipes-protocols/frr/frr/CVE-2024-31948.patch130
-rw-r--r--meta-networking/recipes-protocols/frr/frr_9.1.bb1
2 files changed, 131 insertions, 0 deletions
diff --git a/meta-networking/recipes-protocols/frr/frr/CVE-2024-31948.patch b/meta-networking/recipes-protocols/frr/frr/CVE-2024-31948.patch
new file mode 100644
index 0000000000..bc1f2edc7d
--- /dev/null
+++ b/meta-networking/recipes-protocols/frr/frr/CVE-2024-31948.patch
@@ -0,0 +1,130 @@
1From a11446687169c679b5e51b57f151a6f6c119656c Mon Sep 17 00:00:00 2001
2From: Donatas Abraitis <donatas@opensourcerouting.org>
3Date: Wed, 27 Mar 2024 18:42:56 +0200
4Subject: [PATCH 1/2] bgpd: Fix error handling when receiving BGP Prefix SID
5 attribute
6
7Without this patch, we always set the BGP Prefix SID attribute flag without
8checking if it's malformed or not. RFC8669 says that this attribute MUST be discarded.
9
10Also, this fixes the bgpd crash when a malformed Prefix SID attribute is received,
11with malformed transitive flags and/or TLVs.
12
13Reported-by: Iggy Frankovic <iggyfran@amazon.com>
14Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
15
16CVE: CVE-2024-31948
17Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/ba6a8f1a31e1a88df2de69ea46068e8bd9b97138]
18
19Signed-off-by: Zhang Peng <peng.zhang1.cn@windriver.com>
20---
21 bgpd/bgp_attr.c | 5 +++--
22 1 file changed, 3 insertions(+), 2 deletions(-)
23
24diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
25index 56e77eb3a..2639ff864 100644
26--- a/bgpd/bgp_attr.c
27+++ b/bgpd/bgp_attr.c
28@@ -1390,6 +1390,7 @@ bgp_attr_malformed(struct bgp_attr_parser_args *args, uint8_t subcode,
29 case BGP_ATTR_AS4_AGGREGATOR:
30 case BGP_ATTR_AGGREGATOR:
31 case BGP_ATTR_ATOMIC_AGGREGATE:
32+ case BGP_ATTR_PREFIX_SID:
33 return BGP_ATTR_PARSE_PROCEED;
34
35 /* Core attributes, particularly ones which may influence route
36@@ -3144,8 +3145,6 @@ enum bgp_attr_parse_ret bgp_attr_prefix_sid(struct bgp_attr_parser_args *args)
37 struct attr *const attr = args->attr;
38 enum bgp_attr_parse_ret ret;
39
40- attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID);
41-
42 uint8_t type;
43 uint16_t length;
44 size_t headersz = sizeof(type) + sizeof(length);
45@@ -3195,6 +3194,8 @@ enum bgp_attr_parse_ret bgp_attr_prefix_sid(struct bgp_attr_parser_args *args)
46 }
47 }
48
49+ SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID));
50+
51 return BGP_ATTR_PARSE_PROCEED;
52 }
53
54--
552.34.1
56
57From 70555e1c0927b84f3aae9406379b00c976b2fa0c Mon Sep 17 00:00:00 2001
58From: Donatas Abraitis <donatas@opensourcerouting.org>
59Date: Wed, 27 Mar 2024 19:08:38 +0200
60Subject: [PATCH 2/2] bgpd: Prevent from one more CVE triggering this place
61
62If we receive an attribute that is handled by bgp_attr_malformed(), use
63treat-as-withdraw behavior for unknown (or missing to add - if new) attributes.
64
65Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
66
67CVE: CVE-2024-31948
68Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/babb23b74855e23c987a63f8256d24e28c044d07]
69
70Signed-off-by: Zhang Peng <peng.zhang1.cn@windriver.com>
71---
72 bgpd/bgp_attr.c | 33 ++++++++++++++++++++++-----------
73 1 file changed, 22 insertions(+), 11 deletions(-)
74
75diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
76index 2639ff864..797f05d60 100644
77--- a/bgpd/bgp_attr.c
78+++ b/bgpd/bgp_attr.c
79@@ -1381,6 +1381,15 @@ bgp_attr_malformed(struct bgp_attr_parser_args *args, uint8_t subcode,
80 (args->startp - STREAM_DATA(BGP_INPUT(peer)))
81 + args->total);
82
83+ /* Partial optional attributes that are malformed should not cause
84+ * the whole session to be reset. Instead treat it as a withdrawal
85+ * of the routes, if possible.
86+ */
87+ if (CHECK_FLAG(flags, BGP_ATTR_FLAG_TRANS) &&
88+ CHECK_FLAG(flags, BGP_ATTR_FLAG_OPTIONAL) &&
89+ CHECK_FLAG(flags, BGP_ATTR_FLAG_PARTIAL))
90+ return BGP_ATTR_PARSE_WITHDRAW;
91+
92 switch (args->type) {
93 /* where an attribute is relatively inconsequential, e.g. it does not
94 * affect route selection, and can be safely ignored, then any such
95@@ -1418,19 +1427,21 @@ bgp_attr_malformed(struct bgp_attr_parser_args *args, uint8_t subcode,
96 BGP_NOTIFY_UPDATE_ERR, subcode,
97 notify_datap, length);
98 return BGP_ATTR_PARSE_ERROR;
99+ default:
100+ /* Unknown attributes, that are handled by this function
101+ * should be treated as withdraw, to prevent one more CVE
102+ * from being introduced.
103+ * RFC 7606 says:
104+ * The "treat-as-withdraw" approach is generally preferred
105+ * and the "session reset" approach is discouraged.
106+ */
107+ flog_err(EC_BGP_ATTR_FLAG,
108+ "%s(%u) attribute received, while it is not known how to handle it, treating as withdraw",
109+ lookup_msg(attr_str, args->type, NULL), args->type);
110+ break;
111 }
112
113- /* Partial optional attributes that are malformed should not cause
114- * the whole session to be reset. Instead treat it as a withdrawal
115- * of the routes, if possible.
116- */
117- if (CHECK_FLAG(flags, BGP_ATTR_FLAG_TRANS)
118- && CHECK_FLAG(flags, BGP_ATTR_FLAG_OPTIONAL)
119- && CHECK_FLAG(flags, BGP_ATTR_FLAG_PARTIAL))
120- return BGP_ATTR_PARSE_WITHDRAW;
121-
122- /* default to reset */
123- return BGP_ATTR_PARSE_ERROR_NOTIFYPLS;
124+ return BGP_ATTR_PARSE_WITHDRAW;
125 }
126
127 /* Find out what is wrong with the path attribute flag bits and log the error.
128--
1292.34.1
130
diff --git a/meta-networking/recipes-protocols/frr/frr_9.1.bb b/meta-networking/recipes-protocols/frr/frr_9.1.bb
index 807e4ef8ef..7043cad0f6 100644
--- a/meta-networking/recipes-protocols/frr/frr_9.1.bb
+++ b/meta-networking/recipes-protocols/frr/frr_9.1.bb
@@ -16,6 +16,7 @@ SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.1 \
16 file://CVE-2024-34088.patch \ 16 file://CVE-2024-34088.patch \
17 file://CVE-2024-31950.patch \ 17 file://CVE-2024-31950.patch \
18 file://CVE-2024-31951.patch \ 18 file://CVE-2024-31951.patch \
19 file://CVE-2024-31948.patch \
19 " 20 "
20 21
21SRCREV = "ca2d6f0f1e000951224a18973cc1827f7f5215b5" 22SRCREV = "ca2d6f0f1e000951224a18973cc1827f7f5215b5"