Someone left the master key in the printer room, and attackers are already inside
CVE-2026-82078 is an unsafe dynamic class-loading flaw in the database connection utilities of PaperCut MF and PaperCut NG. The application instantiates JDBC database driver classes from names stored in configuration without validating them against an allowlist. On its own, exploiting it requires the ability to edit PaperCut's configuration — but when chained with CVE-2026-81578 (CVSS 8.8, an improper access-control bypass in the web management interface), unauthenticated remote attackers can modify that configuration and then trigger the class-loading flaw to execute arbitrary Java bytecode under the PaperCut server process — which runs as SYSTEM on Windows. All versions of PaperCut NG and MF prior to August 27, 2026 are affected across Windows, Linux, and macOS. Emergency patches exist for versions 24, 25, and 26; the 47% of tracked installations still on v23 or earlier have no patch available and must upgrade.
No vendor CVSS baseline was published in a standard authority database at time of assessment. The vendor's own advisory uses the word *urgent* and assigns a 9.4 score internally. That score is fair — arguably even generous to the vendor — because the chain is pre-authentication, actively exploited in the wild as a zero-day, runs as SYSTEM, the first emergency patch was bypassed within 24 hours by watchTowr and Huntress researchers, and nearly half the install base cannot patch without a full version upgrade. This is textbook CRITICAL.
5 steps from start to impact.
Identify internet-facing PaperCut Application Server
- PaperCut Application Server web interface reachable by attacker
- Only ~1,000 instances publicly exposed; most sit behind corporate firewalls
http.title:"PaperCut" or ssl.cert.subject.cn:papercut. Internal asset inventory should flag port 9191/9192.Bypass authentication via CVE-2026-81578
- Network access to PaperCut web management interface
- No WAF rule blocking malformed page-component requests
- A properly configured WAF with request-integrity rules could block the mismatch, but PaperCut-specific signatures were not available until post-disclosure
/app endpoints. Huntress published IOC patterns.Modify database driver configuration
jdbc:derby:memory:pwn. This configuration change is persisted by the PaperCut server.- Successful auth bypass from step 2
- None — the configuration write is the intended outcome of step 2
DB URL: jdbc:derby:memory:pwn or similar unexpected JDBC URL in server.log. Derby boot messages referencing memory:...pwn.Drop and instantiate malicious Java bytecode
.class file via the HTTP request, which is written to the server/lib/ directory. When PaperCut's database connection utility instantiates the configured driver class, it loads the attacker's bytecode from the application classpath and executes it under the PaperCut server process — SYSTEM on Windows, typically papercut service user on Linux.- Malicious .class file lands on the application classpath
- PaperCut server process triggers database connection with poisoned config
- Application-level file-integrity monitoring on
server/lib/could detect the dropped .class file, but this is not standard
.class files in server/lib/ (e.g., Udydn.class, Moo97.class). Process monitoring: pc-app.exe spawning cmd.exe, powershell.exe, or shell utilities.Execute reconnaissance and post-exploitation commands
whoami & ver and whoami & ver & tasklist, executed under SYSTEM context. Output is written to .out files in server/data/content/. Attackers then delete the payload artifacts and truncate logs. From SYSTEM on a domain-joined print server, lateral movement via credential harvesting (LSASS dump, Kerberos ticket theft) or NTLM relay is trivial.- Successful class instantiation from step 4
- EDR on the PaperCut host should detect SYSTEM-context shell spawning from
pc-app.exe - Log deletion may trigger SIEM alerts if forwarding is configured
pc-app.exe → cmd.exe process chain. SIEM alert on missing/truncated server.log. File-integrity alert on .class or .cmd files in PaperCut directories.The supporting signals.
| In-the-Wild Exploitation | YES — confirmed zero-day. Huntress observed exploitation in at least two customer environments as of August 27, 2026. Attackers executed base64-encoded system enumeration commands under SYSTEM. |
|---|---|
| Proof-of-Concept | Full chain reproduced by watchTowr (Jake Knott) and Huntress (John Hammond, Andrew Brandt). Multiple patch bypasses identified and reported. Public exploit details available. |
| EPSS Score | Not yet scored by FIRST (CVE disclosed <48 hours ago). Given active exploitation, probability of exploitation is effectively 1.0. |
| KEV Status | Not yet listed on CISA KEV as of 2026-08-29. Listing is expected imminently given confirmed in-the-wild exploitation. |
| CVSS Vector | Vendor internal score: 9.4 (Critical). For the chained pre-auth RCE: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L — network-accessible, no privileges, no user interaction, high confidentiality and integrity impact. |
| Affected Versions | All versions of PaperCut NG and MF prior to Emergency Patch Release 2 (Aug 28, 2026). Confirmed vulnerable: v24.x, v25.x, v26.x. 47% of tracked installs run v23 or older with no patch available — upgrade required. |
| Fixed Versions | Emergency Patch Release 2 (Aug 28): NG 25.0.12.76497, MF 25.0.12.76496. Patches available for v24, v25, v26 on Windows/Linux/macOS. No patch for v23 or earlier — full upgrade required. |
| Exposure Data | ~1,000 internet-facing instances per ShadowServer Foundation, majority in North America and Europe. PaperCut claims 100M+ users across 100,000+ organizations globally. |
| Disclosure Date | 2026-08-27 (initial advisory), 2026-08-28 (CVE identifiers assigned, Emergency Patch Release 2) |
| Reporting Researchers | Huntress (John Hammond, Andrew Brandt) — first to observe in-the-wild exploitation. watchTowr (Jake Knott) — reproduced chain, discovered patch bypasses. Coordinated with PaperCut's internal security team. |
noisgate verdict.
The single most decisive factor is active zero-day exploitation of a pre-authentication RCE chain that runs as SYSTEM, with the first patch already bypassed and nearly half the install base unable to patch without a major version upgrade. No friction point in the attack path meaningfully narrows the reachable population once an attacker has network access to the PaperCut web interface.
Why this verdict
- Active zero-day exploitation: Huntress confirmed attacks in customer environments before any patch existed. Attackers are already using this chain operationally — this is not theoretical.
- Pre-authentication RCE to SYSTEM: The chain requires zero credentials and zero user interaction. Any host that can reach PaperCut's web interface (port 9191/9192) can execute arbitrary code as SYSTEM. The attack surface is the network, not an authenticated session.
- Patch instability: The first emergency patch was bypassed within 24 hours by watchTowr researchers, and 47% of the install base runs versions (v23 and older) for which no patch exists at all — only a full version upgrade resolves the issue.
- Role multiplier: PaperCut Application Servers are typically domain-joined Windows servers running as SYSTEM. SYSTEM on a domain-joined host yields machine account credentials, enabling NTLM relay, Kerberos ticket harvesting, and lateral movement. In environments where PaperCut integrates with Active Directory for user/group sync (the default configuration), the server often holds or can request elevated directory credentials. The blast radius extends from host → domain, making this a fleet-compromise vector in typical enterprise deployments. This is not a workstation-class target — it is a centralized server managing print infrastructure for the entire organization.
- Exposure surface is meaningful: ~1,000 internet-facing instances per ShadowServer, and virtually every enterprise deployment is reachable from the internal LAN. Internal attacker position (post-phish, post-VPN) trivially reaches PaperCut.
Why not higher?
There is no severity above CRITICAL. A 9.4 score already reflects the maximum practical severity bucket. The only reason this is not a 10.0 is that the Availability impact in the chained scenario is partial rather than total — the server continues running while executing attacker payloads.
Why not lower?
Downgrading below CRITICAL is not defensible. The chain is pre-auth, actively exploited, runs as SYSTEM, affects all versions, the first patch was bypassed, and the target is a centralized domain-joined server. Every friction-based argument (only ~1,000 internet-facing) is negated by the fact that internal network access trivially reaches the target, and attackers are already demonstrating operational use. The role multiplier (domain-joined SYSTEM server) floors this at CRITICAL.
What to do — in priority order.
- Block external access to PaperCut ports 9191/9192 immediately — Restrict PaperCut Application Server web interface to trusted internal IP ranges using firewall rules. This eliminates the internet-facing attack surface for the ~1,000 exposed instances. Deploy within the noisgate mitigation SLA of 3 days — but given active exploitation, do this today.
- Restrict internal access to PaperCut admin interface to admin workstations only — Even behind the firewall, limit access to ports 9191/9192 to a small set of administrator source IPs via host firewall or network ACL. This reduces the internal attack surface from 'any LAN host' to a handful of jump boxes. Deploy within 3 days.
- Deploy EDR detection rule for pc-app.exe spawning shell processes — Create a high-fidelity EDR rule alerting on
pc-app.exe(Windows) or thepapercutprocess (Linux) spawningcmd.exe,powershell.exe,bash,sh, or any child process. This detects post-exploitation even if the vulnerability is successfully exploited. Deploy within 3 days. - Enable file-integrity monitoring on PaperCut server/lib/ directory — Monitor for creation of unexpected
.classfiles in the PaperCutserver/lib/directory. The attack chain requires dropping a malicious.classfile here. FIM alerts provide near-real-time detection of exploitation attempts. - Forward PaperCut server.log to SIEM and alert on gaps — Attackers delete or truncate
server.logpost-exploitation. Forwarding logs to a SIEM ensures you retain evidence and can alert on log deletion or gaps. Look forjdbc:derby:memory:pwnorNo suitable driver found for jdbc:no:xentries.
- Application-layer WAF rules alone — the auth bypass in CVE-2026-81578 exploits internal page-component logic that generic WAF signatures cannot reliably distinguish from legitimate traffic without PaperCut-specific rules that did not exist pre-disclosure.
- Disabling the PaperCut web interface — the web management interface is required for PaperCut to function; disabling it breaks print management entirely and is equivalent to taking the service offline.
- Patching to Emergency Patch Release 1 — the first patch (released Aug 27) was bypassed by watchTowr within 24 hours. Only Emergency Patch Release 2 (Aug 28) addresses the known bypasses. Verify you are on Release 2.
Crowdsourced verification payload.
Run this on each PaperCut Application Server host (Windows). Execute as Administrator in PowerShell. Example: .\Check-PaperCutCVE202682078.ps1. The script checks the installed PaperCut version against known-patched build numbers and inspects for IOCs.
#Requires -RunAsAdministrator
# Check-PaperCutCVE202682078.ps1
# Checks PaperCut NG/MF for CVE-2026-82078 vulnerability and IOCs
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN
$ErrorActionPreference = 'SilentlyContinue'
$status = 'UNKNOWN'
$exitCode = 2
$findings = @()
# Locate PaperCut installation
$pcPaths = @(
'C:\Program Files\PaperCut MF',
'C:\Program Files\PaperCut NG',
'C:\Program Files (x86)\PaperCut MF',
'C:\Program Files (x86)\PaperCut NG'
)
$installPath = $null
foreach ($p in $pcPaths) {
if (Test-Path $p) { $installPath = $p; break }
}
if (-not $installPath) {
Write-Host 'PaperCut installation not found on this host.'
Write-Host 'UNKNOWN'
exit 2
}
Write-Host "PaperCut found at: $installPath"
# Check version from version.txt or build.txt
$versionFile = Join-Path $installPath 'server\version.txt'
$buildFile = Join-Path $installPath 'server\build.txt'
$version = $null
if (Test-Path $versionFile) {
$version = (Get-Content $versionFile -Raw).Trim()
Write-Host "Version: $version"
}
if (Test-Path $buildFile) {
$build = (Get-Content $buildFile -Raw).Trim()
Write-Host "Build: $build"
}
# Known patched builds (Emergency Patch Release 2, Aug 28 2026)
$patchedBuilds = @(76496, 76497)
if ($build) {
$buildNum = [int]($build -replace '[^0-9]', '')
if ($buildNum -ge 76496) {
$status = 'PATCHED'
$exitCode = 0
$findings += "Build $buildNum is at or above Emergency Patch Release 2."
} else {
$status = 'VULNERABLE'
$exitCode = 1
$findings += "Build $buildNum is BELOW Emergency Patch Release 2 (76496+)."
}
} elseif ($version) {
# Try to parse major version
$major = [int]($version.Split('.')[0])
if ($major -le 23) {
$status = 'VULNERABLE'
$exitCode = 1
$findings += "Version $major has NO patch available. Upgrade required."
} else {
$findings += "Version $version detected but build number unavailable. Manual verification needed."
}
}
# Check for IOCs
$libPath = Join-Path $installPath 'server\lib'
$dataPath = Join-Path $installPath 'server\data\content'
# Suspicious .class files in server/lib
if (Test-Path $libPath) {
$suspiciousClass = Get-ChildItem $libPath -Filter '*.class' -ErrorAction SilentlyContinue |
Where-Object { $_.Name -notmatch '^(org|com|net|java)' }
if ($suspiciousClass) {
$status = 'VULNERABLE'
$exitCode = 1
$findings += "IOC: Suspicious .class files in server/lib: $($suspiciousClass.Name -join ', ')"
}
}
# Suspicious .cmd/.out files in data/content
if (Test-Path $dataPath) {
$suspiciousFiles = Get-ChildItem $dataPath -Include '*.cmd','*.out' -Recurse -ErrorAction SilentlyContinue
if ($suspiciousFiles) {
$findings += "IOC: Suspicious files in data/content: $($suspiciousFiles.Name -join ', ')"
}
}
# Check server.log for exploitation indicators
$logPath = Join-Path $installPath 'server\logs\server.log'
if (Test-Path $logPath) {
$logContent = Get-Content $logPath -Raw -ErrorAction SilentlyContinue
if ($logContent -match 'jdbc:derby:memory:pwn|No suitable driver found for jdbc:no:x|Database error looking up cardID: VALUES CAST') {
$status = 'VULNERABLE'
$exitCode = 1
$findings += 'IOC: Exploitation indicators found in server.log!'
}
} else {
$findings += 'WARNING: server.log missing or inaccessible (possible post-exploitation log deletion).'
}
Write-Host ''
Write-Host '--- Findings ---'
foreach ($f in $findings) { Write-Host " $f" }
Write-Host ''
Write-Host $status
exit $exitCodeIf you remember one thing.
.class files in server/lib/, Derby memory references in server.log, and pc-app.exe spawning shell processes. The noisgate remediation SLA for CRITICAL is ≤90 days, but given confirmed zero-day exploitation, treat full patching as an immediate priority — your target is complete rollout within one week, not 90 days.Sources
- Huntress — PaperCut Zero-Day Active Exploitation Analysis
- BleepingComputer — PaperCut Releases Second Emergency Patch
- The Hacker News — Attackers Chain Two PaperCut Flaws
- PaperCut — Urgent Security Advisory (27 Aug 2026)
- Help Net Security — PaperCut NG/MF Zero-Day Attacks
- SC Media — PaperCut Emergency Patches for Critical Vulnerability
- CWE-470: Unsafe Reflection — MITRE
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.