← Back to Feed CACHED · 2026-07-09 12:05:59 · CACHE_KEY CVE-2026-14544
CVE-2026-14544 · CWE-190 · Disclosed 2026-07-03

A flaw was found in HPLIP

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A malicious print job overflows an integer in HP's Linux driver and drops you into the print spooler's shoes

CVE-2026-14544 is an integer overflow in hpcups, the HPLIP filter binary that CUPS invokes when a print job is routed to an HP printer. A crafted print payload wraps a size calculation, corrupts heap memory, and — with enough work — yields arbitrary code execution *inside the print filter process*. Affected: HPLIP as shipped on RHEL 8, 9, and 10 (RHEL 6/7 unaffected, no upstream patch as of 2026-07-09). This is explicitly an incomplete fix for CVE-2026-8631, so the researcher clearly still has the file open.

The vendor's 9.8 (AV:N/AC:L/PR:N/UI:N) is a paper score. It assumes any attacker on the network can send a print job — which is only true if IPP/631 is reachable *and* the queue accepts jobs from unauthenticated peers. On a hardened enterprise fleet, CUPS binds to localhost, print servers sit inside the LAN, and the blast radius on success is the unprivileged lp account — not root, not domain, not tenant. This is a MEDIUM in practice, not a 9.8.

"Vendor scored this like an internet-facing RCE. In reality it's a print-filter bug that lands you as lp user, if you can even reach a CUPS queue."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Reach a CUPS listener that will accept the job

Attacker needs TCP/631 (IPP) or an mDNS-advertised queue reachable from their position. In default RHEL installs, cupsd listens only on localhost. Enterprise print servers typically restrict Allow lines to internal subnets. Public exposure is a misconfiguration, not the norm.
Conditions required:
  • Network path to cupsd on 631/tcp or an accepting IPP endpoint
  • Queue configured to accept jobs from the attacker's source
Where this breaks in practice:
  • CUPS defaults to localhost-only on RHEL
  • Firewalls block 631/tcp at the edge on 99%+ of enterprises
  • Print servers require domain-authenticated submission in most AD environments
Detection/coverage: Shodan/Censys queries for port:631 show low public exposure. GreyNoise has no dedicated tag as of disclosure. Network scanners (Nessus, Qualys) flag exposed CUPS in existing plugins.
STEP 02

Submit a crafted job routed to an HP queue

The exploit only fires when the job is filtered by hpcups, so the target queue must be backed by an HP printer driver. Attacker submits via ipptool, raw IPP POST, or curl. Non-HP queues do not exercise the vulnerable code path.
Conditions required:
  • Queue exists that invokes hpcups as its filter
  • Attacker can submit a job to that queue
Where this breaks in practice:
  • Sites using PostScript / PPD-generic drivers are unaffected
  • Environments standardized on non-HP hardware never load hpcups
Detection/coverage: CUPS access log (/var/log/cups/access_log) records the submission; auditd on hpcups exec is trivial to add.
STEP 03

Trigger the integer overflow in hpcups

The oversized dimension/length field wraps during heap allocation, causing an undersized buffer followed by an oversized copy. Reliable RCE requires a heap-shaping primitive; a crash-only DoS is trivial. Public PoC is not yet published, but the CVE-2026-8631 delta patch tells researchers exactly where to look.
Conditions required:
  • Crafted print stream that exercises the vulnerable size path
  • Predictable heap layout in the filter process
Where this breaks in practice:
  • glibc heap hardening (tcache, safe-linking on RHEL 9/10)
  • ASLR + non-executable heap
  • Filter processes are short-lived — one-shot exploitation only
Detection/coverage: SELinux cupsd_t / hplip_t domain transitions and AVC denials on unexpected syscalls (execve, connect) from hpcups.
STEP 04

Code execution as user lp

Success drops the attacker into the lp service account. lp cannot read /etc/shadow, cannot write to /etc/, and has no sudo entries in a sane build. From here the attacker needs a second local-privilege-escalation to reach root or valuable data.
Conditions required:
  • Successful RCE from step 3
  • Sufficient time before filter process exits
Where this breaks in practice:
  • lp is a low-privilege account with no meaningful secondary access
  • SELinux hplip_t confines file/network reach
  • Ephemeral process — no persistence hook without another bug
Detection/coverage: EDR agents flag unusual child processes of hpcups. auditd on execve from uid=lp catches it immediately.
STEP 05

Chain to a local privilege escalation

To convert this into a real incident, the attacker must chain a LPE (kernel bug, sudo misconfig, writable systemd unit). Without that, the practical impact tops out at printer-queue tampering and low-signal internal recon.
Conditions required:
  • Presence of a usable LPE on the host
  • Time to execute before the filter process reaps
Where this breaks in practice:
  • Modern RHEL kernels are patched aggressively
  • PAM/sudo hardening in enterprise images
Detection/coverage: Standard LPE detections (falco, EDR behavioral rules).
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed as of 2026-07-09. No incident vendor telemetry, no ransomware crew adoption.
KEV statusNot listed on CISA KEV.
EPSS0.00511 (~0.5%) — bottom quartile of predicted exploitation likelihood.
Public PoCNo public PoC at disclosure. The CVE-2026-8631 patch diff is the natural starting point for reversers.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H → 9.8. AV:N is aspirational; realistic AV is AV:A or AV:L for the ≥99% of installs with cupsd bound to localhost.
AffectedHPLIP on RHEL 8, 9, 10. RHEL 6/7 unaffected. Fedora backports pending. Ubuntu/Debian tracking under their own trackers.
Fixed versionNo upstream HPLIP fix released as of 2026-07-09. This is an incomplete fix for CVE-2026-8631 — a full patch is expected but not shipped.
Exposure dataShodan port:631 country:US returns ~40k hosts globally, most behind auth or in labs. Meaningful enterprise-exposed CUPS printing is well under 1% of installs.
Disclosed2026-07-03 via Red Hat Bugzilla 2496772; NVD published 2026-07-06.
Root cause lineageFollow-on to CVE-2026-8631 — same overflow, incomplete fix. Signals a class of size-validation bugs in hpcups.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.8/10)

The single decisive factor is the collapsed blast radius: successful exploitation lands the attacker in the unprivileged lp service account inside a short-lived filter process, not root and not a domain-relevant identity. Combined with cupsd defaulting to localhost binding and the vulnerable code path only firing on HP-backed queues, the real-world reachable population and post-exploit value are both far below what a 9.8 implies.

HIGH That vendor 9.8 overstates real-world severity
HIGH That the post-exploit ceiling is uid=lp without a chained LPE
MEDIUM That no public PoC lands within 30 days — the CVE-2026-8631 diff shortens the reversing timeline

Why this verdict

  • Reachability collapse: RHEL cupsd defaults bind to localhost. Attacker needs either an on-LAN foothold or a rare misconfigured public CUPS listener. This alone moves the practical AV from N to A/L on ≥99% of the fleet.
  • Payload gating: The overflow only triggers when hpcups is the invoked filter. Sites with no HP printers or standardized on generic PostScript never load the vulnerable code — a wide swath of the affected RHEL population is not actually exploitable.
  • Blast radius floor: Success = lp user in a short-lived filter process. lp has no shadow read, no domain trust, no secret store access, no sudo. Without a second bug, this is a nuisance, not an incident.
  • Role multiplier: Print server / workstation / dev host — none are on the high-value-role catalog (no identity, hypervisor, PAM, backup, kernel-agent, or CI/CD role). The chain does not end in fleet compromise anywhere it lands, so the CRITICAL/HIGH floors from the deployment-role rule do not trigger.
  • Signal state: EPSS 0.00511, no KEV, no public PoC, no in-the-wild reports. All independent signals agree with the downgrade.
  • Counterweight — not lower: No upstream patch exists, this is an incomplete-fix follow-on (meaning researcher attention is active), and internal print servers are a common lateral-movement waypoint. That keeps it above LOW.

Why not higher?

HIGH would require either a plausible chain to root/domain without a second bug, or meaningful public-internet exposure. Neither holds: lp is a dead-end identity and CUPS-on-631 exposure to the internet is a small-single-digit percentage of installs. No KEV, no PoC, no active exploitation.

Why not lower?

LOW would ignore that this is an unauthenticated RCE primitive on a widely deployed Linux package with no patch shipped yet, and that it's the second bug in the same code path — researchers are looking. A committed insider or post-initial-access attacker on an internal print server absolutely can weaponize it as a lateral-movement stepping stone.

05 · Compensating Control

What to do — in priority order.

  1. Bind cupsd to localhost only where remote printing is not required — Edit /etc/cups/cupsd.conf — remove Listen *:631, keep Listen localhost:631. Kills the network attack surface entirely on standalone hosts. No mitigation SLA at MEDIUM, but this is a 1-hour change with zero business impact on non-server hosts — do it this sprint.
  2. Restrict IPP/631 at the network edge and between VLANs — Firewall 631/tcp inbound from untrusted networks and enforce east-west segmentation between user VLANs and print server VLANs. Prevents opportunistic lateral pivot. Target the 365-day noisgate remediation SLA for the segmentation project.
  3. Remove HPLIP where no HP hardware existsdnf remove hplip hplip-common on hosts with no HP printer dependency. Eliminates the vulnerable code path entirely. Verify with rpm -q hplip returning not installed.
  4. Enforce authenticated submission on shared print servers — Set DefaultAuthType Negotiate or Basic in cupsd.conf and require Kerberos/AD auth on all queues. Turns AV:N into PR:L at minimum.
  5. Confirm SELinux enforcing and hplip_t policy loadedgetenforce must return Enforcing; semodule -l | grep hplip must show the policy. SELinux confinement limits what a compromised hpcups can reach post-exploit.
  6. Monitor for anomalous hpcups child processes and network connections — auditd rule: -a always,exit -F arch=b64 -S execve -F auid=lp -k hpcups_child. Any execve from the filter process to sh, bash, curl, wget, nc is exploitation until proven otherwise.
What doesn't work
  • Patching alone — no upstream fix exists yet as of 2026-07-09; you cannot dnf update your way out of this today.
  • Blocking outbound from print servers — the attacker's payload runs in-process; an interactive shell is not required for tampering or staging.
  • Web WAF rules — IPP is not HTTP-application traffic; WAFs on 443 do not see or gate CUPS submissions.
  • Disabling printer sharing in the GUI on workstations — does not remove HPLIP nor guarantee cupsd binding scope; verify via cupsd.conf, not the desktop toggle.
06 · Verification

Crowdsourced verification payload.

Run on each RHEL 8/9/10 host as root (needs to read cupsd.conf and query rpm). Invoke as sudo bash check-cve-2026-14544.sh. Exits 0 for PATCHED/NOT_APPLICABLE, 1 for VULNERABLE, 2 for UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-14544.sh — HPLIP hpcups integer overflow reassessment probe
# Usage: sudo bash check-cve-2026-14544.sh
set -u

STATUS="UNKNOWN"
REASON=""

# 1. Is HPLIP installed?
if ! rpm -q hplip >/dev/null 2>&1; then
  echo "PATCHED (hplip not installed — not applicable)"
  exit 0
fi

HPLIP_VER=$(rpm -q --qf '%{VERSION}-%{RELEASE}\n' hplip 2>/dev/null | head -n1)
RHEL_MAJOR=$(rpm -E %{rhel} 2>/dev/null)

# 2. Is cupsd listening beyond localhost?
CUPS_CONF="/etc/cups/cupsd.conf"
EXPOSED="no"
if [[ -r "$CUPS_CONF" ]]; then
  if grep -Eq '^[[:space:]]*Listen[[:space:]]+(\*|0\.0\.0\.0|[^l#].*):631' "$CUPS_CONF" 2>/dev/null; then
    EXPOSED="yes"
  fi
  if grep -Eq '^[[:space:]]*Port[[:space:]]+631' "$CUPS_CONF" 2>/dev/null; then
    EXPOSED="yes"
  fi
fi

# 3. Any HP-driven queues actually configured?
HP_QUEUES=0
if command -v lpstat >/dev/null 2>&1; then
  HP_QUEUES=$(lpstat -v 2>/dev/null | grep -c -iE 'hp:|hpfax:|hplip')
fi

# 4. Check Red Hat errata — replace with your patched NVR once RH ships the fix
#    Until then, any installed hplip on RHEL 8/9/10 is VULNERABLE by advisory.
case "$RHEL_MAJOR" in
  8|9|10)
    STATUS="VULNERABLE"
    REASON="hplip $HPLIP_VER on RHEL $RHEL_MAJOR — no vendor patch as of 2026-07-09"
    ;;
  6|7)
    STATUS="PATCHED"
    REASON="RHEL $RHEL_MAJOR not affected by CVE-2026-14544"
    ;;
  *)
    STATUS="UNKNOWN"
    REASON="unrecognized RHEL major: $RHEL_MAJOR"
    ;;
esac

echo "$STATUS: $REASON"
echo "  cups_listens_beyond_localhost=$EXPOSED"
echo "  hp_queues_configured=$HP_QUEUES"

case "$STATUS" in
  PATCHED) exit 0 ;;
  VULNERABLE) exit 1 ;;
  *) exit 2 ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
Do not treat this like Log4Shell. Monday morning: run the verification script fleet-wide, dnf remove hplip on every host that has no HP printer dependency, and confirm cupsd.conf binds to localhost on all non-print-server hosts. On dedicated print servers: enforce authenticated IPP and firewall 631/tcp to the internal print VLAN only. Because this is MEDIUM, there is no noisgate mitigation SLA — but the two changes above are hours of work with zero business risk, so do them this sprint anyway. The noisgate remediation SLA is ≤ 365 days: install the Red Hat HPLIP errata within that window once shipped, and re-run the script to confirm. If CISA adds this to KEV or a public PoC drops, the SLA collapses to *hours* — set a watch on the CVE ID and the CVE-2026-8631 patch tree.

Sources

  1. NVD — CVE-2026-14544
  2. MITRE CVE Record — CVE-2026-14544
  3. Cyberpress — HPLIP Integer Overflow Flaw
  4. Red Hat Bugzilla 2496772
  5. Red Hat CVE Portal — CVE-2026-14544
  6. Prior root-cause CVE-2026-8631
  7. CUPS Administrator's Guide — Listen directive
  8. Fedora HPLIP advisory tracker
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.