From 7e97e9eb90e57cdf5dcd058a711c4e9827c80435f9056b3e9e92568a99091445 Mon Sep 17 00:00:00 2001 From: Erico Mendonca Date: Fri, 23 Aug 2024 13:01:22 +0000 Subject: [PATCH] =?UTF-8?q?-=20Apply=20upstream=20fix=20for=20crash=20in?= =?UTF-8?q?=20bgp=5Fattr=5Fencap=20that=20were=20missing=20=20=20a=20check?= =?UTF-8?q?=20of=20the=20actual=20remaining=20stream=20length=20before=20t?= =?UTF-8?q?aking=20the=20=20=20TLV=20value=20(CVE-2024-44070,bsc#1229438,g?= =?UTF-8?q?h#FRRouting/frr#16502):=20=20=20+=200002-bgpd-Check-the-actual-?= =?UTF-8?q?remaining-stream-length-before.patch=20-=20Re-added=200001-disa?= =?UTF-8?q?ble-zmq-test.patch=20to=20avoid=20(sporadic=20or=20arch=20=20?= =?UTF-8?q?=20specific,=20e.g.=20aarch64)=20"make=20check"=20test=20failur?= =?UTF-8?q?es=20(bsc#1180217).=20=20=20+=200001-disable-zmq-test.patch=20-?= =?UTF-8?q?=20Re-added=20hardening=20patch=20for=20systemd=20service(s)=20?= =?UTF-8?q?(bsc#1181400):=20=20=20+=20harden=5Ffrr.service.patch=20-=20Cle?= =?UTF-8?q?anup=20unknown=20--enable-systemd=20and=20correct=20the=20--sys?= =?UTF-8?q?confdir=20=20=20and=20--localstatedir=20configure=20options=20t?= =?UTF-8?q?o=20not=20end=20in=20=E2=80=A6/frr.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OBS-URL: https://build.opensuse.org/package/show/network/frr?expand=0&rev=72 --- ...ctual-remaining-stream-length-before.patch | 51 +++++++++++++++++++ frr.changes | 16 ++++++ frr.spec | 12 +++-- 3 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch diff --git a/0002-bgpd-Check-the-actual-remaining-stream-length-before.patch b/0002-bgpd-Check-the-actual-remaining-stream-length-before.patch new file mode 100644 index 0000000..edfa30d --- /dev/null +++ b/0002-bgpd-Check-the-actual-remaining-stream-length-before.patch @@ -0,0 +1,51 @@ +From 605485a7c470f6e49c3f5712f2c4692fea3019e7 Mon Sep 17 00:00:00 2001 +From: Donatas Abraitis +Date: Wed, 31 Jul 2024 08:35:14 +0300 +Subject: [PATCH] bgpd: Check the actual remaining stream length before taking + TLV value +Upstream: yes +References: CVE-2024-44070,bsc#1229438,gh#FRRouting/frr#16502 + +``` + 0 0xb50b9f898028 in __sanitizer_print_stack_trace (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x368028) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7) + 1 0xb50b9f7ed8e4 in fuzzer::PrintStackTrace() (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x2bd8e4) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7) + 2 0xb50b9f7d4d9c in fuzzer::Fuzzer::CrashCallback() (/home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/.libs/bgpd+0x2a4d9c) (BuildId: 3292703ed7958b20076550c967f879db8dc27ca7) + 3 0xe0d12d7469cc (linux-vdso.so.1+0x9cc) (BuildId: 1a77697e9d723fe22246cfd7641b140c427b7e11) + 4 0xe0d12c88f1fc in __pthread_kill_implementation nptl/pthread_kill.c:43:17 + 5 0xe0d12c84a678 in gsignal signal/../sysdeps/posix/raise.c:26:13 + 6 0xe0d12c83712c in abort stdlib/abort.c:79:7 + 7 0xe0d12d214724 in _zlog_assert_failed /home/ubuntu/frr-public/frr_public_private-libfuzzer/lib/zlog.c:789:2 + 8 0xe0d12d1285e4 in stream_get /home/ubuntu/frr-public/frr_public_private-libfuzzer/lib/stream.c:324:3 + 9 0xb50b9f8e47c4 in bgp_attr_encap /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_attr.c:2758:3 + 10 0xb50b9f8dcd38 in bgp_attr_parse /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_attr.c:3783:10 + 11 0xb50b9faf74b4 in bgp_update_receive /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_packet.c:2383:20 + 12 0xb50b9faf1dcc in bgp_process_packet /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_packet.c:4075:11 + 13 0xb50b9f8c90d0 in LLVMFuzzerTestOneInput /home/ubuntu/frr-public/frr_public_private-libfuzzer/bgpd/bgp_main.c:582:3 +``` + +Reported-by: Iggy Frankovic +Signed-off-by: Donatas Abraitis +(cherry picked from commit 0998b38e4d61179441f90dd7e7fd6a3a8b7bd8c5) + +diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c +index 40e074d058..4ebb45e3de 100644 +--- a/bgpd/bgp_attr.c ++++ b/bgpd/bgp_attr.c +@@ -2727,6 +2727,14 @@ static int bgp_attr_encap(struct bgp_attr_parser_args *args) + args->total); + } + ++ if (STREAM_READABLE(BGP_INPUT(peer)) < sublength) { ++ zlog_err("Tunnel Encap attribute sub-tlv length %d exceeds remaining stream length %zu", ++ sublength, STREAM_READABLE(BGP_INPUT(peer))); ++ return bgp_attr_malformed(args, ++ BGP_NOTIFY_UPDATE_OPT_ATTR_ERR, ++ args->total); ++ } ++ + /* alloc and copy sub-tlv */ + /* TBD make sure these are freed when attributes are released */ + tlv = XCALLOC(MTYPE_ENCAP_TLV, +-- +2.43.0 + diff --git a/frr.changes b/frr.changes index e942c5d..8f55ffc 100644 --- a/frr.changes +++ b/frr.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Thu Aug 22 13:02:19 UTC 2024 - Marius Tomaschewski + +- Apply upstream fix for crash in bgp_attr_encap that were missing + a check of the actual remaining stream length before taking the + TLV value (CVE-2024-44070,bsc#1229438,gh#FRRouting/frr#16502): + + 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch +- Re-added 0001-disable-zmq-test.patch to avoid (sporadic or arch + specific, e.g. aarch64) "make check" test failures (bsc#1180217). + + 0001-disable-zmq-test.patch +- Re-added hardening patch for systemd service(s) (bsc#1181400): + + harden_frr.service.patch +- Cleanup unknown --enable-systemd and correct the --sysconfdir + and --localstatedir configure options to not end in …/frr. + ------------------------------------------------------------------- Fri Aug 9 14:14:10 UTC 2024 - Erico Mendonca @@ -32,6 +47,7 @@ Sun Jul 28 20:21:43 UTC 2024 - Erico Mendonca - 10.0.1 - 0021-ospfd-Solved-crash-in-RI-parsing-with-OSPF-TE.patch - 0022-ospfd-Correct-Opaque-LSA-Extended-parser.patch - 0023-ospfd-protect-call-to-get_edge-in-ospf_te.c.patch + ------------------------------------------------------------------- Tue Jun 4 21:27:48 UTC 2024 - Marius Tomaschewski diff --git a/frr.spec b/frr.spec index 8e7c92b..e7d7d15 100644 --- a/frr.spec +++ b/frr.spec @@ -39,6 +39,9 @@ URL: https://www.frrouting.org #Git-Clone: https://github.com/FRRouting/frr.git Source: https://github.com/FRRouting/frr/archive/refs/tags/%{name}-%{version}.tar.gz Source1: %{name}-tmpfiles.d +Patch0: harden_frr.service.patch +Patch1: 0001-disable-zmq-test.patch +Patch2: 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: bison >= 2.7 @@ -78,7 +81,7 @@ BuildRequires: pkgconfig(sqlite3) Requires(post): %{install_info_prereq} Requires(pre): %{install_info_prereq} Requires(pre): shadow -Requires(preun): %{install_info_prereq} +Requires(preun):%{install_info_prereq} Recommends: logrotate Conflicts: quagga Provides: zebra = %{version} @@ -204,8 +207,8 @@ export CFLAGS="-ffat-lto-objects" autoreconf -fiv %configure \ --disable-silent-rules \ - --sysconfdir=%{_sysconfdir}/%{name} \ - --localstatedir=%{frr_statedir} \ + --sysconfdir=%{_sysconfdir}\ + --localstatedir=%{_rundir} \ --sbindir=%{frr_daemondir} \ --with-moduledir=%{_libdir}/frr/modules \ --disable-static \ @@ -259,9 +262,8 @@ autoreconf -fiv --with-crypto=openssl \ --enable-config-rollbacks \ %if %{with grpc} - --enable-grpc \ + --enable-grpc %endif - --enable-systemd make %{?_smp_mflags} MAKEINFO="makeinfo --no-split"