Back to Intelligence

PaperCut NG/MF Emergency Patch Bypass: Defending Print Infrastructure Against Active Exploitation

SA
Security Arsenal Team
August 28, 2026
11 min read

PaperCut has shipped a second emergency security update for its PaperCut NG and PaperCut MF print management software after security researchers identified multiple ways to bypass the fixes delivered in the first emergency release. The two underlying vulnerabilities are being actively exploited in the wild, which means organizations that applied the initial patch and stopped there are still exposed — and organizations that haven't patched at all are running a known-exploited, internet-reachable application.

Print management servers are a soft target that defenders consistently underestimate. They sit inside the network perimeter, run with elevated privileges to manage spoolers and queues across the fleet, are frequently reachable from user VLANs and sometimes from the internet, and are almost never onboarded to EDR with the same rigor as domain controllers or endpoints. That combination — privileged position, broad network trust, thin monitoring — is exactly why threat actors are hammering this product line. If you run PaperCut NG or MF anywhere in your environment, treat this as a drop-everything patching event and assume the possibility that exploitation predates your patch.

Technical Analysis

Affected products and platforms

  • PaperCut NG and PaperCut MF print management software
  • Both Windows and Linux application server deployments are affected; the application server component (typically deployed as an on-premises service, commonly exposing web administration and user portals) is the attack surface of concern
  • Exposed services typically listen on TCP 9191 (HTTP) and 9192 (HTTPS) for the admin and user web interfaces

What happened

The vendor released an initial emergency patch for two security flaws that were already being exploited. Researchers subsequently demonstrated multiple bypass techniques against that fix — meaning the first patch did not fully close the vulnerable code paths. PaperCut responded with a second emergency update intended to comprehensively remediate both issues. This patch-bypass pattern is significant for defenders for two reasons:

  1. Patching once was not enough. Any asset inventory or change ticket marked "remediated" against the first emergency release must be reopened and validated against the second update.
  2. Bypass research is public. Once bypass techniques are documented, exploitation tooling adapts within hours to days. The window between "partial fix" and "working exploit against patched systems" collapses quickly.

How exploitation works (defender's view)

Based on the exploitation patterns observed against this product line, the attack chain against PaperCut application servers follows a predictable shape:

  • Initial access: The attacker targets the PaperCut application server's web interface, abusing the flawed components to achieve code execution or configuration manipulation on the server. No valid credentials are required for the exploited paths — this is pre-authentication attack surface, which is what makes internet-exposed instances immediately critical.
  • Execution context: Successful exploitation yields code execution in the context of the PaperCut application service. On Windows this is the pc-app service running the embedded Java application server; on Linux it is the papercut service process. A hallmark indicator of compromise is the PaperCut application server process spawning unexpected child processes — command shells, scripting engines, or download cradles.
  • Post-exploitation: Observed follow-on activity includes webshell or script deployment into PaperCut-served directories, configuration tampering (including abuse of legitimate PaperCut functionality such as print/"device" scripting hooks to execute attacker commands), credential theft from the host, and staging for lateral movement. In prior campaigns against this platform, access was monetized by ransomware affiliates and initial access brokers.

Exploitation status

  • Confirmed active exploitation in the wild — this is not theoretical. The emergency cadence (two out-of-band releases in rapid succession) reflects real attacker pressure.
  • Patch bypass techniques publicly documented by researchers, materially increasing exploit reliability against organizations running only the first fix.
  • Organizations should also check the CISA Known Exploited Vulnerabilities (KEV) catalog for the associated PaperCut entries, as KEV listing drives binding remediation deadlines for federal agencies and is a useful forcing function for private-sector prioritization.

Detection & Response

Patching closes the door going forward; it does nothing for the intruder who walked through it last week. Because these flaws were exploited before and after the first patch, every PaperCut server should be treated as potentially compromised until you have evidence otherwise. The detections below focus on the highest-fidelity, lowest-noise behaviors: the PaperCut service spawning child processes, web content written into PaperCut-served paths, and anomalous network exposure of the management ports.

Sigma

YAML
---
title: PaperCut Application Server Spawning Shell or Scripting Process
id: 3f7a2b1c-9d4e-4a5b-8c6d-2e1f0a9b8c7d
status: experimental
description: Detects the PaperCut NG/MF application server process spawning command shells, scripting engines, or common post-exploitation tooling. This parent-child relationship is a hallmark of remote code execution against the PaperCut service and is extremely rare in legitimate operation.
references:
  - https://www.bleepingcomputer.com/news/security/papercut-releases-second-emergency-patch-for-exploited-flaws/
  - https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/01/15
tags:
  - attack.initial_access
  - attack.t1190
  - attack.execution
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\pc-app.exe'
      - '\pc-app-64.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\certutil.exe'
      - '\curl.exe'
      - '\bitsadmin.exe'
      - '\whoami.exe'
      - '\net.exe'
      - '\nltest.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare; vendor support operations or custom print scripting integrations may spawn cmd.exe. Investigate all hits rather than tuning broadly.
level: high
---
title: PaperCut Application Server Spawning Shell on Linux
id: 8c1d4e5f-2a3b-4c5d-9e6f-7a8b9c0d1e2f
status: experimental
description: Detects the PaperCut NG/MF service process on Linux spawning interactive shells or common post-exploitation interpreters. Indicates likely remote code execution via the PaperCut web application surface.
references:
  - https://www.bleepingcomputer.com/news/security/papercut-releases-second-emergency-patch-for-exploited-flaws/
  - https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/01/15
tags:
  - attack.initial_access
  - attack.t1190
  - attack.execution
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentCommandLine|contains:
      - 'pc-app'
      - 'papercut'
  selection_child:
    Image|endswith:
      - '/sh'
      - '/bash'
      - '/dash'
      - '/zsh'
      - '/python'
      - '/python3'
      - '/perl'
      - '/curl'
      - '/wget'
      - '/nc'
      - '/ncat'
  condition: selection_parent and selection_child
falsepositives:
  - Rare; legitimate print scripting hooks may invoke shells but should be documented and scoped to known scripts.
level: high
---
title: Suspicious File Written to PaperCut Web-Served Directories
id: 5e6f7a8b-1c2d-3e4f-5a6b-7c8d9e0f1a2b
status: experimental
description: Detects executable or script content written into PaperCut NG/MF installation and web-served directories, consistent with webshell or dropped-payload staging following exploitation of the application server.
references:
  - https://www.bleepingcomputer.com/news/security/papercut-releases-second-emergency-patch-for-exploited-flaws/
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/01/15
tags:
  - attack.persistence
  - attack.t1505.003
logsource:
  category: file_event
  product: windows
detection:
  selection_path:
    TargetFilename|contains:
      - '\PaperCut NG\'
      - '\PaperCut MF\'
  selection_ext:
    TargetFilename|endswith:
      - '.jsp'
      - '.jspx'
      - '.aspx'
      - '.php'
      - '.exe'
      - '.dll'
      - '.ps1'
      - '.bat'
  condition: selection_path and selection_ext
falsepositives:
  - PaperCut upgrades and hotfix installations write legitimate files to these paths. Correlate with change windows; execution-type files (.exe, .dll, .ps1) outside an upgrade window are highly suspicious.
level: high

KQL (Microsoft Sentinel / Defender)

KQL — Microsoft Sentinel / Defender
// Hunt: PaperCut application server spawning unexpected child processes (post-exploitation RCE behavior)
// Scope to your PaperCut hosts. Extend TimeGenerated window to cover the period BEFORE patching — compromise may predate remediation.
let Lookback = 30d;
DeviceProcessEvents
| where TimeGenerated > ago(Lookback)
| where InitiatingProcessFileName has_any ("pc-app", "pc-app-64")
   or InitiatingProcessCommandLine has_any ("pc-app", "papercut")
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe",
                      "mshta.exe", "rundll32.exe", "certutil.exe", "curl.exe", "bitsadmin.exe",
                      "whoami.exe", "net.exe", "nltest.exe", "sh", "bash", "python", "python3", "perl", "wget", "nc")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
          FileName, ProcessCommandLine, AccountName, SHA256, ReportId
| order by TimeGenerated desc;

// Companion hunt: inbound connections to PaperCut management ports from unexpected sources
// Useful to find internet-exposed instances and scanning/exploitation attempts. Tune KnownSubnets to your user VLANs.
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where LocalPort in (9191, 9192)
| where ActionType == "InboundConnectionAccepted"
| extend RemoteIPType = iff(ipv4_is_private(RemoteIP), "private", "public")
| summarize ConnectionCount = count(), DistinctRemoteIPs = dcount(RemoteIP),
            FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated),
            RemoteIPs = make_set(RemoteIP, 25)
    by DeviceName, LocalPort, RemoteIPType
| where RemoteIPType == "public" or DistinctRemoteIPs > 50
| order by ConnectionCount desc;

Velociraptor VQL

VQL — Velociraptor
-- Hunt: PaperCut application server child processes across the fleet
-- Deploy as a multi-host hunt against all systems identified as PaperCut NG/MF application servers.
-- Any shell/scripting child of pc-app is a strong post-exploitation signal requiring triage.
SELECT Pid,
       Ppid,
       Name,
       Exe,
       CommandLine,
       Username,
       CreateTime,
       dict(Pid=Ppid).Name AS ParentName,
       dict(Pid=Ppid).Exe AS ParentExe,
       dict(Pid=Ppid).CommandLine AS ParentCommandLine
FROM pslist()
WHERE (ParentExe =~ '(?i)pc-app' OR ParentCommandLine =~ '(?i)papercut|pc-app')
  AND Name =~ '(?i)cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|certutil|curl|bitsadmin|sh$|bash|python|perl|wget|ncat'

Remediation / Verification Script

Run this on each PaperCut application server to confirm the patched build, verify the service state, and capture a quick compromise-assessment snapshot (recent child processes of the PaperCut service and recently modified files in the install directory) for IR review.

PowerShell
# PaperCut NG/MF emergency patch verification and triage snapshot
# Run elevated on each PaperCut application server. Review output before assuming the host is clean.

$ErrorActionPreference = 'SilentlyContinue'
$report = @()

# 1. Identify installed PaperCut product and version
$installRoots = @("$env:ProgramFiles\PaperCut NG", "$env:ProgramFiles\PaperCut MF")
foreach ($root in $installRoots) {
    if (Test-Path $root) {
        $versionFile = Join-Path $root "app\version.txt"
        $ver = if (Test-Path $versionFile) { (Get-Content $versionFile -TotalCount 1).Trim() } else { "version.txt not found - check via admin UI (Options > About)" }
        $report += "[+] Install root : $root"
        $report += "[+] Build version: $ver"
        $report += "[!] ACTION: Compare this build against the SECOND emergency release in the PaperCut security advisory (https://www.papercut.com/kb/Main/SecurityAdvisories). The first emergency patch is insufficient."
    }
}

# 2. Confirm PaperCut application service state
$svc = Get-Service | Where-Object { $_.DisplayName -match 'PaperCut' }
foreach ($s in $svc) { $report += "[+] Service: $($s.Name) - Status: $($s.Status) - StartType: $($s.StartType)" }

# 3. Triage: recent child processes spawned by the PaperCut application process
$pcProcs = Get-CimInstance Win32_Process | Where-Object { $_.Name -match '^pc-app' }
foreach ($p in $pcProcs) {
    $children = Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq $p.ProcessId }
    foreach ($c in $children) {
        if ($c.Name -match 'cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|certutil|curl|bitsadmin|whoami|net\.exe') {
            $report += "[CRITICAL] Suspicious child of pc-app (PID $($p.ProcessId)): $($c.Name) - $($c.CommandLine)"
        } else {
            $report += "[i] Child of pc-app (PID $($p.ProcessId)): $($c.Name)"
        }
    }
}

# 4. Triage: files modified in the last 14 days inside the install directory (webshell/payload staging)
foreach ($root in $installRoots) {
    if (Test-Path $root) {
        $recent = Get-ChildItem $root -Recurse -File -Include *.jsp,*.jspx,*.aspx,*.php,*.exe,*.dll,*.ps1,*.bat |
                  Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-14) }
        foreach ($f in $recent) { $report += "[REVIEW] Recently modified: $($f.FullName) - $($f.LastWriteTime)" }
    }
}

# 5. Check whether management ports are listening and flag exposure
$listeners = Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -in 9191,9192 }
foreach ($l in $listeners) { $report += "[!] Listening on TCP $($l.LocalPort) ($($l.LocalAddress)) - confirm this is firewalled to admin/user subnets only and NOT internet-reachable" }

$report | Out-File "$env:TEMP\papercut-triage.txt"
$report | ForEach-Object { Write-Output $_ }
Write-Output "`nReport written to $env:TEMP\papercut-triage.txt - preserve for IR review if any [CRITICAL] or unexpected [REVIEW] entries appear."

Remediation

  1. Apply the second emergency update immediately — the first emergency patch is bypassable and must not be treated as remediation. Obtain the current fixed build directly from PaperCut's official security advisories page (https://www.papercut.com/kb/Main/SecurityAdvisories) and the vendor's vulnerability bulletin for your product (NG vs. MF). Verify the exact installed build against the advisory — do not rely on "we patched in the change window" attestations.
  2. Treat every server as potentially compromised. Because exploitation was active before and after the first fix, patching alone is not closure. Run the detection content above across a lookback window of at least 30 days. If you find child processes of the PaperCut service, unexpected files in the install tree, or unfamiliar admin/scripting configuration, isolate the host and open a formal IR case.
  3. Audit PaperCut configuration for abuse of legitimate functionality. Review the admin console for unauthorized admin accounts, modified print/device scripts, and changed authentication settings. Attackers have historically abused PaperCut's legitimate scripting hooks for execution — a patched server with a tampered script is still compromised.
  4. Restrict network exposure. Ports 9191/9192 should be reachable only from the subnets that legitimately need them (print users, print admins). No PaperCut management interface should be internet-facing. Enforce this at the perimeter and internal segmentation firewalls, and validate with an external scan — assume your inventory is incomplete until proven otherwise.
  5. Onboard PaperCut servers to EDR and central logging. These are application servers running privileged network services; they should have the same process-creation, file-integrity, and network telemetry as any other tier-1 asset. Sysmon or equivalent process lineage logging is a prerequisite for the Sigma rules above.
  6. Check CISA KEV for associated deadlines. If the relevant PaperCut entries are KEV-listed, federal civilian agencies face binding remediation dates, and the listing is a strong prioritization signal for everyone else.
  7. Institutionalize the lesson: patch verification, not just patch deployment. A bypassed emergency patch is the nightmare scenario for vulnerability management programs — dashboards showed green while the hole stayed open. For critical, actively exploited issues, add a verification step (build check plus exploit-path re-test or vendor confirmation) before closing the ticket.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.