Package: cups
Version: 2.4.16-1.1 (Modified)
Severity: grave
Tags: security patch
X-Debbugs-Cc: [email protected], Debian Security Team 
<[email protected]>

Hi security team,

I have backported and verified the fixes for CVE-2026-34980 and CVE-2026-34990 
in CUPS 2.4.16. 

These patches address two security issues:
1. CVE-2026-34980: Prevents newline injection in the 'page-border' attribute 
   which could lead to malicious PPD modification.
2. CVE-2026-34990: Blocks unauthorized file-uri schemes in 
   CUPS-Create-Local-Printer.. preventing local privilege escalation (LPE).

Testing:
- Verified CVE-2026-34990 fix: Attempted file-uri bypass now returns 
  IPP_STATUS_ERROR_FORBIDDEN.
- Verified CVE-2026-34980 fix: Injected attributes are correctly sanitized, 
  returning IPP_STATUS_ERROR_BAD_REQUEST and preventing PPD poisoning.

The attached patch is in the standard debian/patches format.

--

The proofs of concept (PoCs) are available on GHSA:

https://github.com/OpenPrinting/cups/security/advisories/GHSA-4852-v58g-6cwf

/

https://github.com/OpenPrinting/cups/security/advisories/GHSA-c54j-2vqw-wpwp


-- System Information:
Debian Release: forky/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.19.10+deb14-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=es_CL.UTF-8, LC_CTYPE=es_CL.UTF-8 (charmap=UTF-8), 
LANGUAGE=es_CL:es
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages cups depends on:
hi  cups-client            2.4.16-1.1
hi  cups-common            2.4.16-1.1
ii  cups-core-drivers      2.4.16-1.1
hi  cups-daemon            2.4.16-1.1
ii  cups-filters           1.28.17-7
ii  cups-ppdc              2.4.16-1.1
ii  cups-server-common     2.4.16-1.1
ii  debconf [debconf-2.0]  1.5.92
ii  ghostscript            10.07.0~dfsg-2
ii  libavahi-client3       0.8-18
ii  libavahi-common3       0.8-18
ii  libc6                  2.42-14
hi  libcups2t64            2.4.16-1.1
ii  libgcc-s1              16-20260322-1
ii  libstdc++6             16-20260322-1
ii  libusb-1.0-0           2:1.0.29-2+b1
ii  poppler-utils          25.03.0-11.1+b1
ii  procps                 2:4.0.4-9+b1

Versions of packages cups recommends:
ii  avahi-daemon  0.8-18
ii  colord        1.4.8-3

Versions of packages cups suggests:
ii  cups-bsd                                   2.4.16-1.1
pn  cups-pdf                                   <none>
pn  foomatic-db-compressed-ppds | foomatic-db  <none>
pn  smbclient                                  <none>
ii  udev                                       260.1-1

-- debconf information:
  cupsys/backend: lpd, socket, usb, snmp, dnssd
  cupsys/raw-print: true
Description: Fix PPD injection (CVE-2026-34980) and LPE via file-uri bypass
 This patch prevents command injection via the page-border attribute
 and blocks unauthorized file overwrites as root via CUPS-Create-Local-Printer.
Author: Benjamin Alonso Leon Dubos <[email protected]>
Origin: vendor
Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2026-34980 and 
https://security-tracker.debian.org/tracker/CVE-2026-34990
Forwarded: no
Last-Update: 2026-04-04
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -1208,6 +1208,28 @@
     return (NULL);
   }
 
+/*
+   * CVE-2026-34980: Sanitize page-border attribute to prevent newline 
injection
+   */
+
+  if ((attr = ippFindAttribute(con->request, "page-border", IPP_TAG_TEXT)) != 
NULL)
+  {
+    const char *val = ippGetString(attr, 0, NULL);
+    if (val)
+    {
+      const char *p;
+      for (p = val; *p; p++)
+      {
+        if (*p < ' ' || *p == 0x7f) 
+        {
+          cupsdLogMessage(CUPSD_LOG_ERROR, "[Job ?] Invalid characters in 
page-border attribute.");
+          send_ipp_status(con, IPP_STATUS_ERROR_BAD_REQUEST, _("Invalid 
page-border value."));
+          return (NULL);
+        }
+      }
+    }
+  }
+
  /*
   * Check policy...
   */
@@ -5686,6 +5708,20 @@
     return;
   }
 
+ /*
+ * CVE-2026: Security lock for file:/// schemes
+ * Prevents a local user from using CUPS to write to system files (such as 
/etc/sudoers).
+ */
+
+if (!strncmp(ptr, "file:", 5) &&
+      strcmp(ptr, "file:/dev/null") &&
+      !FileDevice)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Denying CUPS-Create-Local-Printer with 
file: URI (%s).", ptr);
+    send_ipp_status(con, IPP_STATUS_ERROR_FORBIDDEN, _("Direct file printing 
is disabled (FileDevice)."));
+    return;
+  }
+
   printer_geo_location = ippFindAttribute(con->request, 
"printer-geo-location", IPP_TAG_URI);
   printer_info         = ippFindAttribute(con->request, "printer-info", 
IPP_TAG_TEXT);
   printer_location     = ippFindAttribute(con->request, "printer-location", 
IPP_TAG_TEXT);

Reply via email to