Skip to content

Commit a562149

Browse files
committed
1 parent cf3273d commit a562149

2 files changed

Lines changed: 368 additions & 0 deletions

File tree

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
[metadata]
2+
creation_date = "2026/08/28"
3+
integration = ["endpoint"]
4+
maturity = "production"
5+
updated_date = "2026/08/28"
6+
7+
[rule]
8+
author = ["Elastic"]
9+
description = """
10+
Detects creation of Java .class files within the PaperCut NG/MF Application Server library directory. During active
11+
exploitation of CVE-2026-82078 (chained with CVE-2026-81578), attackers deliver hex-encoded malicious .class payloads
12+
into the PaperCut server/lib path (observed examples include Udydn.class and Moo97.class) so arbitrary bytecode executes
13+
inside the PaperCut JVM / Application Server process.
14+
"""
15+
from = "now-9m"
16+
index = ["logs-endpoint.events.file-*"]
17+
language = "eql"
18+
license = "Elastic License v2"
19+
name = "Suspicious Java Class File Created in PaperCut Server Library"
20+
note = """## Triage and analysis
21+
22+
### Investigating Suspicious Java Class File Created in PaperCut Server Library
23+
24+
PaperCut NG/MF loads database/driver-related classes from the Application Server classpath. CVE-2026-82078 allows unsafe
25+
dynamic class loading when configuration can be manipulated (enabled by CVE-2026-81578 authentication bypass). Huntress
26+
recovered attacker `.class` files written under `server\\lib` (for example `Udydn.class`, `Moo97.class`) that decoded
27+
commands, wrote output under `server\\data\\content`, then deleted staging files and often `server.log`.
28+
29+
#### Possible investigation steps
30+
31+
- Inspect `file.path`, `file.name`, `file.size`, and writing `process.executable`/`process.name`. Unexpected short or
32+
random `.class` names under `server/lib` are high confidence.
33+
- On the same host, look for companion artifacts under `server/data/content` (`.cmd`, `.out`) and for suspicious
34+
`pc-app.exe` / Java child processes (shells, `whoami`, `tasklist`, `charmap.exe`).
35+
- Review PaperCut `server/logs` for hex-encoded blobs, base64 command strings, `jdbc:derby:memory:pwn`, Derby boot paths
36+
containing `\\pwn`, or `ERROR No suitable driver found for jdbc:no:x`. Note missing/truncated `server.log` files.
37+
- Confirm whether a PaperCut upgrade or emergency patch was running at `@timestamp`; legitimate upgrades also write
38+
many `.class` files under `server/lib`.
39+
- Scope other PaperCut servers for the same file names/paths and review internet exposure of the management interface.
40+
41+
### False positive analysis
42+
43+
- PaperCut installation, upgrade, and emergency patch operations legitimately create `.class` files under `server/lib`.
44+
Correlate with change tickets, installer process names, and volume of writes before treating as malicious.
45+
- Exclude only tightly scoped upgrade processes/paths after validation; do not blanket-exclude the `server/lib` directory.
46+
47+
### Response and remediation
48+
49+
- Restrict public access to the PaperCut Application Server immediately.
50+
- Preserve `server/lib` `.class` files, `server/logs`, `server/data/content`, and process telemetry before cleanup or patch.
51+
- Remove unauthorized `.class` payloads after evidence collection; apply PaperCut Emergency Patch Release 2 (or newer).
52+
- Hunt for related child-process activity from `pc-app.exe` and rotate credentials if exploitation is confirmed.
53+
"""
54+
55+
setup = """## Setup
56+
57+
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
58+
59+
Setup instructions: https://ela.st/install-elastic-defend
60+
"""
61+
62+
references = [
63+
"https://www.papercut.com/kb/Main/security-bulletin-27-aug-2026-urgent-security-advisory/",
64+
"https://www.huntress.com/blog/papercut-actively-exploited",
65+
]
66+
risk_score = 99
67+
rule_id = "a2d4508e-e9c2-41f6-9466-0c3aed8cc2c9"
68+
severity = "critical"
69+
tags = [
70+
"Domain: Endpoint",
71+
"OS: Windows",
72+
"OS: Linux",
73+
"OS: macOS",
74+
"Use Case: Threat Detection",
75+
"Use Case: Vulnerability",
76+
"Tactic: Initial Access",
77+
"Tactic: Execution",
78+
"Data Source: Elastic Defend",
79+
"Resources: Investigation Guide",
80+
]
81+
timestamp_override = "event.ingested"
82+
type = "eql"
83+
84+
query = '''
85+
file where host.os.type in ("windows", "linux", "macos") and
86+
event.action in ("creation", "overwrite") and
87+
file.extension : "class" and
88+
file.path : (
89+
"?:\\Program Files\\PaperCut*\\server\\lib\\*",
90+
"?:\\Program Files (x86)\\PaperCut*\\server\\lib\\*",
91+
"/opt/papercut/server/lib/*",
92+
"/usr/local/papercut/server/lib/*",
93+
"/Applications/PaperCut*/server/lib/*"
94+
)
95+
'''
96+
97+
[rule.investigation_fields]
98+
field_names = [
99+
"@timestamp",
100+
"host.id",
101+
"host.name",
102+
"host.os.type",
103+
"user.id",
104+
"user.name",
105+
"process.name",
106+
"process.executable",
107+
"file.path",
108+
"file.name",
109+
"file.size",
110+
]
111+
112+
[[rule.threat]]
113+
framework = "MITRE ATT&CK"
114+
115+
[[rule.threat.technique]]
116+
id = "T1190"
117+
name = "Exploit Public-Facing Application"
118+
reference = "https://attack.mitre.org/techniques/T1190/"
119+
120+
[rule.threat.tactic]
121+
id = "TA0001"
122+
name = "Initial Access"
123+
reference = "https://attack.mitre.org/tactics/TA0001/"
124+
125+
[[rule.threat]]
126+
framework = "MITRE ATT&CK"
127+
128+
[[rule.threat.technique]]
129+
id = "T1059"
130+
name = "Command and Scripting Interpreter"
131+
reference = "https://attack.mitre.org/techniques/T1059/"
132+
133+
[[rule.threat.technique]]
134+
id = "T1620"
135+
name = "Reflective Code Loading"
136+
reference = "https://attack.mitre.org/techniques/T1620/"
137+
138+
[rule.threat.tactic]
139+
id = "TA0002"
140+
name = "Execution"
141+
reference = "https://attack.mitre.org/tactics/TA0002/"
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
[metadata]
2+
creation_date = "2026/08/28"
3+
integration = ["endpoint", "windows", "system", "m365_defender", "sentinel_one_cloud_funnel", "crowdstrike"]
4+
maturity = "production"
5+
updated_date = "2026/08/28"
6+
7+
[rule]
8+
author = ["Elastic"]
9+
description = """
10+
Detects suspicious child process execution originating from PaperCut server components, including the PaperCut NG/MF
11+
Application Server (pc-app.exe) and PaperCut Hive print job spooler (pc-printjob-spooler.exe). Active exploitation of
12+
CVE-2026-82078 and CVE-2026-81578 abuses unsafe dynamic class loading and an authentication bypass to achieve
13+
pre-authenticated remote code execution under pc-app.exe. Similar suspicious shell spawning has also been observed from
14+
PaperCut Hive's pc-printjob-spooler.exe (for example cmd.exe executing echo/test-style commands). Observed NG/MF
15+
in-the-wild activity includes discovery utilities such as whoami and tasklist; proof-of-concept exploitation has spawned
16+
unexpected Windows utilities such as charmap.exe as SYSTEM.
17+
"""
18+
from = "now-9m"
19+
index = [
20+
"logs-endpoint.events.process-*",
21+
"winlogbeat-*",
22+
"logs-windows.sysmon_operational-*",
23+
"logs-windows.forwarded*",
24+
"logs-system.security*",
25+
"endgame-*",
26+
"logs-m365_defender.event-*",
27+
"logs-sentinel_one_cloud_funnel.*",
28+
"logs-crowdstrike.fdr*",
29+
]
30+
language = "eql"
31+
license = "Elastic License v2"
32+
name = "Suspicious Child Process of PaperCut Server Component"
33+
note = """## Triage and analysis
34+
35+
### Investigating Suspicious Child Process of PaperCut Server Component
36+
37+
PaperCut NG/MF Application Server (`pc-app.exe`) and PaperCut Hive components such as `pc-printjob-spooler.exe` should
38+
not routinely spawn interactive shells, download utilities, or discovery tools. CVE-2026-81578 (authentication bypass)
39+
chained with CVE-2026-82078 (unsafe dynamic class loading) enables pre-authentication remote code execution under
40+
`pc-app.exe`. Huntress observed short exploitation windows with base64-encoded commands such as `whoami & ver` and
41+
`whoami & ver & tasklist`, and reproduced RCE that spawned `charmap.exe` as SYSTEM under `pc-app.exe`. Separate telemetry
42+
has also shown `pc-printjob-spooler.exe` under `Program Files\\PaperCut Hive\\` launching `cmd.exe` with attacker- or
43+
test-controlled command lines.
44+
45+
#### Possible investigation steps
46+
47+
- Review the parent-child chain: `process.parent.name`/`process.parent.executable` (for example `pc-app.exe` or
48+
`pc-printjob-spooler.exe` under `PaperCut*` install paths); inspect child `process.name`, `process.executable`, and
49+
`process.command_line` for shells, LOLBins, discovery tools, or trivial probing commands such as `echo test`.
50+
- Confirm PaperCut product (NG/MF vs Hive), version, and internet exposure of management or print-related services.
51+
Unpatched or publicly reachable servers are high priority.
52+
- For NG/MF parents, search the same `host.id` for `.class` file creation under `server\\lib` (for example `Udydn.class`,
53+
`Moo97.class`) and related artifacts under `server\\data\\content` (`*.cmd`, `*.out`).
54+
- Inspect PaperCut logs for hex-encoded payloads, base64 command strings, Derby boot messages referencing
55+
`memory:...\\pwn`, `jdbc:derby:memory:pwn`, `ERROR No suitable driver found for jdbc:no:x`, or truncated/deleted logs.
56+
- Correlate with inbound web or print-service requests around `@timestamp` (proxy, WAF, firewall).
57+
- Pivot on `user.id` and `host.id` for follow-on credential access, persistence, or lateral movement within 48 hours.
58+
59+
### False positive analysis
60+
61+
- PaperCut upgrades, support tooling, or rare admin scripts might spawn expected helpers. Validate change windows,
62+
signed binaries, and command lines before exceptioning.
63+
- Do not exclude on `pc-app.exe` or `pc-printjob-spooler.exe` alone; require a stable benign child path and command pattern.
64+
65+
### Response and remediation
66+
67+
- Isolate or restrict network access to the implicated PaperCut service immediately if public-facing.
68+
- Preserve PaperCut logs, configuration, process trees from the parent binary, and any `.class`/`.cmd`/`.out` artifacts
69+
before upgrade or reboot.
70+
- Apply PaperCut Emergency Patch Release 2 (or newer fixed builds) for NG/MF, including site/secondary servers; validate
71+
Hive component versions and vendor guidance for Hive-specific hosts.
72+
- Hunt estate-wide for the same child-process and `.class` drop patterns; rotate credentials if compromise is confirmed.
73+
"""
74+
75+
setup = """## Setup
76+
77+
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
78+
79+
Setup instructions: https://ela.st/install-elastic-defend
80+
81+
### Additional data sources
82+
83+
This rule also supports the following third-party data sources. For setup instructions, refer to the links below:
84+
85+
- [Sysmon Event ID 1 - Process Creation](https://ela.st/sysmon-event-1-setup)
86+
- [Windows Process Creation Logs](https://ela.st/audit-process-creation)
87+
- [Microsoft Defender XDR](https://ela.st/m365-defender)
88+
- [SentinelOne Cloud Funnel](https://ela.st/sentinel-one-cloud-funnel)
89+
- [CrowdStrike](https://ela.st/crowdstrike-integration)
90+
"""
91+
92+
references = [
93+
"https://www.papercut.com/kb/Main/security-bulletin-27-aug-2026-urgent-security-advisory/",
94+
"https://www.huntress.com/blog/papercut-actively-exploited",
95+
]
96+
risk_score = 73
97+
rule_id = "1d0cf8ae-ed2c-4c74-bc01-462cfd928b64"
98+
severity = "high"
99+
tags = [
100+
"Domain: Endpoint",
101+
"OS: Windows",
102+
"Use Case: Threat Detection",
103+
"Use Case: Vulnerability",
104+
"Tactic: Initial Access",
105+
"Tactic: Execution",
106+
"Data Source: Elastic Defend",
107+
"Data Source: Elastic Endgame",
108+
"Data Source: Sysmon",
109+
"Data Source: Windows Security Event Logs",
110+
"Data Source: Microsoft Defender XDR",
111+
"Data Source: SentinelOne",
112+
"Data Source: Crowdstrike",
113+
"Resources: Investigation Guide",
114+
]
115+
timestamp_override = "event.ingested"
116+
type = "eql"
117+
118+
query = '''
119+
process where host.os.type == "windows" and event.type == "start" and
120+
process.parent.name : ("pc-app.exe", "pc-printjob-spooler.exe") and
121+
(
122+
process.name : (
123+
"cmd.exe",
124+
"powershell.exe",
125+
"pwsh.exe",
126+
"powershell_ise.exe",
127+
"wscript.exe",
128+
"cscript.exe",
129+
"mshta.exe",
130+
"rundll32.exe",
131+
"regsvr32.exe",
132+
"bitsadmin.exe",
133+
"certutil.exe",
134+
"curl.exe",
135+
"wget.exe",
136+
"net.exe",
137+
"net1.exe",
138+
"whoami.exe",
139+
"tasklist.exe",
140+
"ipconfig.exe",
141+
"nltest.exe",
142+
"systeminfo.exe",
143+
"charmap.exe",
144+
"calc.exe",
145+
"mspaint.exe"
146+
) or
147+
?process.pe.original_file_name : (
148+
"Cmd.Exe",
149+
"PowerShell.EXE",
150+
"pwsh.dll",
151+
"powershell_ise.EXE",
152+
"wscript.exe",
153+
"cscript.exe",
154+
"MSHTA.EXE",
155+
"RUNDLL32.EXE",
156+
"REGSVR32.EXE",
157+
"bitsadmin.exe",
158+
"CertUtil.exe",
159+
"curl.exe",
160+
"wget.exe",
161+
"net.exe",
162+
"net1.exe",
163+
"whoami.exe",
164+
"tasklist.exe",
165+
"ipconfig.exe",
166+
"nltest.exe",
167+
"systeminfo.exe",
168+
"charmap.exe",
169+
"CALC.EXE",
170+
"mspaint.exe"
171+
)
172+
)
173+
'''
174+
175+
[rule.investigation_fields]
176+
field_names = [
177+
"@timestamp",
178+
"host.id",
179+
"host.name",
180+
"user.id",
181+
"user.name",
182+
"process.entity_id",
183+
"process.pid",
184+
"process.name",
185+
"process.executable",
186+
"process.command_line",
187+
"process.pe.original_file_name",
188+
"process.parent.name",
189+
"process.parent.executable",
190+
"process.parent.command_line",
191+
]
192+
193+
[[rule.threat]]
194+
framework = "MITRE ATT&CK"
195+
196+
[[rule.threat.technique]]
197+
id = "T1190"
198+
name = "Exploit Public-Facing Application"
199+
reference = "https://attack.mitre.org/techniques/T1190/"
200+
201+
[rule.threat.tactic]
202+
id = "TA0001"
203+
name = "Initial Access"
204+
reference = "https://attack.mitre.org/tactics/TA0001/"
205+
206+
[[rule.threat]]
207+
framework = "MITRE ATT&CK"
208+
209+
[[rule.threat.technique]]
210+
id = "T1059"
211+
name = "Command and Scripting Interpreter"
212+
reference = "https://attack.mitre.org/techniques/T1059/"
213+
214+
[[rule.threat.technique.subtechnique]]
215+
id = "T1059.001"
216+
name = "PowerShell"
217+
reference = "https://attack.mitre.org/techniques/T1059/001/"
218+
219+
[[rule.threat.technique.subtechnique]]
220+
id = "T1059.003"
221+
name = "Windows Command Shell"
222+
reference = "https://attack.mitre.org/techniques/T1059/003/"
223+
224+
[rule.threat.tactic]
225+
id = "TA0002"
226+
name = "Execution"
227+
reference = "https://attack.mitre.org/tactics/TA0002/"

0 commit comments

Comments
 (0)