PaperCut NG and MF Pre-Auth RCE Exploitation
An unauthenticated intruder has exploited PaperCut NG/MF authorization bypass and unsafe class loading to execute arbitrary Java bytecode, profiled the system, and deleted server logs to hide their activities.
Based on research by Huntress 2026-09-20 12 steps · 5 queries T1033 T1057 T1070.004 T1082 T1106 T1190 T1203
Brief
Why Now
Recent reporting from Huntress in PaperCut Zero-Day: Active Exploitation and Pre-Auth RCE details an unauthenticated remote code execution (RCE) vulnerability in PaperCut NG and MF. Attackers currently exploit this vulnerability to bypass authorization, execute arbitrary code, and drop malicious payloads. This hunt provides a structured playbook to identify these compromises across your environment.
How the Hunt Flows
The first step defines the scope. A query against software inventory lists every host running PaperCut NG or MF. This limits the subsequent, more intensive queries to the relevant attack surface and reduces noise.
Next, the hunt gathers evidence of initial access. We look for rare HTTP requests targeting administrative paths like /app or /admin that suggest an authorization bypass. Simultaneously, we search for the creation of unexpected Java .class files in the PaperCut library or content directories, specifically focusing on the five-character filenames observed in the wild.
An analyst then evaluates these early indicators. If a host shows both suspicious web traffic and new Java files in the application folders, the hunt pivots to find evidence of successful RCE. We look for the PaperCut application process or its Java children spawning discovery tools such as whoami, tasklist, or ver.
Finally, the hunt monitors for anti-forensic cleanup. We search for the deletion of the server.log file, which is a specific tactic used by attackers to remove traces of the RCE payload. The presence of both system profiling and log deletion on a vulnerable host confirms a high-confidence intrusion.
Blind Spots
This hunt relies on file and process side effects. We cannot see the specific malicious JDBC connection strings because we do not ingest the internal content of PaperCut application logs. Additionally, legacy print servers may lack full EDR enrollment, which would make the post-exploitation child processes invisible to our queries.
Steps
-
Identify PaperCut application servers
Query · scopingDefine the hunt scope by identifying hosts where PaperCut NG or MF is installed.
reads hb_software_inventorysqlSELECT device_hostname, package_name, package_version, install_path FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%papercut ng%' OR LOWER(package_name) LIKE '%papercut mf%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)What a hit looks like. A list of hosts running the target software; silence confirms no vulnerable assets are in scope.
-
Detect unauthenticated admin access
Query · baselineIdentify rare HTTP requests targeting administrative paths that may indicate an authorization bypass.
reads hb_http_activitysqlSELECT device_hostname, url_path, src_endpoint_ip, COUNT(*) AS request_count, MIN(time) AS first_seen FROM hb_http_activity WHERE (instr(',' || '{{admin_paths}}' || ',', ',' || LOWER(url_path) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, url_path, src_endpoint_ip HAVING request_count < 100What a hit looks like. Low-frequency requests to sensitive paths from unusual source IPs.
-
Search for malicious Java class files
Query · enrichmentFind attacker-controlled .class files in the PaperCut server library or content directories.
reads hb_file_activitysqlSELECT device_hostname, file_name, file_path, activity_name, time FROM hb_file_activity WHERE (instr(',' || '{{malicious_filenames}}' || ',', ',' || LOWER(file_name) || ',') > 0 OR (LOWER(file_path) LIKE '%server\lib\%.class' AND activity_id = 1)) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)What a hit looks like. Creation of Java files in the application lib folder or files matching specific five-character IOC names.
-
Evaluate early-stage indicators
Agent triageCorrelate identified software presence with suspicious HTTP requests and file creations to confirm the first phase of exploitation.
-
Hunt for RCE discovery behavior
Query · detection candidateIdentify system discovery commands executed by the PaperCut Application Server process or its Java children.
reads hb_process_activitysqlSELECT device_hostname, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%pc-app.exe%' OR LOWER(parent_process_name) LIKE '%java.exe%') AND (instr(',' || '{{discovery_filenames}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)What a hit looks like. Child processes of the PaperCut server running profiling tools like whoami, ver, or tasklist.
-
Monitor for anti-forensic cleanup
Query · enrichmentDetect the deletion of the PaperCut server log, a specific tactic used by attackers to hide the RCE payload.
reads hb_file_activitysqlSELECT device_hostname, file_name, file_path, process_name, activity_name, time FROM hb_file_activity WHERE LOWER(file_name) = 'server.log' AND activity_id = 4 AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)What a hit looks like. The deletion of server.log following suspicious process activity on the same PaperCut server.
-
Evaluate full exploitation chain
Agent triageSynthesize early access signals with follow-on RCE behavior and cleanup to confirm a successful intrusion.
-
Route on verdict
DecisionDirect the hunt results to response or manual review based on the synthesized verdict.
-
Isolate host
Response actionPrevent lateral movement and further data theft from confirmed compromised PaperCut servers.
-
Manual forensics
Analyst taskAnalyze logs and on-disk artifacts for deeper indicators of compromise.
-
Close out
Analyst taskEnsure the environment is patched and secure after the hunt.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| Web Authorization Bypass T1190 |
Yes | suspicious-http-activity |
| RCE via Java Dynamic Class Loading T1203 · T1106 |
Yes | malicious-file-drops |
| Post-Exploitation Discovery T1033 · T1082 · T1057 |
Yes | rce-discovery-behavior |
| Anti-Forensic Log Deletion T1070.004 |
Yes | log-deletion-events |
| Vulnerable Asset Identification T1190 |
Out of scope | Belongs to another part of the 'PaperCut Zero-Day: Active Exploitation and Pre-Auth RCE' series. |
Blind spots
- Needs hb_log_activity with PaperCut server.log content. Without direct log content, we must rely on file and process side effects, potentially missing exploit attempts that do not result in a file drop. It would answer Can we see the specific malicious JDBC connection string?. Remediation: Ingest PaperCut application logs into the central security data lake.
- Needs EDR process tracking on all servers. Legacy print servers may lack full EDR enrollment, rendering RCE discovery commands invisible. It would answer Are child processes of pc-app.exe visible on all hosts?. Remediation: Audit and enforce EDR enrollment for all servers hosting print management software.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
admin_paths | list[string] | /app, /admin, /setup | Sensitive administrative web paths targeted during bypass attempts. |
discovery_filenames | list[string] | whoami.exe, ver.exe, tasklist.exe, charmap.exe, cmd.exe | Standard discovery tool filenames to match against child processes. |
lookback_days | number | 14 | Days of history to examine. |
malicious_filenames | list[path] | udydn.class, moo97.class, udydn.out, udydn.cmd | Malicious filenames observed in PaperCut exploitation. |
scope_hosts | list[host] | — | Optional list of hostnames to focus the hunt; leave empty for fleet-wide. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Web server / proxy logs | siem | network |
Source
---
analysis: A simple detection rule may alert on pc-app.exe spawning cmd.exe, but this
hunt correlates the initial HTTP bypass, Java class drops, and anti-forensic cleanup
into a multi-phased verdict to distinguish intrusions from legitimate maintenance.
blind_spots:
- id: no-application-log-content
owner: platform-team
question: Can we see the specific malicious JDBC connection string?
remediation: Ingest PaperCut application logs into the central security data lake.
requires: hb_log_activity with PaperCut server.log content
risk: Without direct log content, we must rely on file and process side effects,
potentially missing exploit attempts that do not result in a file drop.
stage: rce-java-class-loading
- id: no-process-visibility
owner: endpoint-team
question: Are child processes of pc-app.exe visible on all hosts?
remediation: Audit and enforce EDR enrollment for all servers hosting print management
software.
requires: EDR process tracking on all servers
risk: Legacy print servers may lack full EDR enrollment, rendering RCE discovery
commands invisible.
stage: post-exploitation-discovery
coverage:
- stage: web-authorization-bypass
status: covered
steps:
- suspicious-http-activity
- stage: rce-java-class-loading
status: covered
steps:
- malicious-file-drops
- stage: post-exploitation-discovery
status: covered
steps:
- rce-discovery-behavior
- stage: defense-evasion-cleanup
status: covered
steps:
- log-deletion-events
- reason: 'Belongs to another part of the ''PaperCut Zero-Day: Active Exploitation
and Pre-Auth RCE'' series.'
stage: vulnerable-asset-identification
status: out_of_scope
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: promote-to-detection
justification: Pre-auth RCE in print management software allows unauthenticated
attackers to obtain SYSTEM privileges; identifying exploited servers is critical
to preventing environment-wide compromise.
methodology: model-assisted
trigger: intel-report
hypothesis: An unauthenticated intruder has exploited PaperCut NG/MF authorization
bypass and unsafe class loading to execute arbitrary Java bytecode, profiled the
system, and deleted server logs to hide their activities.
labels:
- hunt
- attack.t1190
- attack.t1203
- attack.t1106
- attack.t1033
- attack.t1082
- attack.t1057
- attack.t1070.004
name: PaperCut NG and MF Pre-Auth RCE Exploitation
parameters:
admin_paths:
default:
- /app
- /admin
- /setup
description: Sensitive administrative web paths targeted during bypass attempts.
from:
kind: article
observed: '2026-08-28'
ref: huntress-papercut-rce
type: list[string]
discovery_filenames:
default:
- whoami.exe
- ver.exe
- tasklist.exe
- charmap.exe
- cmd.exe
description: Standard discovery tool filenames to match against child processes.
from:
kind: article
observed: '2026-08-28'
ref: huntress-papercut-rce
type: list[string]
lookback_days:
default: '14'
description: Days of history to examine.
from:
kind: manual
observed: '2026-08-28'
ref: standard-policy
type: number
malicious_filenames:
default:
- udydn.class
- moo97.class
- udydn.out
- udydn.cmd
description: Malicious filenames observed in PaperCut exploitation.
from:
kind: article
observed: '2026-08-28'
ref: huntress-papercut-rce
type: list[path]
scope_hosts:
default: []
description: Optional list of hostnames to focus the hunt; leave empty for fleet-wide.
from:
kind: manual
observed: '2026-08-28'
ref: analyst-scoping
type: list[host]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.huntress.com/blog/papercut-actively-exploited
gates:
- dry-run
- lint
- critic
model: hb_google/gemini-3-flash-preview
rationale: Start with servers identified in hb_software_inventory as PaperCut NG or
MF. Prioritize those identified as internet-exposed via hb_exposed_assets.
references:
- name: "Huntress \u2014 PaperCut Zero-Day: Active Exploitation and Pre-Auth RCE"
url: https://www.huntress.com/blog/papercut-actively-exploited
related:
- hunt: vulnerable-papercut-identification
reason: This hunt focuses on active exploitation behavior; version identification
is a pure hygiene task.
relation: out-of-scope-alternative
scenario:
stages:
- name: Vulnerable Asset Identification
observables:
- PaperCut NG versions prior to 25.0.12.76497
- PaperCut MF versions prior to 25.0.12.76496
- PaperCut versions prior to 24.1.5.71847
- Internet exposure of PaperCut Management Interface on port 9191 or 9192
- CVE-2026-81578
- CVE-2026-82078
slug: vulnerable-asset-identification
tactic: initial-access
techniques:
- T1190
- name: Web Authorization Bypass
observables:
- Unauthenticated HTTP requests targeting administrative components
- Specifically crafted HTTP requests with mismatched rendering and action pages
slug: web-authorization-bypass
tactic: initial-access
techniques:
- T1190
- name: RCE via Java Dynamic Class Loading
observables:
- jdbc:derby:memory:pwn in connection strings
- Creation of Udydn.class in server/lib/
- Creation of Moo97.class in server/lib/
- Creation of Udydn.cmd or Udydn.out in server/data/content/
- Java bytecode execution under the PaperCut server process security context
slug: rce-java-class-loading
tactic: execution
techniques:
- T1203
- T1106
- name: Post-Exploitation Discovery
observables:
- pc-app.exe spawning cmd.exe
- Execution of 'whoami & ver'
- Execution of 'whoami & ver & tasklist'
- pc-app.exe spawning charmap.exe
- Directory listings and system profiling
slug: post-exploitation-discovery
tactic: discovery
techniques:
- T1033
- T1082
- T1057
- name: Anti-Forensic Log Deletion
observables:
- Unexpected deletion or truncation of server.log
- Deletion of Udydn.out after execution
- Self-deletion of malicious .class files from server/lib/
slug: defense-evasion-cleanup
tactic: defense-evasion
techniques:
- T1070.004
summary: Attackers are exploiting a pre-authentication remote code execution (RCE)
chain in PaperCut NG and MF (CVE-2026-81578 and CVE-2026-82078) by bypassing web
management authorization to modify system configurations. This vulnerability enables
the loading of malicious Java bytecode via unsafe database connection strings,
followed by system profiling discovery commands and anti-forensic file cleanup.
series:
index: 2
slug: papercut-zero-day-active-exploitation-and-pre-auth-rce
title: 'PaperCut Zero-Day: Active Exploitation and Pre-Auth RCE'
total: 2
severity: high
targets:
analyst:
name: Tier-2 analyst
role: analyst
endpoint:
category: endpoint
name: Endpoint telemetry (hb_ surfaces)
telemetry:
- endpoint
hunter:
agent: true
name: Hunt agent
web:
category: siem
name: Web server / proxy logs
telemetry:
- network
tlp: clear
type: investigation
---
# PaperCut NG and MF Pre-Auth RCE Exploitation
This hunt identifies active exploitation of PaperCut NG and MF Application Servers. It tracks the attack chain from the initial web authorization bypass and malicious file drops to the subsequent remote code execution and anti-forensic cleanup. Using a phased flow, we establish the presence of vulnerable assets and initial access artifacts before hunting for high-confidence indicators of post-exploitation profiling and log tampering.
## identify-papercut-hosts
<!-- Identify PaperCut application servers -->
Define the hunt scope by identifying hosts where PaperCut NG or MF is installed.
```sqlite target=endpoint role=scoping params=(scope_hosts=scope_hosts)
~~~yaml
expected: A list of hosts running the target software; silence confirms no vulnerable
assets are in scope.
reads:
- device_hostname
- package_name
- package_version
- install_path
silence: evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, package_name, package_version, install_path FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%papercut ng%' OR LOWER(package_name) LIKE '%papercut mf%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```
## initial-access-gathering
<!-- Gather initial access evidence -->
parallel:
- → suspicious-http-activity
- → malicious-file-drops
join: → evaluate-initial-access
## suspicious-http-activity
<!-- Detect unauthenticated admin access -->
Identify rare HTTP requests targeting administrative paths that may indicate an authorization bypass.
```sqlite target=web role=baseline params=(admin_paths=admin_paths, lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: Low-frequency requests to sensitive paths from unusual source IPs.
prevalence:
by: src_endpoint_ip
key:
- url_path
rare_below: 5
reads:
- device_hostname
- url_path
- src_endpoint_ip
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, url_path, src_endpoint_ip, COUNT(*) AS request_count, MIN(time) AS first_seen FROM hb_http_activity WHERE (instr(',' || '{{admin_paths}}' || ',', ',' || LOWER(url_path) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, url_path, src_endpoint_ip HAVING request_count < 100
```
## malicious-file-drops
<!-- Search for malicious Java class files -->
Find attacker-controlled .class files in the PaperCut server library or content directories.
```sqlite target=endpoint role=enrichment params=(malicious_filenames=malicious_filenames, lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Creation of Java files in the application lib folder or files matching specific
five-character IOC names.
reads:
- device_hostname
- file_name
- file_path
- activity_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, file_name, file_path, activity_name, time FROM hb_file_activity WHERE (instr(',' || '{{malicious_filenames}}' || ',', ',' || LOWER(file_name) || ',') > 0 OR (LOWER(file_path) LIKE '%server\lib\%.class' AND activity_id = 1)) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```
## evaluate-initial-access
<!-- Evaluate early-stage indicators -->
```agent target=hunter
cite: required
context:
- identify-papercut-hosts
- suspicious-http-activity
- malicious-file-drops
max_iterations: 4
objective: Determine if the observed HTTP activity and file creations indicate a likely
PaperCut authorization bypass and class loading attempt.
success_criteria: Verdicts flagging hosts with overlapping HTTP and file signals as
suspicious.
tools:
- endpoint
- web
```
## follow-on-exploitation
<!-- Assess follow-on exploitation -->
parallel:
- → rce-discovery-behavior
- → log-deletion-events
join: → evaluate-full-compromise
## rce-discovery-behavior
<!-- Hunt for RCE discovery behavior -->
Identify system discovery commands executed by the PaperCut Application Server process or its Java children.
```sqlite target=endpoint role=detection-candidate params=(discovery_filenames=discovery_filenames, lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Child processes of the PaperCut server running profiling tools like whoami,
ver, or tasklist.
reads:
- device_hostname
- process_name
- process_cmd_line
- parent_process_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%pc-app.exe%' OR LOWER(parent_process_name) LIKE '%java.exe%') AND (instr(',' || '{{discovery_filenames}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```
## log-deletion-events
<!-- Monitor for anti-forensic cleanup -->
Detect the deletion of the PaperCut server log, a specific tactic used by attackers to hide the RCE payload.
```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: The deletion of server.log following suspicious process activity on the
same PaperCut server.
reads:
- device_hostname
- file_name
- file_path
- process_name
- activity_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, file_name, file_path, process_name, activity_name, time FROM hb_file_activity WHERE LOWER(file_name) = 'server.log' AND activity_id = 4 AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```
## evaluate-full-compromise
<!-- Evaluate full exploitation chain -->
```agent target=hunter
cite: required
context:
- evaluate-initial-access
- rce-discovery-behavior
- log-deletion-events
max_iterations: 6
objective: Confirm the presence of a full exploit chain by correlating the initial
access verdict with discovery and anti-forensic cleanup results.
success_criteria: Verdicts identifying hosts where the full chain from bypass to profiling
and cleanup is confirmed.
tools:
- endpoint
- web
```
## route-on-verdict
<!-- Route on verdict -->
if~: "the evaluate-full-compromise verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → manual-forensics
unavailable: → manual-forensics (blind_spot: no-process-visibility)
else: → close-out
## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host immediately via the EDR. Preserve the 'server/logs' directory and capture any unidentified .class files before remediation.
```
→ manual-forensics
## manual-forensics
<!-- Manual forensics -->
```manual target=analyst
Review PaperCut application logs for 'jdbc:derby:memory:pwn' strings and entries for irregular database names. Inspect 'server/lib' and 'server/data/content' for unauthorized five-character .class or .cmd files.
```
→ close-out
## close-out
<!-- Close out -->
```manual target=analyst
Confirm all PaperCut NG/MF servers are updated to Emergency Release 3. Verify that management interfaces are restricted to trusted internal networks.
```
→ end
Run it
Take this hunt into your environment.
Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.
Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, critic, then reviewed by a person.