Version 5.0.13
This release is about what a BGP peer can do to ExaBGP and to the programs
reading its API. Three changes alter what a peer or a consumer sees, so read
the compatibility notes before upgrading.
-
Security: a peer could write data of its own into the API streams: fields
into the JSON stream through a BGP-LS attribute, and whole events into the
text stream through its hostname, its software version or a shutdown message.
The output stayed parseable, so a program reading the API acted on data no
peer had sent. BGP-LS did not need to be negotiated. 5.0.11 closed the JSON
hostname, software version and NOTIFICATION cases only. Upgrade if any
process reads the API. -
Compatibility: three BGP-LS fields of the JSON API change.
link-identifiersandsr-adj-lan-sidswere always empty and now carry what
the peer sent.local-te-router-idswas published twice for a router
announcing an IPv4 and an IPv6 TE Router ID, and a JSON parser keeps only the
second, so the IPv4 address was lost; it is published once now, holding both.
remote-te-router-idandsr-adjhave the same fault and are left alone,
since fixing them changes their type. 6.0 renames and fixes those two. -
Compatibility: a message of an unknown type is refused with NOTIFICATION
1/3 Bad Message Type, where 5.0.12 sent 1/0 Unspecific (RFC 4271 section
6.1). -
Compatibility: five kinds of malformed message which 5.0.12 accepted are
now refused, because it invented the missing data and produced a route or a
filter the peer had not sent: a FlowSpec rule whose operator announces a
value it does not carry, a prefix whose mask is longer than its address
family allows, a labelled route with no bottom of stack bit, an MCAST-VPN
route announcing more than it carries, and a VPN next hop whose route
distinguisher is not zero. -
Fix: comparing two attributes ignored their content, so any two BGP-LS
attributes, prefix SIDs, or large or extended community sets compared as
equal. ExaBGP does not use that comparison itself, so this only affects code
using it as a library. -
Fix: a peer could stop ExaBGP with a truncated message, attribute,
capability, route, BGP-LS TLV or operational message. These are now refused
with a NOTIFICATION. -
Fix: a peer could stop ExaBGP as it wrote the API stream, dropping every
session on the machine, with a FlowSpec redirect community, a BGP-LS route of
an unknown type, an undefined ADD-PATH value or a valid SRv6 TLV. -
Fix: FlowSpec, EVPN, BGP-LS VPN and AIGP routes could produce API output
which is not valid JSON, so a consumer lost the whole line. -
Fix: a BGP-LS attribute was refused when a reserved flag bit was set, and
a Multi-Topology identifier with reserved bits set was read as a different
topology. The RFCs ask for those bits to be ignored. A malformed BGP-LS
attribute now costs the attribute and not the session (RFC 7752 section 5.3). -
Fix: an IPv6 multicast route could be configured and sent, but a route
received in that family was refused and the session dropped. A BGP-LS VPN
route was refused on receipt whatever the peer sent. -
Fix: a twenty byte IPv6 extended community lost its leading zeros when
printed. -
Fix: a PMSI tunnel attribute whose tunnel identifier is not the expected
width was refused or silently truncated. It is printed in hexadecimal now. -
Fix: a BGP prefix SID attribute holding a TLV we do not know stopped the
parser. -
Fix: withdrawing a route could file it in the RIB under a second key, so
one prefix was held twice. -
Fix: two prefixes with the same address and a different mask had no
defined order, so the order they were packed into an UPDATE was arbitrary. -
Fix: a backslash at the end of a text, and any
\uXXXXescape, stopped
the configuration parser instead of being reported. -
Fix: the package metadata uses the SPDX license expression of PEP 639 and
shipsLICENCE.txt(#1413). The wheel still installs on Python 3.8; building
the source distribution now needs 3.9. -
QA: CI runs every test in the tree, and every change is compared against
5.0.12 before it is committed.