Someone left a Java deserialization sink on the front door of your IP vault
CVE-2026-12569 is an unauthenticated remote code execution flaw in PTC Windchill PDMLink and FlexPLM — the PLM platforms that store CAD assemblies, BOMs, manufacturing instructions, supplier specs, and pre-release product designs for aerospace, automotive, defense, medical-device, and retail/fashion shops. The bug is unsafe deserialization of untrusted Java objects reachable through publish servlets (/servlet/WindchillGW/com.ptc.wvs.server.publish.Publish and /servlet/WindchillAuthGW/...). A POST with a gadget-chain payload executes as the Windchill/FlexPLM service account — typically a privileged JVM that owns the file vault and the database connection. PTC has confirmed *all supported Windchill versions including current CPS levels* are affected; fixed builds are flowing for 12.1.2 and 12.0.2 with backports for older trains in progress.
There is no NVD/CNA CVSS base score yet, but PTC and BSI are publicly characterizing this at 10.0, the GHSA CVSS:4.0 vector lands at 9.3 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H), and CISA added it to KEV the same week. PTC issued a rare 'imminent threat' notice after receiving credible third-party intelligence of an in-progress campaign. Vendor framing matches reality here — if anything it understates the *strategic* damage, because this lives one zone deeper than 'a web server': it's the system of record for product IP.
5 steps from start to impact.
Locate exposed Windchill/FlexPLM instance
/Windchill/ paths, default favicons, and the Windchill HTTP server header. Internet-exposed deployments are uncommon but non-zero — most live on internal/B2B-VPN segments shared with suppliers.- Network reachability to the Windchill HTTP(S) endpoint
- Target running an affected version (effectively all CPS levels prior to June 2026 patches)
- Many shops front Windchill with an SSO/WAF proxy that strips unauthenticated POSTs to internal servlets
- Supplier-collaboration topologies often require client cert auth at the edge
http.title:Windchill and http.favicon.hash queries; GreyNoise tag emerging for Publish servlet probes.Submit crafted deserialization payload
com.ptc.wvs.server.publish.Publish servlet, typically with run?p= or .jsp?c= query patterns plus a stock or evasive User-Agent. ysoserial-style chains (CommonsCollections, ROME, Spring) succeed because the publisher path performs ObjectInputStream.readObject() on attacker-controlled bytes with no class allow-list.- Reachable
WindchillGWorWindchillAuthGWendpoint - Gadget chain present on the classpath — Windchill ships with many
- A WAF with Java-serialization signatures (
aced 0005) will block the obvious form - Apache/IIS configuration mitigation from PTC blocks the specific URL patterns if applied
aced 0005 rule; IIS/Apache logs showing Publish URI with non-empty POST bodies; PTC published IOCs include GW.class, payload.bin, dpr_<random>.jsp.Code execution as Windchill service account
wt.properties.- JVM runs as a privileged service account (default in nearly all deployments)
- EDR on the Windchill host can flag
java.exespawningcmd.exe/powershell.exe/bash - AppArmor/SELinux confinement is rare on Windchill but possible
.jsp files in Windchill/codebase/ are extremely high-fidelity.Loot the PLM vault and pivot
wt.properties (LDAP service bind, DB account) enable lateral movement into AD and the data tier. Engineering IP — designs, BOMs, supplier contracts — leaves the building.- Step 3 code execution
- Vault and DB reachable from the app tier (always true by design)
- DLP on egress can flag large CAD exfil — rarely tuned for Windchill artifact MIME types
- Network microsegmentation between PLM and AD is uncommon in mid-market manufacturing
Supply-chain and safety pivot
- Windchill-to-MES/ERP integration in place
- Change-control workflow not enforcing out-of-band human review
- Mature manufacturers require dual-sign on ECOs — sabotage is detectable
- Many shops still print travelers, breaking the digital chain
The supporting signals.
| In-the-wild status | Active exploitation confirmed. PTC issued an 'imminent threat' notice; CISA added to KEV in June 2026 within days of disclosure. |
|---|---|
| Proof-of-concept | No public PoC repo yet, but the gadget-chain pattern is trivially reconstructible with ysoserial against the documented Publish servlet. PT Security and Kudelski both published IOCs and URI patterns (run?p=, .jsp?c=). |
| EPSS | 0.00499 (~0.5%) — low percentile, but EPSS lags fresh KEV listings by weeks. Ignore EPSS here; KEV trumps it. |
| KEV | Listed: YES (June 2026). Federal civilian agencies are on the standard 21-day BOD 22-01 clock; treat as days for everyone else. |
| CVSS | No NVD score yet. GHSA CVSS:4.0 = 9.3 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H); PTC and BSI public framing = 10.0. |
| Affected versions | All supported Windchill PDMLink and FlexPLM versions including current CPS levels prior to the June 2026 patch wave. Treat every unpatched deployment as vulnerable. |
| Fixed versions | Windchill 12.1.2 and 12.0.2 patched; backports for 11.x and older trains rolling. Apache/IIS config mitigation (URL pattern block) available as interim. |
| Exposure data | Shodan shows ~hundreds of internet-facing Windchill instances globally (low absolute count, high-value targets — defense primes, automotive OEMs, fashion houses). True footprint is *much* larger on internal/B2B-VPN segments. |
| Disclosure | 2026-06-18 vendor advisory; BSI and CISA joint warnings followed within 48 hours. |
| Reporter | Coordinated disclosure via PTC PSIRT; threat-intel tip from a third-party group prompted the urgency. |
noisgate verdict.
First assessment lands at CRITICAL because the single most decisive factor is role multiplier: Windchill/FlexPLM is canonically the system of record for product IP and, in regulated manufacturing, drives downstream production — a successful chain ends in fleet-scale IP theft or product-safety impact. Active KEV listing and an unauthenticated, network-reachable deserialization sink remove the usual friction discounts.
Why this verdict
- KEV-listed with vendor imminent-threat notice — exploitation is not theoretical; the clock started the day of disclosure.
- Unauthenticated, network, no user interaction — CVSS 4.0 vector confirms
PR:N/UI:N/AC:L. The only prerequisite is HTTP(S) reachability to the publish servlet. - Role multiplier: Windchill is the IP crown jewel. In a manufacturing enterprise, the chain ends in CAD/BOM exfiltration, AD pivot via
wt.propertiescreds, and — where MES integration exists — shop-floor design tampering. Blast radius is fleet-scale by definition. - Role multiplier: FlexPLM in retail/fashion holds unreleased seasonal designs and supplier contracts; chain ends in mass IP exfil and supply-chain leverage.
- Friction does not break the floor. Internet exposure is low (~hundreds of hosts on Shodan), but the canonical deployment role *is* the high-value role — the bug is IN the system of record. That sets the floor at CRITICAL regardless of internet-facing share.
- Patch backports incomplete — many sites cannot move to 12.1.2/12.0.2 immediately and must rely on the Apache/IIS URL-pattern mitigation, which is fragile.
Why not higher?
There is no higher bucket than CRITICAL. The reassessed score of 9.8 (vs. PTC's 10.0 framing) reflects that pure internet exposure is modest — most installs sit behind SSO proxies or B2B VPN, so the practical mass-scan population is smaller than a Confluence or Exchange-class bug.
Why not lower?
Downgrading to HIGH would require an installed-base argument that <1% of Windchill deployments occupy a fleet-impactful role — the opposite is true, since holding engineering IP *is* the role of Windchill. KEV listing + unauthenticated RCE + canonical high-value-role component is exactly the floor-CRITICAL pattern.
What to do — in priority order.
- Apply PTC's Apache/IIS URL-pattern block today — PTC's interim mitigation rejects requests to the
com.ptc.wvs.server.publish.Publishservlet patterns at the reverse proxy. Deploy within hours (KEV override on the noisgate mitigation SLA), test with a known-good publish workflow, and keep the rule in place until the vendor patch is verified live. - Patch to Windchill 12.1.2 / 12.0.2 (or vendor backport) as soon as your change window allows — Vendor patches are the only true fix. Target installation within 90 days per the noisgate remediation SLA for CRITICAL — but PLM change windows are slow, so start the regression-test cycle Monday.
- Pull Windchill off the public internet if you can — If your supplier-collaboration model allows it, force all Windchill access through corporate VPN or a ZTNA broker with auth in front of any HTTP traffic. Reduces unauthenticated attack surface to near zero.
- Rotate the Windchill service account, DB account, and LDAP bind in
wt.properties— Assume compromise if the host has been internet-reachable since 2026-06-18. Rotate credentials and force a full session/token invalidation to cut any planted persistence. - Hunt for the published IOCs — Check
Windchill/codebase/for unexpected.jspfiles, look forGW.class/payload.bin/dpr_*.jsp, grep webserver logs forrun?p=and.jsp?c=patterns against the publish servlets. Pull EDR child-process events showing the Windchill JVM spawning shells. - Tighten egress from the PLM segment — Limit outbound from Windchill hosts to known update/license destinations only. Catches data exfil and C2 even if the initial RCE succeeded.
- Generic WAF rate-limiting — the exploit is a single POST; it does not need volume.
- MFA on the Windchill login page — the vulnerable servlets do not require authentication, so MFA in front of the UI is bypassed entirely.
- Network IDS without Java-serialization signatures — vanilla IPS rule packs may miss
aced 0005payloads if signatures aren't enabled. - Trusting EPSS — 0.5% is misleading on a brand-new KEV listing; EPSS will catch up in weeks.
Crowdsourced verification payload.
Run this on the Windchill application server itself (most Windchill deployments are Windows). Launch as Administrator from a console where the Windchill installation path is known: .\Check-CVE-2026-12569.ps1 -WindchillRoot 'C:\ptc\Windchill'. The script inspects the installed version manifest, the codebase directory for IOC files, and the proxy config for PTC's interim URL-pattern block. Read-only; no changes are made.
#requires -RunAsAdministrator
# Check-CVE-2026-12569.ps1 — noisgate verification probe
# Determines whether a Windchill host is patched, mitigated, or exposed.
param(
[Parameter(Mandatory = $true)]
[string]$WindchillRoot
)
$ErrorActionPreference = 'Stop'
$verdict = 'UNKNOWN'
$reasons = @()
if (-not (Test-Path $WindchillRoot)) {
Write-Output "UNKNOWN: Windchill root '$WindchillRoot' not found"
exit 2
}
# 1. Pull installed version from installedProperties.xml
$propsFile = Join-Path $WindchillRoot 'installedProperties.xml'
$installed = $null
if (Test-Path $propsFile) {
try {
[xml]$xml = Get-Content $propsFile
$installed = ($xml.SelectSingleNode("//property[@name='wt.release.version']")).value
} catch { $reasons += "could not parse installedProperties.xml" }
}
# 2. Fixed versions per PTC June 2026 advisory
$fixed = @('12.1.2','12.0.2')
if ($installed) {
$reasons += "installed version: $installed"
if ($fixed -contains $installed) {
$verdict = 'PATCHED'
} else {
$verdict = 'VULNERABLE'
}
} else {
$reasons += 'version string not found'
}
# 3. Look for PTC IOCs in codebase
$codebase = Join-Path $WindchillRoot 'codebase'
if (Test-Path $codebase) {
$iocs = Get-ChildItem -Path $codebase -Recurse -Include 'GW.class','payload.bin','dpr_*.jsp' -ErrorAction SilentlyContinue
if ($iocs) {
$verdict = 'VULNERABLE'
$reasons += "IOC FILES FOUND: $($iocs.FullName -join '; ')"
}
}
# 4. Look for the interim URL-pattern mitigation in IIS / Apache configs
$mitigationFound = $false
$proxyConfigs = @(
'C:\Windows\System32\inetsrv\config\applicationHost.config',
(Join-Path $WindchillRoot 'apache\conf\httpd.conf')
) | Where-Object { Test-Path $_ }
foreach ($cfg in $proxyConfigs) {
$content = Get-Content $cfg -Raw -ErrorAction SilentlyContinue
if ($content -match 'com\.ptc\.wvs\.server\.publish\.Publish' -and $content -match '(deny|Deny|RewriteRule.+\[F)') {
$mitigationFound = $true
$reasons += "interim URL-block found in $cfg"
}
}
if ($verdict -eq 'VULNERABLE' -and $mitigationFound) {
$reasons += 'NOTE: interim mitigation reduces but does not eliminate risk'
}
Write-Output "$verdict :: $($reasons -join ' | ')"
switch ($verdict) {
'PATCHED' { exit 0 }
'VULNERABLE' { exit 1 }
default { exit 2 }
}
If you remember one thing.
wt.properties LDAP bind now and microsegment the PLM tier away from AD — the chain ends in IP theft and, for regulated manufacturers, a product-safety incident.Sources
- PTC Trust Center — Windchill/FlexPLM RCE Advisory (June 2026)
- GitHub Security Advisory GHSA-F345-WXWR-FXFH
- NVD — CVE-2026-12569
- BleepingComputer — PTC warns of imminent threat from critical Windchill/FlexPLM RCE
- Kudelski Security — Critical RCE in Windchill and FlexPLM (technical analysis)
- SecurityAffairs — CISA and BSI warn orgs of critical PTC Windchill/FlexPLM flaw
- B2B Cyber Security — BSI warning, CVSS 10.0
- EAC Product Development Solutions — customer remediation guide
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.