Bug#1146414: trixie-pu: package dnsmasq/2.91-1+deb13u2

Sven Geuer <[email protected]>
Newsgroups gmane.linux.debian.devel.release
Message-ID <f6181b9f2ff0f4ac2ea7104204343ea5ea0e3669.camel__28692.83773923$1788278737$gmane$org@debian.org>
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:dnsmasq
User: [email protected]
Usertags: pu

[ Reason ]
This fixes CVE-2026-12725 and CVE-2026-12969 for trixie. These flaws
have been discovered and fixed upstream in pre-releases of
dnsmasq/2.93, currently in unstable in testing.

[ Impact ]
CVE-2026-12725: A remote attacker able to supply a crafted DNS response
may crash the dnsmasq process, resulting in denial of service.

CVE-2026-12969: A remote attacker controlling a DNS zone can exploit
this via a crafted NXDOMAIN response to cause a 10-byte heap out-of-
bounds read, potentially accessing stale data from prior transactions.

[ Tests ]
In Debian, no tests specific to the affected code have been executed.
However, the changes are cherry-picked from dnsmasq/2.93 which is
already publicly in use. There have been no reports about regressions.

Autopkgtest run successfully locally and on Debusine:
https://debusine.debian.net/debian/developers/work-request/1211374/

[ Risks ]
I consider the risks low as dnsmasq/2.93 is already publicly in use.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in stable
  [x] the issue is verified as fixed in unstable

Sven

-- 
GPG Fingerprint
3DF5 E8AA 43FC 9FDF D086 F195 ADF5 0EDA F8AD D585
dnsmasq_2.91-1+deb13u1_to_2.91-1+deb13u2.debdiff (text/x-patch, 5.9 KB)
diff -Nru dnsmasq-2.91/debian/changelog dnsmasq-2.91/debian/changelog
--- dnsmasq-2.91/debian/changelog	2026-05-02 18:50:46.000000000 +0200
+++ dnsmasq-2.91/debian/changelog	2026-09-01 15:47:50.000000000 +0200
@@ -1,3 +1,11 @@
+dnsmasq (2.91-1+deb13u2) trixie; urgency=medium
+
+  * d/p/*:
+    - CVE-2026-12725.patch: Fix heap-based buffer overflow.
+    - CVE-2026-12969.patch: Fix out-of-bounds read vulnerability.
+
+ -- Sven Geuer <[email protected]>  Tue, 01 Sep 2026 15:47:50 +0200
+
 dnsmasq (2.91-1+deb13u1) trixie-security; urgency=high
 
   * d/p/*:
diff -Nru dnsmasq-2.91/debian/patches/CVE-2026-12725.patch dnsmasq-2.91/debian/patches/CVE-2026-12725.patch
--- dnsmasq-2.91/debian/patches/CVE-2026-12725.patch	1970-01-01 01:00:00.000000000 +0100
+++ dnsmasq-2.91/debian/patches/CVE-2026-12725.patch	2026-09-01 15:47:50.000000000 +0200
@@ -0,0 +1,84 @@
+commit 36d081e37477027fd721fea498f3760f529034ad
+Author: Simon Kelley <[email protected]>
+Date:   Tue Apr 21 22:14:41 2026 +0100
+
+    Fix buffer overlow in log_query()
+    
+    The addition of "(not supported)" to logs of DS and DNSKEY replies
+    overflows the buffer used to construct the string.
+    
+    Re-arrange things to avoid this, and add checks to avoid the same  problem
+    if the logging calls change in the future.
+    
+    Thanks to Yiwei Hou for finding this.
+    
+    The problem exists is DNSSEC is enabled and query logging is also
+    enabled. The overwrite is of bounded length and the bytes
+    written are not in control of an attacker, so this is not considered
+    a likely remote-execution vector.
+
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -2174,7 +2174,7 @@
+     return;
+ 
+   /* build query type string if requested */
+-  if (!(flags & (F_SERVER | F_IPSET)) && type > 0)
++  if (!(flags & (F_SERVER | F_IPSET | F_KEYTAG | F_RR)) && type > 0)
+     arg = querystr(arg, type);
+ 
+   dest = arg;
+@@ -2190,15 +2190,21 @@
+     {
+       dest = daemon->addrbuff;
+ 
+-       if (flags & F_RR)
+-	 {
+-	   if (flags & F_KEYTAG)
+-	     dest = querystr(NULL, addr->rrblock.rrtype);
+-	   else
+-	     dest = querystr(NULL, addr->rrdata.rrtype);
+-	 }
+-       else if (flags & F_KEYTAG)
+-	sprintf(daemon->addrbuff, arg, addr->log.keytag, addr->log.algo, addr->log.digest);
++      if (flags & F_RR)
++	{
++	  if (flags & F_KEYTAG)
++	    dest = querystr(NULL, addr->rrblock.rrtype);
++	  else
++	    dest = querystr(NULL, addr->rrdata.rrtype);
++	}
++#ifdef HAVE_DNSSEC
++      else if (flags & F_KEYTAG)
++	{
++	  snprintf(daemon->addrbuff, ADDRSTRLEN, arg, addr->log.keytag, addr->log.algo, addr->log.digest);
++	  if (type)
++	    extra = " (not supported)";
++	}
++#endif
+       else if (flags & F_RCODE)
+ 	{
+ 	  unsigned int rcode = addr->log.rcode;
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -955,10 +955,7 @@
+ 			   
+ 			   a.log.keytag = keytag;
+ 			   a.log.algo = algo;
+-			   if (algo_digest_name(algo))
+-			     log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %hu, algo %hu", 0);
+-			   else
+-			     log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %hu, algo %hu (not supported)", 0);
++			   log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %hu, algo %hu", !algo_digest_name(algo));
+ 			 }
+ 		     }
+ 				  
+@@ -1084,7 +1081,7 @@
+ 		  a.log.keytag = keytag;
+ 		  a.log.algo = algo;
+ 		  a.log.digest = digest;
+-		  log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS for keytag %hu, algo %hu, digest %hu (not supported)", 0);
++		  log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS for keytag %hu, algo %hu, digest %hu", 1);
+ 		  neg_ttl = ttl;
+ 		} 
+ 	      else if ((key = blockdata_alloc((char*)p, rdlen - 4)))
diff -Nru dnsmasq-2.91/debian/patches/CVE-2026-12969.patch dnsmasq-2.91/debian/patches/CVE-2026-12969.patch
--- dnsmasq-2.91/debian/patches/CVE-2026-12969.patch	1970-01-01 01:00:00.000000000 +0100
+++ dnsmasq-2.91/debian/patches/CVE-2026-12969.patch	2026-09-01 15:47:50.000000000 +0200
@@ -0,0 +1,36 @@
+commit 14094e88beca519c53151184cc4553656672b54f
+Author: do litli <[email protected]>
+Date:   Sat May 9 22:21:18 2026 +0100
+
+    Fix buffer OOB read in find_soa()
+    
+    In find_soa() extract_name() is called with extrabytes=0 when parsing NS
+    record names, which means it only validates that the DNS name fits
+    within the packet but does not check that 10 additional bytes exist for
+    the type/class/TTL/rdlen fixed fields. Lines 546-549 then
+    unconditionally read these 10 bytes via GETSHORT/GETLONG macros. An
+    attacker controlling a DNS zone can craft a NXDOMAIN response where the
+    NS record name extends to the packet boundary, causing a 10-byte
+    out-of-bounds read past the valid packet data (CWE-125, CVSS 5.3
+    Medium). The read stays within the over-allocated packet buffer in
+    default configurations, limiting crash risk, but accesses data outside
+    the logical packet boundary. Under certain conditions, the overread may
+    access stale heap data from prior transactions.
+    
+    The fix is straightforward: change the extrabytes
+    argument from 0 to 10, consistent with other call sites in
+    the same file.
+    
+    Credit is due to do litli for finding this problem.
+
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -533,7 +533,7 @@
+   
+   for (i = 0; i < ntohs(header->nscount); i++)
+     {
+-      if (!extract_name(header, qlen, &p, daemon->workspacename, EXTR_NAME_EXTRACT, 0))
++      if (!extract_name(header, qlen, &p, daemon->workspacename, EXTR_NAME_EXTRACT, 10))
+ 	return 0; /* bad packet */
+       
+       GETSHORT(qtype, p); 
diff -Nru dnsmasq-2.91/debian/patches/series dnsmasq-2.91/debian/patches/series
--- dnsmasq-2.91/debian/patches/series	2026-05-02 18:50:46.000000000 +0200
+++ dnsmasq-2.91/debian/patches/series	2026-09-01 15:47:50.000000000 +0200
@@ -6,3 +6,5 @@
 CVE-2026-4892.patch
 CVE-2026-4893.patch
 CVE-2026-5172.patch
+CVE-2026-12725.patch
+CVE-2026-12969.patch
signature.asc (application/pgp-signature, 854 B)
-----BEGIN PGP SIGNATURE-----

iQJDBAABCgAtFiEEPfXoqkP8n9/QhvGVrfUO2vit1YUFAmqW9xwPHHNnZUBkZWJp
YW4ub3JnAAoJEK31Dtr4rdWF5e8QAKAeOkUau5xscsPJ3ZRK0l7mSurzZPVLJYJJ
tY1qdRjkFvhm6MOdt/yZp6M+xVUMBiDgeLRLS1XVgr50esuCkjIGOnJn88ey8/Xm
XLW8fjrmjSg/pB+YBktjVHK70oeDQhXIsAZOK3TacbwQG0drKLBjEuTkWW4uUW0M
9NsEQzgpggxw7yy+aGDg+4XdAb+I3Ebgt5KHABziSG5gRV8Eww+i3sZXgikF8xgL
GiREy+eArw194TVJ9RTpPVZmIPqAiL0MJ30cbh94pWKPlf43YWDapQsIrBZgQs9w
4wa7lIkOCark24evjZdnwuytQ6cJpj9UdrMQVJQjE0SWWYYefv42g9c3BZKQe/gg
gJbW9biZB1kjvWYHQJ6r8Taxj7dsT5nFaUPfPK+qE81w/Sw7NaZVHCRdT83ihuSC
M2TBQi/PJ8WVnR8PD9yPcXDxcwsO7Ey8RKkuoPB035MOKRuthOLbGyBdrPdw77Af
vVtU7zyYi5vx5PgaFJPiPs3NCpmKdxAp587Bld1sc8vMQatgCPOWPtoaEcWAjHzF
4iLlOVTkiCmrbbxen/IPFsgaBW+gudSaGdZEupyKJNVOZRDu6JGR70KgP59Vb+rR
O/MFVHrqPnb9EYA0sBoEXxhyf45WW+K2mVkxnHOMeilLg6a+ne8EZVx7hrxFShLZ
tLN/WgTj
=fYIl
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.