PTC Windchill & FlexPLM — CVE-2026-12569
Executive Summary
CVE-2026-12569 (CVSS 9.3) is an unsafe-deserialization of untrusted data flaw in the web-based Windchill PDMLink product-data-management component of PTC Windchill (and the FlexPLM product built on it). An unauthenticated, remote attacker who sends a crafted request to the Windchill web tier triggers deserialization of an attacker-controlled Java object gadget chain, resulting in arbitrary code execution in the context of the Windchill / Tomcat application-server service account. This is the first PTC product ever added to the CISA KEV catalog.
PTC alerted customers with mitigation guidance on June 17 2026 (advisory CS473270), released patches on June 19, and CISA added the flaw to the KEV catalog on June 25 2026 with a federal remediation deadline of June 28. Fixed/target releases are Windchill 13.1.1, 13.0.2, 12.1.2, 12.0.2, 11.2.1, 11.1 M020, and 11.0 M030 (and the corresponding FlexPLM builds). Post-exploitation, attackers deploy persistent JSP web shells that grant remote command execution and data exfiltration — public reporting notes web shells named with 16 lowercase hex characters, so defenders should hunt web/access logs for requests to /Windchill/login/[0-9a-f]{16}.jsp (The Hacker News).
Windchill holds an organization's most sensitive engineering IP — CAD, BOMs, manufacturing specs — so RCE on the PLM tier is a direct data-theft and supply-chain-integrity risk. Because the flaw is pre-auth and the app tier is often internet- or partner-reachable, exposure is high wherever the fix has not landed. The highest-value defensive angles are two: (1) the web-shell artifact — the 16-hex .jsp file and any request to it; and (2) the process anomaly — the Windchill/Tomcat java service spawning a shell or LOLBin, which no legitimate PLM workflow does.
Defender priority: Patch to the fixed release for your branch now (13.1.1 / 13.0.2 / 12.1.2 / 12.0.2 / 11.2.1 / 11.1 M020 / 11.0 M030). In parallel, hunt every Windchill host's web/access logs for /Windchill/login/<16-hex>.jsp and Falcon process telemetry for the java/Tomcat service spawning cmd.exe/powershell.exe/sh. Treat any hit as a compromise until proven otherwise — patching does not remove an already-planted web shell.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | PTC advisory CS473270 / Trust Center | Deserialization RCE in Windchill PDMLink & FlexPLM; June 17 alert, June 19 patches; fixed releases + IOCs published | yes |
| 1 | CISA KEV (added 2026-06-25) | Confirmed exploited in the wild; federal deadline 2026-06-28; first-ever PTC KEV entry | yes |
| 2 | The Hacker News | JSP web shells; 16-lowercase-hex naming; hunt POST to /Windchill/login/[0-9a-f]{16}.jsp | yes |
| 2 | CSO Online | CVSS 9.3; PDMLink component; fixed versions 13.1.1/13.0.2/12.1.2/12.0.2/11.2.1/11.1 M020/11.0 M030; June 17/19/25 timeline | yes |
| 2 | threat-modeling.com / SecurityWeek / Help Net Security / Field Effect | Unauthenticated RCE; persistent web shells for command exec & exfil; check for unexpected child processes of the Windchill/CPS service account | partial |
PTC published IOCs alongside advisory CS473270; the atomic attacker IPs/hashes there are tenant-perishable and were not fully reproduced in open reporting as of 2026-07-01. Detection in this pack is therefore behavioral and log-based — the 16-hex JSP web-shell path and anomalous children of the Windchill/Tomcat java service — with placeholders in the IOC CSV for the vendor atomic indicators.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high): The Windchill/Tomcat
javaservice account spawned a shell or LOLBin (cmd.exe/powershell.exe/sh/whoami) — web-shell command execution. T1190 / T1059 / T1505.003 - H2 (high): Web/access logs show a request to
/Windchill/login/<16-hex>.jsp— the deployed JSP web shell being planted or invoked. T1505.003 - H3 (high): A pre-auth POST to a Windchill endpoint carried a Java serialized-object payload (base64 magic
rO0AB) — the deserialization exploitation attempt. T1190 - H4 (medium-high): The Windchill
javaservice made anomalous outbound connections to a rare external IP — data exfiltration / C2 egress from the PLM tier. T1041 / T1071 - H5 (medium): The Windchill
javaparent launched download/exfil tooling (certutil,bitsadmin,curl,wget, encoded PowerShell) — staging of second-stage tooling. T1105 - H6 (medium): A new
.jsp/executable was written under the Windchill/Tomcat webapps or temp path, or persistence (service/cron/account) appeared on the host. T1505.003 / T1053 / T1136
Attack chain
| # | Step | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | Pre-auth crafted request to Windchill PDMLink web tier | Web/access + Tomcat logs → NGSIEM | Serialized-object POST, rO0AB (Q3) |
| 2 | Untrusted Java object deserialized → RCE as service account | ProcessRollup2 (Falcon on the Windchill host) | java spawns shell/LOLBin (Q1) |
| 3 | Drop persistent JSP web shell (16-hex name) | Web/access logs; file-write telemetry | Request to 16-hex .jsp (Q2); new webapp file (Q6) |
| 4 | Command execution & recon via the web shell | ProcessRollup2 | java→shell / recon LOLBins (Q1, Q5) |
| 5 | Data exfiltration of engineering IP / C2 | NetworkConnectIP4; download tooling | Rare egress from java (Q4); staging tools (Q5) |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| url-pattern | /Windchill/login/[0-9a-f]{16}.jsp | high | hunt | JSP web-shell path; 16-lowercase-hex name (per THN) |
| behavior | Windchill/Tomcat java service spawning cmd.exe/powershell.exe/sh | high | hunt | Web-shell command execution — no benign PLM workflow does this |
| payload | Java serialized-object magic rO0AB (base64 of 0xACED0005) | medium | hunt | Deserialization exploitation attempt in request body |
| file-artifact | New <16-hex>.jsp under Windchill/Tomcat webapps | high | hunt | Dropped web shell on disk |
| cve | CVE-2026-12569 | high | detect | Windchill PDMLink deserialization RCE, CVSS 9.3 |
| ipv4 / sha256 | See PTC advisory CS473270 IOC list | medium | block | Vendor-published atomic IOCs — import from advisory (placeholders in §10 CSV) |
Affected Surface & Telemetry Matrix
| Surface | Telemetry Needed | Priority | Gap Risk |
|---|---|---|---|
| Windchill PDMLink / FlexPLM web tier (Tomcat app server) | ProcessRollup2 (Falcon sensor on the Windchill host) + Tomcat/web access logs → NGSIEM | Critical | Medium — many Windchill servers are Falcon-covered; web-access logs must be explicitly forwarded |
| Reverse proxy / load balancer / WAF fronting Windchill | HTTP access logs (method, url, status, user-agent, body size) | High | Proxy logs often not shipped to SIEM |
| Windchill host filesystem (webapps / temp dirs) | File-write telemetry for new .jsp / executables | Medium | Depends on sensor file-write visibility |
| Egress path from the PLM tier | NetworkConnectIP4 / firewall + NetFlow from the Windchill host | Medium | East-west / egress visibility gaps |
⚠ Telemetry reality: Q2–Q3 assume Windchill/Tomcat/proxy web-access logs are ingested into NGSIEM/LogScale (a custom repo) — replace #repo=windchill_web and the parsed field names (method, url, status, src_ip, http_user_agent) with your ingest's actual values. Q1, Q4, Q5 are Falcon endpoint queries that apply directly wherever a sensor covers the Windchill host.
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 Exploit Public-Facing App | Pre-auth deserialization RCE in Windchill PDMLink | Q3 · harden §12 |
| Persistence | T1505.003 Web Shell | Persistent 16-hex JSP web shell | Q2 / Q6 |
| Execution | T1059 Command & Scripting Interpreter | Web shell runs OS commands as the service account | Q1 |
| Ingress Tool Transfer | T1105 Ingress Tool Transfer | certutil/bitsadmin/curl/wget/encoded PowerShell download | Q5 |
| Exfiltration | T1041 Exfil Over C2 Channel | Engineering IP exfil from the PLM tier | Q4 |
| Command & Control | T1071 Application-Layer Protocol | Anomalous outbound from the Windchill java service | Q4 |
| Persistence | T1053 / T1136 Task / Account | New service/cron/account on the host | Q6 |
Native Audit-Log Hunts (non-CQL)
- On each Windchill host: search the Tomcat/web access logs for any request path matching
/Windchill/login/followed by 16 lowercase hex characters and.jsp— the web-shell fingerprint. Any hit, on any HTTP method, is high-priority. - Filesystem sweep: enumerate the Windchill/Tomcat
webapps, work, and temp directories for.jspfiles whose name is 16 hex characters, or any.jspcreated after the June 17 disclosure that is not part of the shipped application. - Process ancestry review: on the Windchill host, list child processes of the
java/Tomcat service since disclosure — anycmd.exe,powershell.exe,sh,bash,whoami, or network tool is anomalous. - Patch-state confirmation: record each Windchill instance's version and confirm it is at or above the fixed release for its branch (13.1.1 / 13.0.2 / 12.1.2 / 12.0.2 / 11.2.1 / 11.1 M020 / 11.0 M030); flag any lagging instance for emergency patching.
- PTC IOC correlation: pull the atomic IOCs from advisory
CS473270and sweep proxy/firewall logs and endpoint hashes for matches.
CrowdStrike LogScale CQL Hunt Queries
#repo=windchill_web and the snake_case parser fields with your ingest's actual values.Looks for: the Windchill/Tomcat java process spawning a command shell or basic recon LOLBin — the clearest sign of web-shell command execution. Very low FP: a PLM app server does not legitimately launch cmd/powershell/sh.
// HUNT: Windchill/Tomcat java service spawns shell/recon LOLBin // MITRE: T1190, T1059, T1505.003 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 (Falcon sensor on Windchill host) // FALSE POSITIVES: rare admin/maintenance scripting on the app server // TUNING: scope to known Windchill hosts; exclude approved deploy/backup jobs #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(java|javaw|tomcat.*|catalina.*)(\.exe)?$/i | FileName=/^(cmd|powershell|pwsh|sh|bash|dash|whoami|hostname|ipconfig|ifconfig|systeminfo|net1?)(\.exe)?$/i | table([@timestamp, ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
Looks for: any web/access-log request whose path is /Windchill/login/<16-lowercase-hex>.jsp — the deployed web shell being planted or invoked (per The Hacker News). Near-zero FP: the shipped app has no such randomly named JSP under the login path.
// HUNT: 16-hex JSP web-shell path in Windchill web/access logs // MITRE: T1505.003 // CONF: high FP: low COST: low | REQUIRES: ingested Windchill/Tomcat/proxy access logs // FALSE POSITIVES: none expected; shipped app has no 16-hex .jsp under /login/ #repo=windchill_web | url=/\/Windchill\/login\/[0-9a-f]{16}\.jsp/ | table([@timestamp, src_ip, http_user_agent, method, url, status], limit=200)
Looks for: a request to the Windchill web tier carrying a base64 Java serialized-object stream (rO0AB, the base64 encoding of magic 0xACED0005) — the deserialization exploitation attempt. FP: some legitimate Windchill client/server traffic serializes Java objects — scope to unauthenticated paths and pair with Q1/Q2.
// HUNT: base64 Java serialized-object magic (rO0AB) in Windchill request // MITRE: T1190 // CONF: medium FP: medium COST: low | REQUIRES: access logs that capture URI/body or a WAF field // FALSE POSITIVES: legitimate Java-serialized client traffic // TUNING: restrict to pre-auth endpoints; require method=POST; exclude known app clients #repo=windchill_web | method=POST | @rawstring=/rO0AB[A-Za-z0-9+\/=]{6}/ | table([@timestamp, src_ip, http_user_agent, method, url, status], limit=200)
Looks for: outbound connections initiated by the Windchill/Tomcat java process to non-RFC1918 addresses — potential engineering-IP exfiltration or C2. FP: legitimate integrations (license servers, SaaS connectors, update checks) — baseline and allow-list known destinations.
// HUNT: rare external egress from the Windchill java service // MITRE: T1041, T1071 // CONF: medium FP: medium COST: medium | REQUIRES: NetworkConnectIP4 (Falcon sensor) // FALSE POSITIVES: license/update/SaaS integrations // TUNING: allow-list known integration IPs/CIDRs and corporate proxies #event_simpleName=/NetworkConnectIP4/ | ContextBaseFileName=/^(java|javaw|tomcat.*)(\.exe)?$/i | RemoteAddressIP4!=/^(10\.|127\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)/ | groupBy([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], function=count()) | sort(_count, order=asc)
Looks for: the Windchill java service launching a child whose command line invokes download/exfil LOLBins or encoded PowerShell — second-stage tooling pulled through the web shell. Low FP on a PLM app server.
// HUNT: download/staging tooling spawned from Windchill java service // MITRE: T1105 // CONF: medium FP: low COST: low | REQUIRES: ProcessRollup2 (Falcon sensor) // FALSE POSITIVES: rare admin update tooling — verify against change records #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(java|javaw|tomcat.*|catalina.*)(\.exe)?$/i | CommandLine=/certutil|bitsadmin|FromBase64String|Invoke-WebRequest|Net\.WebClient|DownloadString|curl\s|wget\s|-enc\s/i | table([@timestamp, ComputerName, aid, ParentBaseFileName, FileName, CommandLine, UserName], limit=200)
Looks for: creation of a .jsp file whose basename is 16 hex characters — the web shell landing on disk. FP: application deploys/upgrades write JSPs — exclude approved deploy windows and the installer service account.
// HUNT: 16-hex .jsp file written on the Windchill host // MITRE: T1505.003 // CONF: medium FP: medium COST: low | REQUIRES: file-write telemetry (Falcon sensor) // FALSE POSITIVES: legitimate app deploy/upgrade JSP writes // TUNING: exclude installer/deploy accounts and approved change windows #event_simpleName=/PeFileWritten|NewExecutableWritten|FileCreateInfo/ | FileName=/^[0-9a-f]{16}\.jsp$/i | table([@timestamp, ComputerName, aid, FileName, TargetFileName, UserName], limit=200)
CrowdStrike Custom IOA Recommendations
| Detection | Pattern | Exclusions | Action |
|---|---|---|---|
| Windchill Web-Shell Exec (Custom IOA) | Parent java/Tomcat → child cmd/powershell/sh (Q1) | Approved deploy/backup jobs on the app server | Detect → Block |
| 16-hex JSP Access (NGSIEM scheduled search) | Request to /Windchill/login/<16-hex>.jsp (Q2) | None | Alert — Critical |
| Windchill Download Tooling (Custom IOA) | Parent java → download LOLBin / encoded PowerShell (Q5) | Sanctioned update tooling | Detect → Block |
Q1 and Q5 are strong Custom IOA candidates because the parent→child relationship is deterministic and benign PLM workflows never trigger it. Q2 (web-shell path) is best run as an NGSIEM scheduled search over ingested access logs and promoted to a Critical alert after a short baseline.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags ipv4,REPLACE_WITH_CS473270_ATTACKER_IP,detect,high,2026-12-31,CVE-2026-12569 exploitation source (PTC advisory),campaign:Windchill-CVE-2026-12569 sha256,REPLACE_WITH_WEBSHELL_SHA256,prevent,critical,2026-12-31,JSP web shell payload,campaign:Windchill-CVE-2026-12569 domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-09-30,post-exploitation C2/exfil,campaign:Windchill-CVE-2026-12569
web log path: /Windchill/login/[0-9a-f]{16}.jsp
process: java/tomcat -> cmd.exe / powershell.exe / sh / whoami
request body: base64 Java serialized magic rO0AB (0xACED0005)
file write: 16-hex .jsp under Windchill/Tomcat webapps
child of java: certutil / bitsadmin / curl / wget / -enc PowerShell
rare external egress from the Windchill java service
Product: PTC Windchill (PDMLink) and FlexPLM Component: web-based PDMLink, Java/Tomcat app tier Access required: unauthenticated, remote (pre-auth RCE) Evidence: Tomcat/web access logs; ProcessRollup2 on host Web-shell naming: 16 lowercase hex characters, .jsp Vendor advisory: PTC CS473270 (IOCs published)
CVE-2026-12569 — PATCH AVAILABLE (PTC advisory 2026-06-19; KEV 2026-06-25) Fixed: Windchill 13.1.1, 13.0.2, 12.1.2, 12.0.2, 11.2.1, 11.1 M020, 11.0 M030 Fed KEV deadline: 2026-06-28 Audit: every Windchill instance at/above its branch fixed release? (y/n) Audit: web/access logs forwarded to NGSIEM? (y/n) Hunt: 16-hex .jsp present on any host BEFORE assuming patch = clean
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | Windchill hosts run a Falcon sensor (ProcessRollup2) and web/access logs land in NGSIEM (#repo=windchill_web or equivalent) | Process + access events visible within ingest SLA; fields parsed |
| Baseline | Run Q4 over 14 days; catalog legitimate integration egress from the java service. Run Q6 to learn normal deploy-time JSP writes | Exclusions captured before alerting |
| Positive test | In a lab Windchill, drop a benign 0123456789abcdef.jsp and request it; from the app account run whoami | Q2 fires on the request; Q1 fires on the child process |
| Promotion | Q1 and Q2 reviewed clean for 7 days | Promote Q1 to a blocking Custom IOA and Q2 to a Critical scheduled-search alert |
Hardening — Tiered & Deployable
- Patch to the fixed release for your branch — Windchill 13.1.1 / 13.0.2 / 12.1.2 / 12.0.2 / 11.2.1 / 11.1 M020 / 11.0 M030 (and the matching FlexPLM build), per PTC advisory
CS473270. (MITRE M1051 Update Software) - Hunt for an already-planted web shell before trusting the patch — sweep every host for 16-hex
.jspfiles and for the Q1 process signature. Patching does not remove an existing shell. (M1049 / M1047 Audit) - Front Windchill with a WAF/proxy rule blocking requests to
/Windchill/login/[0-9a-f]{16}.jspand requests carrying base64 Java-serialized streams (rO0AB). (M1050 Exploit Protection) - Forward Tomcat/web-access logs to NGSIEM and enable the Q2 web-shell alert. (M1047 Audit)
- Reduce exposure of the PLM web tier — remove any direct internet exposure; require VPN/ZTNA or partner-scoped access to Windchill. (M1035 Limit Access to Resource Over Network)
- Run Windchill/Tomcat under a least-privilege service account (not
SYSTEM/root) so RCE lands with minimal rights. (M1026 Privileged Account Management) - Egress-filter the Windchill host to only its required integration destinations, shrinking exfil/C2 paths (feeds Q4). (M1037 Filter Network Traffic)
- Enable a JVM deserialization allow-list (JEP 290 /
ObjectInputFilter) or deploy RASP that blocks untrusted gadget-chain deserialization on the app tier. (M1050 Exploit Protection) - Segment the PLM tier into its own zone with brokered admin access, isolating it from user/data VLANs. (M1030 Network Segmentation)
- Add Windchill to the emergency-patch SLA and asset inventory so future PTC PSIRT advisories are actioned within the KEV window. (M1051)
Deployable Playbooks
1 — Sweep a Windchill host for 16-hex JSP web shells (Linux/Tomcat)
#!/usr/bin/env bash
# Run on each Windchill app server. Finds JSP files whose basename is 16 hex chars.
WEBROOT="${1:-/opt/ptc/Windchill}"
find "$WEBROOT" -type f -iname '*.jsp' 2>/dev/null \
| grep -E '/[0-9a-f]{16}\.jsp$' \
| tee /tmp/windchill_webshell_hits.txt
echo "[*] $(wc -l < /tmp/windchill_webshell_hits.txt) suspicious JSP(s) found"
2 — Windows sweep + access-log grep (PowerShell)
# Web-shell files on a Windows Windchill host + access-log hits.
$root = 'C:\ptc\Windchill'
Get-ChildItem -Path $root -Recurse -Filter *.jsp -ErrorAction SilentlyContinue |
Where-Object { $_.BaseName -match '^[0-9a-f]{16}$' } |
Select-Object FullName, CreationTime, Length
Select-String -Path 'C:\ptc\Windchill\tomcat\logs\localhost_access*.log' `
-Pattern '/Windchill/login/[0-9a-f]{16}\.jsp'
3 — NGSIEM scheduled-search alert (LogScale) for the web shell (Q2)
# Schedule as a recurring search; severity Critical, notify SOC.
#repo=windchill_web
| url=/\/Windchill\/login\/[0-9a-f]{16}\.jsp/
4 — WAF rule sketch (block the web-shell path + serialized payloads)
# ModSecurity-style: block 16-hex JSP under /Windchill/login/ and rO0AB bodies.
SecRule REQUEST_URI "@rx /Windchill/login/[0-9a-f]{16}\.jsp" \
"id:926001,phase:1,deny,status:403,log,msg:'Windchill CVE-2026-12569 webshell path'"
SecRule REQUEST_BODY "@rx rO0AB[A-Za-z0-9+/=]{6}" \
"id:926002,phase:2,deny,status:403,log,msg:'Windchill CVE-2026-12569 Java deserialization'"
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the affected Windchill host (Falcon RTR / firewall); block the WAF web-shell path; suspend suspicious sessions | SOC / Network | Containment record; WAF rule change |
| Eradicate | Capture and remove all 16-hex .jsp web shells; kill injected child processes; remove any new services/cron/accounts; apply the branch fixed release | IR / Platform | Web-shell files & hashes; process tree; patch evidence |
| Recover | Rebuild the host from a clean image if RCE/persistence is confirmed; rotate the Windchill service-account creds, DB creds, and any app secrets/keys on the host | Platform / IR | Rebuild record; credential-rotation log |
| Assess impact | Review access logs and egress for engineering-IP exfiltration (BOMs/CAD); notify IP-owner & legal if data left the tier | IR / Legal | Exfil timeline; data-scope memo |
Detection Coverage Map
| Technique | Behavior | CQL | IOA/Alert | Coverage |
|---|---|---|---|---|
| T1190 | Pre-auth deserialization exploitation | Q3 | — | Partial (needs body/URI capture) |
| T1505.003 | 16-hex JSP web shell (path + on disk) | Q2,Q6 | ✓ (scheduled search) | Good (if access logs ingested) |
| T1059 | Web-shell command execution | Q1 | ✓ (Custom IOA) | Good (host sensor) |
| T1105 | Second-stage download tooling | Q5 | ✓ (Custom IOA) | Good |
| T1041/T1071 | Exfil / C2 egress from java | Q4 | — | Partial (baseline-dependent) |
Known gaps: the exploitation attempt itself (Q3) is only visible if the proxy/WAF captures request bodies or URIs — many access logs do not, so Q1/Q2 (post-exploitation) are the durable detections. On Windchill hosts without a Falcon sensor, Q1/Q4/Q5/Q6 do not apply and coverage collapses to ingested web logs (Q2/Q3) — prioritize sensor coverage or log forwarding on the PLM tier. Atomic attacker IOCs live in PTC advisory CS473270; the §10 CSV uses placeholders until they are imported.
Hunt Summary Ticket
TITLE: Hunt — PTC Windchill / FlexPLM RCE CVE-2026-12569 (deserialization → JSP web shell)
SEVERITY: Critical (CVSS 9.3, exploited ITW, KEV 2026-06-25; unauth pre-auth RCE)
SCOPE: All Windchill PDMLink / FlexPLM instances (Java/Tomcat web tier)
HYPOTHESIS: Unauthenticated attacker triggered Java deserialization in PDMLink,
gained RCE as the app service account, dropped a 16-hex JSP web shell
and used it for command execution and engineering-IP exfiltration
QUERIES: Q1 java->shell · Q2 16-hex JSP path · Q3 rO0AB payload
Q4 rare egress · Q5 download tooling · Q6 JSP file write
DO FIRST: Patch to branch fixed release; sweep for 16-hex .jsp; enable Q2 alert;
run Q1 across all Windchill hosts
FINDINGS: <record host, web-shell path/file, java child procs, egress, timestamps>
GAPS: Exploitation body often not logged; sensor-less hosts limited to web logs;
atomic IOCs only in PTC CS473270
ACTIONS: Isolate host, remove web shells, patch, rebuild if persistence confirmed,
rotate service/DB creds, assess IP exfiltration
OWNER: HuntPack
VERSION: v0.2 (2026-07-01)
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | PTC Trust Center — Windchill/FlexPLM RCE (advisory CS473270) | Root cause, timeline, fixed releases, IOCs | 2026-07-01 |
| 1 | CISA KEV Catalog (CVE-2026-12569 added 2026-06-25) | Confirmed ITW exploitation; federal deadline | 2026-07-01 |
| 2 | The Hacker News — CISA adds PTC Windchill RCE to KEV | JSP web shells; 16-hex naming; login-path hunt | 2026-07-01 |
| 2 | CSO Online — hackers exploit critical PTC Windchill flaw | CVSS 9.3; PDMLink; fixed versions; June 17/19/25 timeline | 2026-07-01 |
| 2 | Threat-Modeling.com — CVE-2026-12569 analysis | Unexpected child processes of the Windchill/CPS service account | 2026-07-01 |
| 2 | SecurityWeek — first-ever exploitation of PTC Windchill | Persistent JSP web shells; command exec & exfil | 2026-07-01 |
| 2 | Help Net Security — JSP web shells on unpatched Windchill | Exploitation confirmation; unauthenticated RCE | 2026-07-01 |
| 2 | Field Effect — Windchill flaw allows unauthenticated RCE | Deserialization mechanism; eSupport CS473270 pointer | 2026-07-01 |