← All hunts high TLP:CLEAR Part 2 of 2

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

  1. Identify PaperCut application servers

    Query · scoping

    Define the hunt scope by identifying hosts where PaperCut NG or MF is installed.

    reads hb_software_inventorysql
    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)

    What a hit looks like. A list of hosts running the target software; silence confirms no vulnerable assets are in scope.

  2. Detect unauthenticated admin access

    Query · baseline

    Identify rare HTTP requests targeting administrative paths that may indicate an authorization bypass.

    reads hb_http_activitysql
    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

    What a hit looks like. Low-frequency requests to sensitive paths from unusual source IPs.

  3. Search for malicious Java class files

    Query · enrichment

    Find attacker-controlled .class files in the PaperCut server library or content directories.

    reads hb_file_activitysql
    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)

    What a hit looks like. Creation of Java files in the application lib folder or files matching specific five-character IOC names.

  4. Evaluate early-stage indicators

    Agent triage

    Correlate identified software presence with suspicious HTTP requests and file creations to confirm the first phase of exploitation.

  5. Hunt for RCE discovery behavior

    Query · detection candidate

    Identify system discovery commands executed by the PaperCut Application Server process or its Java children.

    reads hb_process_activitysql
    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)

    What a hit looks like. Child processes of the PaperCut server running profiling tools like whoami, ver, or tasklist.

  6. Monitor for anti-forensic cleanup

    Query · enrichment

    Detect the deletion of the PaperCut server log, a specific tactic used by attackers to hide the RCE payload.

    reads hb_file_activitysql
    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)

    What a hit looks like. The deletion of server.log following suspicious process activity on the same PaperCut server.

  7. Evaluate full exploitation chain

    Agent triage

    Synthesize early access signals with follow-on RCE behavior and cleanup to confirm a successful intrusion.

  8. Route on verdict

    Decision

    Direct the hunt results to response or manual review based on the synthesized verdict.

  9. Isolate host

    Response action

    Prevent lateral movement and further data theft from confirmed compromised PaperCut servers.

  10. Manual forensics

    Analyst task

    Analyze logs and on-disk artifacts for deeper indicators of compromise.

  11. Close out

    Analyst task

    Ensure the environment is patched and secure after the hunt.

Coverage

Scenario coverage

StageCoveredHow, 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

ParameterTypeDefaultWhat it is
admin_pathslist[string]/app, /admin, /setupSensitive administrative web paths targeted during bypass attempts.
discovery_filenameslist[string]whoami.exe, ver.exe, tasklist.exe, charmap.exe, cmd.exeStandard discovery tool filenames to match against child processes.
lookback_daysnumber14Days of history to examine.
malicious_filenameslist[path]udydn.class, moo97.class, udydn.out, udydn.cmdMalicious filenames observed in PaperCut exploitation.
scope_hostslist[host]Optional list of hostnames to focus the hunt; leave empty for fleet-wide.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Web server / proxy logssiemnetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
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.