From 44c0618c075b3dd7a22bb4655cb9270e53022d77 Mon Sep 17 00:00:00 2001 From: Ankur Tyagi Date: Fri, 11 Sep 2026 11:09:26 +1200 Subject: [PATCH] unbound: patch CVE-2026-55717 Details: https://nvd.nist.gov/vuln/detail/cve-2026-55717 Signed-off-by: Ankur Tyagi Signed-off-by: Anuj Mittal --- .../unbound/unbound/CVE-2026-55717.patch | 90 +++++++++++++++++++ .../recipes-support/unbound/unbound_1.24.2.bb | 1 + 2 files changed, 91 insertions(+) create mode 100644 meta-networking/recipes-support/unbound/unbound/CVE-2026-55717.patch diff --git a/meta-networking/recipes-support/unbound/unbound/CVE-2026-55717.patch b/meta-networking/recipes-support/unbound/unbound/CVE-2026-55717.patch new file mode 100644 index 0000000000..fcb223029d --- /dev/null +++ b/meta-networking/recipes-support/unbound/unbound/CVE-2026-55717.patch @@ -0,0 +1,90 @@ +From ff034061b24642e15340b0696e5c9a0aa8410fab Mon Sep 17 00:00:00 2001 +From: "W.C.A. Wijngaards" +Date: Wed, 22 Jul 2026 10:17:32 +0200 +Subject: [PATCH] - Fix CVE-2026-55717, 'serve-expired-client-timeout' and + 'response-ip' CNAME redirect could lead to a crash. Thanks to Qifan Zhang, + Palo Alto Networks, for the report. In addition, thanks to Xin Wang, + Jiapeng Li, and Jiajia Liu, Northwestern Polytechnical University, for also + reporting this issue. + +(cherry picked from commit 2ce2ca36912644d2dbf97249a41494a9e2500fc3) + +CVE: CVE-2026-55717 +Upstream-Status: Backport [https://github.com/NLnetLabs/unbound/commit/2ce2ca36912644d2dbf97249a41494a9e2500fc3] + +Signed-off-by: Ankur Tyagi +--- + services/localzone.h | 2 +- + services/mesh.c | 15 ++++++++++----- + util/data/packed_rrset.c | 1 + + 3 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/services/localzone.h b/services/localzone.h +index 66102fd98..9ec57e2a1 100644 +--- a/services/localzone.h ++++ b/services/localzone.h +@@ -565,7 +565,7 @@ enum respip_action { + respip_always_nxdomain = local_zone_always_nxdomain, + /** answer with nodata response */ + respip_always_nodata = local_zone_always_nodata, +- /** answer with nodata response */ ++ /** drop query */ + respip_always_deny = local_zone_always_deny, + /** RPZ: truncate answer in order to force switch to tcp */ + respip_truncate = local_zone_truncate, +diff --git a/services/mesh.c b/services/mesh.c +index 6a04bc838..191b1d488 100644 +--- a/services/mesh.c ++++ b/services/mesh.c +@@ -2391,9 +2391,10 @@ apply_respip_action(struct module_qstate* qstate, + + /* xxx_deny actions mean dropping the reply, unless the original reply + * was redirected to response-ip data. */ +- if((actinfo->action == respip_deny || ++ if(actinfo->action == respip_always_deny || ++ ((actinfo->action == respip_deny || + actinfo->action == respip_inform_deny) && +- *encode_repp == rep) ++ *encode_repp == rep)) + *encode_repp = NULL; + + return 1; +@@ -2458,12 +2459,15 @@ mesh_serve_expired_callback(void* arg) + qstate->client_info, &actinfo, msg->rep, &alias_rrset, &encode_rep, + qstate->env->auth_zones)) { + return; +- } else if(partial_rep && +- !respip_merge_cname(partial_rep, &qstate->qinfo, msg->rep, ++ } else if(partial_rep) { ++ if(!respip_merge_cname(partial_rep, &qstate->qinfo, msg->rep, + qstate->client_info, must_validate, &encode_rep, qstate->region, + qstate->env->auth_zones, qstate->env->views, + qstate->env->respip_set)) { +- return; ++ return; ++ } ++ /* merge succeeded; final reply, no further alias pass */ ++ partial_rep = NULL; + } + if(!encode_rep || alias_rrset) { + if(!encode_rep) { +@@ -2474,6 +2478,7 @@ mesh_serve_expired_callback(void* arg) + partial_rep = encode_rep; + } + } ++ msg->rep = encode_rep; + /* We've found a partial reply ending with an + * alias. Replace the lookup qinfo for the + * alias target and lookup the cache again to +diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c +index d18486cc5..720c56ac3 100644 +--- a/util/data/packed_rrset.c ++++ b/util/data/packed_rrset.c +@@ -198,6 +198,7 @@ get_cname_target(struct ub_packed_rrset_key* rrset, uint8_t** dname, + { + struct packed_rrset_data* d; + size_t len; ++ if(!rrset) return; + if(ntohs(rrset->rk.type) != LDNS_RR_TYPE_CNAME && + ntohs(rrset->rk.type) != LDNS_RR_TYPE_DNAME) + return; diff --git a/meta-networking/recipes-support/unbound/unbound_1.24.2.bb b/meta-networking/recipes-support/unbound/unbound_1.24.2.bb index a04080c751..0af51973cd 100644 --- a/meta-networking/recipes-support/unbound/unbound_1.24.2.bb +++ b/meta-networking/recipes-support/unbound/unbound_1.24.2.bb @@ -37,6 +37,7 @@ SRC_URI = "git://github.com/NLnetLabs/unbound.git;protocol=https;branch=master;t file://CVE-2026-52863.patch \ file://CVE-2026-54478.patch \ file://CVE-2026-55708.patch \ + file://CVE-2026-55717.patch \ " SRCREV = "f6269baa605d31859f28770e01a24e3677e5f82c"