← Back to Feed CACHED · 2026-10-14 09:47:56 · CACHE_KEY CVE-2026-63354
CVE-2026-63354 · CWE-79 · Disclosed 2026-10-13

Siemens SIMATIC S7-1500 Web Server Stored XSS via Trace File Visual Marker Data

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

Someone left the factory's control-room window unlocked, but you still have to trick a specific engineer into opening it for you

CVE-2026-63354 is one of eight XSS flaws (SSA-591731) in the integrated web server shipped with Siemens SIMATIC S7-1500 CPUs, SIMATIC Drive Controllers (CPU 1504D TF, CPU 1507D TF), ET 200SP/pro CPUs, SIPLUS variants, S7-1500 Software Controller, and S7-PLCSIM Advanced — essentially the entire S7-1500 family, all firmware versions. The bug is specifically in how the Trace page renders *visual marker data* from imported CSV trace files: marker fields are embedded into the HTML without sanitization, producing a stored-XSS condition. Once JavaScript fires in an engineer's authenticated browser session, it can call the web-server API to perform PLC operations — reading diagnostics, toggling outputs, and in some configurations modifying process data — scoped to whatever function rights the victim holds. No patch exists; Siemens says fixes are "in preparation" with no ETA.

Siemens rates this CRITICAL at CVSS 9.6 (AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H). That score leans hard on *Changed Scope* — the idea that browser-level XSS crosses into PLC-operation impact — and assumes the web server is network-reachable with no segmentation. The rating is defensible in a worst-case OT model, but it overstates the friction. The attacker cannot simply fire an HTTP request; they must craft a valid CSV trace file, social-engineer a specific engineer who holds 'Read diagnostics' rights, and that engineer must manually import the file through the Trace UI. In any facility following IEC 62443 segmentation and change-management discipline, that chain is hard to land. The three 9.6-rated CVEs in this batch (63350, 63353, 63354) all share the same delivery constraint — they differ only in *which* CSV field carries the payload. A realistic reassessment drops this to HIGH (7.5).

"Stored XSS in S7-1500 PLC web UI is real OT risk, but the social-engineering chain keeps it below CRITICAL."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Craft malicious CSV trace file

The attacker authors a CSV file matching the SIMATIC Trace export schema and injects JavaScript into the visual-marker-data column. The payload is standard stored-XSS fare — <script> tags or event handlers — because the web server performs zero sanitization on marker fields before DOM insertion. No specialized tooling is needed beyond a text editor and the Siemens TIA Portal trace-export format documentation.
Conditions required:
  • Knowledge of SIMATIC Trace CSV schema (publicly documented in TIA Portal help)
Where this breaks in practice:
  • CSV format is product-specific; generic payloads require minor adaptation
  • No public PoC or weaponized generator exists as of 2026-10-14
STEP 02

Deliver CSV to an authorized engineer

The attacker must get the file to an OT engineer or operator who has the 'Read diagnostics' function right on the target PLC's web server. Delivery could be via spear-phishing email, USB drop, shared network drive, or a compromised engineering workstation. In OT environments with air-gapped or DMZ-isolated networks, email delivery requires traversal of the IT/OT boundary.
Conditions required:
  • Identification of a target user with 'Read diagnostics' rights
  • A delivery channel that reaches the engineer's workstation
Where this breaks in practice:
  • Well-segmented OT networks restrict file transfer across IT/OT boundaries
  • OT personnel in regulated sectors often follow strict file-import procedures
  • Email-borne CSV attachments may be stripped or sandboxed by email gateways
Detection/coverage: Email security gateways can flag CSV attachments. EDR on engineering workstations may detect unusual file origins. DLP rules can alert on CSV files entering OT zones.
STEP 03

Engineer imports trace file via web UI

The victim opens the PLC's web interface (HTTP/S on ports 80/443), navigates to the Trace page, and uses the import function to load the malicious CSV. This is an active, deliberate action — the file does not auto-execute on download or preview. The engineer must believe the file is a legitimate trace export, which is plausible if it was delivered by a trusted-seeming source or placed on a shared diagnostic data store.
Conditions required:
  • PLC web server is enabled and network-reachable from the engineer's workstation
  • Engineer has 'Read diagnostics' function right
  • Engineer actively imports the file through the Trace UI
Where this breaks in practice:
  • Web server is disabled by default in hardened deployments per Siemens guidance
  • Many S7-1500 operators use TIA Portal for diagnostics rather than the web UI
  • Import is a manual multi-click action, not a passive page load
Detection/coverage: PLC web server access logs (if enabled) will show the import request. Network monitoring tools (e.g., Claroty, Nozomi, Dragos) can detect HTTP sessions to PLC web interfaces.
STEP 04

Stored XSS fires in engineer's browser

When the Trace page renders the imported data, the unsanitized marker field is injected directly into the DOM. The attacker's JavaScript executes in the context of the engineer's authenticated session. The payload can exfiltrate session tokens, enumerate accessible PLC endpoints, and invoke web-server API calls. Because the payload is *stored*, it will re-fire for any user who subsequently views the same Trace page.
Conditions required:
  • Browser does not block inline script execution (no CSP headers from PLC web server)
Where this breaks in practice:
  • Some browser extensions (NoScript, uBlock Origin) may block inline script execution
  • The PLC web server's CORS and cookie policies may limit cross-origin exfiltration
Detection/coverage: Browser-level XSS auditors are largely deprecated, but network IDS signatures for known XSS patterns in HTTP responses to PLC web servers could detect this.
STEP 05

PLC operations via hijacked session

With JavaScript running in the engineer's session, the attacker can call the S7-1500 web-server REST API to perform PLC operations within the victim's authorization scope. This may include reading diagnostic buffers, toggling CPU operating mode (RUN/STOP), reading/writing process data tags, and modifying web-server configuration. The scope is bounded by what the web API exposes — it is narrower than TIA Portal's full programming interface and typically does not allow safety-PLC logic uploads.
Conditions required:
  • Victim's function rights include PLC-write operations (not just 'Read diagnostics')
  • Web server API exposes the specific operation the attacker wants
Where this breaks in practice:
  • 'Read diagnostics' alone limits the attacker to read-only operations
  • Full PLC programming (logic changes) requires TIA Portal, not the web API
  • Session duration limits the attack window — closing the browser terminates access
Detection/coverage: OT network monitoring platforms (Claroty, Nozomi, Dragos) will flag anomalous PLC web-server API calls. SIEM correlation of web-server access with PLC state changes provides high-fidelity detection.
03 · Compensating Control

1
HIGH 7.5→IGNORE 0.0
SEVERITY REDUCED
Disable the PLC web server on all S7-1500 units where it is not operationally required — The web server is the sole attack surface for this XSS. Disabling it eliminates the vulnerability entirely with zero residual risk. Siemens documents this as the primary mitigation. Audit your fleet via TIA Portal project export or SNMP queries to identify units with the web server enabled. Deploy within 30 days per the noisgate mitigation SLA for HIGH.
2
HIGH 7.5→MEDIUM 5.5
SEVERITY REDUCED
Restrict TCP 80/443 access to the PLC web server to a named allowlist of engineering workstations via OT firewall rules — If the web server must remain enabled, limit network reachability to a small set of known engineering stations. This prevents the XSS payload from being triggered by anyone outside the allowlist and dramatically narrows the social-engineering target pool. Implement at the OT-zone firewall or industrial switch ACL level. Deploy within 30 days per the noisgate mitigation SLA.
3
HIGH 7.5→MEDIUM 5.0
SEVERITY REDUCED
Establish a trusted-source-only policy for trace file imports with hash verification — Create an operational procedure that prohibits importing trace files from email, USB, or untrusted shares. Require that trace files originate from the facility's own TIA Portal projects and are hash-verified before import. This breaks the social-engineering delivery step. Document the procedure and train OT personnel. Deploy within 30 days.
4
HIGH 7.5→HIGH 6.5
Deploy OT network monitoring (Claroty, Nozomi, Dragos) to alert on anomalous PLC web-server sessions — Monitor HTTP/S traffic to PLC web interfaces for unusual API calls (e.g., CPU mode changes, tag writes) that don't correlate with scheduled maintenance windows. This provides detection-in-depth rather than prevention, but it ensures that a successful XSS exploitation is caught quickly and contained. Deploy within 30 days.
What doesn't work
  • WAF in front of the PLC — Industrial PLCs do not sit behind web application firewalls in any standard OT architecture. Even if you could proxy the traffic, the malicious payload is in an *imported file*, not in an inbound HTTP request to the PLC.
  • Antivirus scanning of CSV files — AV engines do not flag JavaScript embedded in CSV fields as malicious. The payload is plain text in a data column, not an executable or macro.
  • Browser CSP headers — The PLC web server does not set Content-Security-Policy headers, and you cannot configure it to do so. You have no control over the server-side response headers on the S7-1500 firmware.
  • Patching — No patch exists as of 2026-10-14. Siemens has not published a timeline. You cannot remediate by upgrading firmware today.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNone confirmed. Not listed in CISA KEV. No campaigns targeting this specific XSS vector. However, CISA AA26-231A (August 2026) warns of active AI-assisted exploitation of S7 PLCs via S7comm protocol — a *separate* attack surface, but it means S7-1500s are under heightened adversary attention.
Proof-of-ConceptNo public PoC. No repos found on GitHub matching CVE-2026-63354. No entries on pocindex.io or ExploitDB. The XSS payload itself is trivial to construct (inject <script> into a CSV field), but no weaponized trace-file generator or end-to-end exploit chain has been published.
EPSS ScoreNot yet scored — CVE was published 2026-10-13 (yesterday). EPSS model typically ingests new CVEs within 1–2 weeks. Expected to be low given XSS class and no exploitation history.
KEV StatusNot listed. No CISA Known Exploited Vulnerabilities catalog entry as of 2026-10-14.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H — The Changed Scope (S:C) is the primary score inflator, reflecting cross-boundary impact from browser to PLC. UI:R correctly captures the social-engineering requirement. PR:N is accurate — the *attacker* needs no PLC auth, but the *victim* does.
Affected VersionsAll firmware versions across 60+ product SKUs: SIMATIC S7-1500 CPU family (1511 through 1518, all F/T/TF/MFP/ODK variants), Drive Controller CPU 1504D TF and 1507D TF, ET 200SP CPUs (1510SP through 1515SP), ET 200pro CPUs, SIPLUS ruggedized variants, S7-1500 Software Controller V2/V3/V4, and S7-PLCSIM Advanced.
Fixed VersionNo fix available. Siemens states fixes are "in preparation" with no published timeline. Advisory SSA-591731, dated 2026-10-13.
Internet ExposureModat research (August 2026) identified 265 S7-1500 devices internet-exposed on TCP/102 across 77 countries. Web-server exposure on ports 80/443 is unquantified but expected to be lower — most internet-exposed PLCs serve S7comm, not HTTP. Shodan product:"Siemens S7-1500" queries confirm a small but non-zero web-facing population.
Disclosure & AdvisoryDisclosed 2026-10-13 via Siemens ProductCERT advisory SSA-591731. CISA ICS advisory ICSA-26-134-15 covers the same batch. Part of an 8-CVE cluster (CVE-2026-63350 through 63357).
Reporting ResearcherCredited to Do Son, founder of SecurityOnline.info, per the SecurityOnline disclosure article dated 2026-10-13.

Sources.

  1. Siemens ProductCERT Advisory SSA-591731
  2. CISA ICS Advisory ICSA-26-134-15
  3. SecurityOnline — Siemens S7-1500 Eight Unpatched Flaws
  4. 1898 & Co. — Critical Stored XSS in S7-1500 PLCs
  5. Modat — Thousands of Siemens PLCs Are Listening
  6. CISA/NSA/FBI Joint Advisory AA26-231A — Active Threat to Siemens S7 PLCs
  7. Strix.ai — CVE-2026-63354 Detail
  8. OffSeq Radar — CVE-2026-63354 Analysis
05 · The Call

Final Verdict
↓ DOWNGRADED to HIGH (7.5/10)

Why this verdict

  • Social-engineering gate: The entire chain hinges on tricking a specific engineer with 'Read diagnostics' rights into manually importing a CSV through the Trace UI. This is not a fire-and-forget network exploit — it requires targeted delivery and active victim participation, which compounds friction significantly in OT environments with change-management procedures.
  • Web API blast radius is bounded: The XSS executes in a browser session, not on the PLC firmware. The S7-1500 web API exposes a *subset* of PLC operations — diagnostics, operating-mode toggling, tag read/write — but does not allow safety-PLC logic uploads or firmware modification, which require TIA Portal over a separate channel. This caps the worst-case outcome below full PLC compromise.
  • Network position narrows the population: In IEC 62443-compliant deployments, the PLC web server sits inside the OT zone behind a DMZ. External attackers must first breach the IT/OT boundary. Only ~265 S7-1500 units are internet-exposed (port 102), and web-server exposure on 80/443 is unquantified but lower. The practical reachable population for a remote attacker is a fraction of the installed base.
  • No exploitation ecosystem: Zero public PoCs, no weaponized tooling, no known campaigns targeting this XSS vector. The broader AA26-231A threat targets S7comm protocol, not the web server. This reduces near-term exploitation probability.
  • Role multiplier: The S7-1500 is a canonical OT/ICS controller — 100% of installs occupy the high-value role. The chain *does* succeed in this role: XSS → web API → PLC operations (tag writes, mode changes) → potential process disruption. The blast radius in a worst case is *operational impact* at the single-PLC or process-line level, not fleet-scale or supply-chain-scale. Safety-PLC logic is not modifiable through the web API, limiting the safety-impact ceiling. This floors the verdict at HIGH per the role-multiplier rule, but the friction analysis (social engineering, no PoC, bounded web API) prevents elevation to CRITICAL. To break the CRITICAL floor: the web API does not expose safety-logic modification, and the social-engineering delivery constraint means <5% of real-world S7-1500 deployments are plausibly reachable by this chain without prior OT-network access.

Why not higher?

CRITICAL would require either a directly exploitable network attack (no social engineering), a blast radius reaching safety-PLC logic or fleet-scale impact, or active exploitation. None of these conditions are met. The Changed Scope in the CVSS vector inflates the score by treating browser-to-PLC impact as equivalent to full PLC compromise, but the web API's limited operation set caps real impact below that threshold.

Why not lower?

MEDIUM would undercount the OT context. Even a bounded XSS on a PLC web server can toggle CPU RUN/STOP state, write process-data tags, and disrupt production lines. The S7-1500 is deployed in water treatment, chemical processing, and energy — sectors where even temporary process disruption has safety and regulatory consequences. The no-patch status and active S7 threat landscape (AA26-231A) further support HIGH.

06 · Verification

Crowdsourced verification payload.

Run this script from any Linux/macOS workstation on the OT network (or an auditor jumpbox with OT-zone access). It probes a target PLC's web server on ports 80 and 443 to determine if the SIMATIC web interface is active and therefore exposed to CVE-2026-63354. No authentication is required. Usage: chmod +x check_s7_web.sh && ./check_s7_web.sh 10.0.100.50

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_s7_web.sh — CVE-2026-63354 exposure check for Siemens S7-1500 web server
# Tests whether the PLC web server is enabled and serving the SIMATIC Trace UI.
# All firmware versions are affected; if the web server responds, the device is VULNERABLE.
# Exit codes: 0 = VULNERABLE, 1 = PATCHED/NOT EXPOSED, 2 = UNKNOWN

set -euo pipefail

if [ $# -lt 1 ]; then
  echo "Usage: $0 <PLC_IP_OR_HOSTNAME>"
  exit 2
fi

TARGET="$1"
TIMEOUT=5
RESULT="UNKNOWN"

echo "[*] CVE-2026-63354 — Siemens S7-1500 Web Server Exposure Check"
echo "[*] Target: ${TARGET}"
echo "[*] Date:   $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""

# Try HTTPS first, fall back to HTTP
for PROTO in https http; do
  PORT=443
  [ "$PROTO" = "http" ] && PORT=80

  echo "[*] Probing ${PROTO}://${TARGET}:${PORT} ..."

  RESPONSE=$(curl -sk --connect-timeout "${TIMEOUT}" --max-time 10 \
    -o /dev/null -w "%{http_code}" \
    "${PROTO}://${TARGET}:${PORT}/" 2>/dev/null || echo "000")

  if [ "$RESPONSE" != "000" ]; then
    echo "[+] Web server responded on port ${PORT} (HTTP ${RESPONSE})"

    # Check for SIMATIC signature in response headers or body
    BODY=$(curl -sk --connect-timeout "${TIMEOUT}" --max-time 10 \
      "${PROTO}://${TARGET}:${PORT}/" 2>/dev/null || true)

    if echo "$BODY" | grep -qi -e "simatic" -e "S7-1500" -e "siemens" -e "plc" -e "webserver"; then
      echo "[+] SIMATIC web interface signature detected."
      echo ""
      echo "=== VULNERABLE ==="
      echo "The S7-1500 web server is enabled and serves the SIMATIC interface."
      echo "All firmware versions are affected by CVE-2026-63354 (no patch available)."
      echo "Mitigation: Disable the web server or restrict ports 80/443 to trusted IPs."
      exit 0
    else
      echo "[-] Web server responded but no SIMATIC signature found."
      RESULT="UNKNOWN"
    fi
  else
    echo "[-] No response on port ${PORT}."
  fi
done

# If we reach here, no SIMATIC web server was detected
if [ "$RESULT" = "UNKNOWN" ]; then
  echo ""
  echo "=== UNKNOWN ==="
  echo "A web server responded but could not be confirmed as SIMATIC S7-1500."
  echo "Manually verify the device identity and web server configuration."
  exit 2
fi

echo ""
echo "=== PATCHED ==="
echo "No web server detected on ports 80/443. The PLC web server appears disabled."
echo "If the web server is confirmed disabled, CVE-2026-63354 is not exploitable."
exit 1