diff options
| author | Tobias Geerinckx-Rice <me@tobias.gr> | 2019-10-23 19:43:02 +0200 |
|---|---|---|
| committer | Tobias Geerinckx-Rice <me@tobias.gr> | 2019-10-23 19:58:48 +0200 |
| commit | 3f4ea9a62b5fa68d57724b2f83c35a191e33b7c8 (patch) | |
| tree | 89c23778ff146795ad9924e8582622cc2a5f76fe /gnu/packages | |
| parent | dff0eedb04ac7c61fc1e2ddd4cd577f83f5eb89a (diff) | |
gnu: avahi: Fix CVE-2018-1000845 and duplicate CVE-2017-6519.
* gnu/packages/avahi.scm (avahi/fixed): New variable.
(avahi)[replacement]: Use it.
* gnu/packages/patches/avahi-CVE-2018-1000845.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
Diffstat (limited to 'gnu/packages')
| -rw-r--r-- | gnu/packages/avahi.scm | 11 | ||||
| -rw-r--r-- | gnu/packages/patches/avahi-CVE-2018-1000845.patch | 42 |
2 files changed, 53 insertions, 0 deletions
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm index e71ffc29823..408be8ed57f 100644 --- a/gnu/packages/avahi.scm +++ b/gnu/packages/avahi.scm | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | (package | 35 | (package |
| 36 | (name "avahi") | 36 | (name "avahi") |
| 37 | (version "0.7") | 37 | (version "0.7") |
| 38 | (replacement avahi/fixed) | ||
| 38 | (home-page "http://avahi.org") | 39 | (home-page "http://avahi.org") |
| 39 | (source (origin | 40 | (source (origin |
| 40 | (method url-fetch) | 41 | (method url-fetch) |
| @@ -74,6 +75,16 @@ network. It is an implementation of the mDNS (for \"Multicast DNS\") and | |||
| 74 | DNS-SD (for \"DNS-Based Service Discovery\") protocols.") | 75 | DNS-SD (for \"DNS-Based Service Discovery\") protocols.") |
| 75 | (license lgpl2.1+))) | 76 | (license lgpl2.1+))) |
| 76 | 77 | ||
| 78 | (define avahi/fixed | ||
| 79 | (package/inherit avahi | ||
| 80 | (source (origin | ||
| 81 | (inherit (package-source avahi)) | ||
| 82 | (patches | ||
| 83 | (append (search-patches "avahi-CVE-2018-1000845.patch") | ||
| 84 | (origin-patches (package-source avahi)))))) | ||
| 85 | ;; Hide a duplicate of the CVE fixed above. | ||
| 86 | (properties `((lint-hidden-cve . ("CVE-2017-6519")))))) | ||
| 87 | |||
| 77 | (define-public nss-mdns | 88 | (define-public nss-mdns |
| 78 | (package | 89 | (package |
| 79 | (name "nss-mdns") | 90 | (name "nss-mdns") |
diff --git a/gnu/packages/patches/avahi-CVE-2018-1000845.patch b/gnu/packages/patches/avahi-CVE-2018-1000845.patch new file mode 100644 index 00000000000..e5b13e0beec --- /dev/null +++ b/gnu/packages/patches/avahi-CVE-2018-1000845.patch | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | From e111def44a7df4624a4aa3f85fe98054bffb6b4f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Trent Lloyd <trent@lloyd.id.au> | ||
| 3 | Date: Sat, 22 Dec 2018 09:06:07 +0800 | ||
| 4 | Subject: [PATCH] Drop legacy unicast queries from address not on local link | ||
| 5 | |||
| 6 | When handling legacy unicast queries, ensure that the source IP is | ||
| 7 | inside a subnet on the local link, otherwise drop the packet. | ||
| 8 | |||
| 9 | Fixes #145 | ||
| 10 | Fixes #203 | ||
| 11 | CVE-2017-6519 | ||
| 12 | CVE-2018-100084 | ||
| 13 | --- | ||
| 14 | avahi-core/server.c | 8 ++++++++ | ||
| 15 | 1 file changed, 8 insertions(+) | ||
| 16 | |||
| 17 | diff --git a/avahi-core/server.c b/avahi-core/server.c | ||
| 18 | index a2cb19a8..a2580e38 100644 | ||
| 19 | --- a/avahi-core/server.c | ||
| 20 | +++ b/avahi-core/server.c | ||
| 21 | @@ -930,6 +930,7 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres | ||
| 22 | |||
| 23 | if (avahi_dns_packet_is_query(p)) { | ||
| 24 | int legacy_unicast = 0; | ||
| 25 | + char t[AVAHI_ADDRESS_STR_MAX]; | ||
| 26 | |||
| 27 | /* For queries EDNS0 might allow ARCOUNT != 0. We ignore the | ||
| 28 | * AR section completely here, so far. Until the day we add | ||
| 29 | @@ -947,6 +948,13 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres | ||
| 30 | legacy_unicast = 1; | ||
| 31 | } | ||
| 32 | |||
| 33 | + if (!is_mdns_mcast_address(dst_address) && | ||
| 34 | + !avahi_interface_address_on_link(i, src_address)) { | ||
| 35 | + | ||
| 36 | + avahi_log_debug("Received non-local unicast query from host %s on interface '%s.%i'.", avahi_address_snprint(t, sizeof(t), src_address), i->hardware->name, i->protocol); | ||
| 37 | + return; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | if (legacy_unicast) | ||
| 41 | reflect_legacy_unicast_query_packet(s, p, i, src_address, port); | ||
| 42 | |||
