Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources or documents need attention: 275/275 feeds/APIs · 469/469 docs · 9/9 advisories · checked 05:18 UTC Customize Public modeDiscuss ChangeIntel on Discord

Vitess vttablet /twopcz reflected XSS

Assessment

Severity
Important
CVSS base score
7.4CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
Impact
Not stated
EPSS · 30-day forecast
No EPSS score collected
Public detection template
No Nuclei template is listed in the current collected catalog
Exploitation detected
Unknown: not stated by MSRC
Exploitability
Not assessed
Publicly disclosed
Unknown: not stated by MSRC
Customer action
Required: follow the MSRC remediation guidance
Component
Mariner
Weakness
CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Issued by
GitHub_M
Published
15 Oct 2026 · October 2026
Last revised
30 Oct 2026Information published.
CVSS 3.1 base metricsRed raises the risk · green lowers it
Attack vector
NetworkAV:N
Attack complexity
LowAC:L
Privileges required
NonePR:N
User interaction
RequiredUI:R
Scope
ChangedS:C
Confidentiality
HighC:H
Integrity
NoneI:N
Availability
NoneA:N

Updates that fix it

0 KBs

No KB listed

No KB update is listed in the collected MSRC record. Check the MSRC advisory for product releases and other remedies.

Affected products

Open Source Software
1 affected product
  • azl3 vitess 19.0.4-14 on Azure Linux 3.0

What changed

  1. Detection template: Unknown: detection-template evidence is incomplete or retained → No Nuclei template listed
  2. Detection template: No Nuclei template listed → Unknown: detection-template evidence is incomplete or retained
  3. Detection template: Unknown: detection-template evidence is incomplete or retained → No Nuclei template listed
  4. Detection template: No Nuclei template listed → Unknown: detection-template evidence is incomplete or retained
  5. Detection template: No Nuclei template listed · Customer action: Required: apply the update → Required: follow the MSRC remediation guidance · Public disclosure: No → Unknown: not stated by MSRC · Exploitation detected: Not reported by MSRC → Unknown: not stated by MSRC
  6. Affected products: azl3 httpd 2.4.68-1 on Azure Linux 3.0 → azl3 vitess 19.0.4-14 on Azure Linux 3.0
  7. Detection template: Unknown: exploit-code evidence is incomplete or retained → No Nuclei template listed · CISA KEV: Unknown: catalog evidence is incomplete or retained → Not listed in the collected catalog
  8. Detection template: No Nuclei template listed → Unknown: exploit-code evidence is incomplete or retained · CISA KEV: Not listed in the collected catalog → Unknown: catalog evidence is incomplete or retained
Page history

Changes are dated when recorded; day views use the last saved version from that UTC day, and citations stay fixed.

Cite this version
Field-level log (37)

Up to 100 recent field edits are shown; older edits may be outside retention.

  1. 6 Nov 2026 · 17:32:22 UTC Public detection templateUnknown: detection-template evidence is incomplete or retained → No Nuclei template listed
  2. 6 Nov 2026 · 17:32:22 UTC Source coverage: public-exploit-codeIncomplete → Current
  3. 6 Nov 2026 · 17:32:22 UTC Source coverage: first-epssIncomplete → Current
  4. 6 Nov 2026 · 17:32:22 UTC Source coverage: msrc-cvrfIncomplete → Current
  5. 6 Nov 2026 · 16:31:02 UTC Public detection templateNo Nuclei template listed → Unknown: detection-template evidence is incomplete or retained
  6. 6 Nov 2026 · 16:31:02 UTC Source coverage: public-exploit-codeCurrent → Incomplete
  7. 6 Nov 2026 · 16:31:02 UTC Source coverage: first-epssCurrent → Incomplete
  8. 6 Nov 2026 · 16:31:02 UTC Source coverage: msrc-cvrfCurrent → Incomplete
  9. 2 Nov 2026 · 17:30:39 UTC Public detection templateUnknown: detection-template evidence is incomplete or retained → No Nuclei template listed
  10. 2 Nov 2026 · 17:30:39 UTC Source coverage: public-exploit-codeIncomplete → Current
  11. 2 Nov 2026 · 17:30:39 UTC Source coverage: first-epssIncomplete → Current
  12. 2 Nov 2026 · 17:30:39 UTC Source coverage: msrc-cvrfIncomplete → Current
  13. 2 Nov 2026 · 16:27:39 UTC Public detection templateNo Nuclei template listed → Unknown: detection-template evidence is incomplete or retained
  14. 2 Nov 2026 · 16:27:39 UTC Source coverage: public-exploit-codeCurrent → Incomplete
  15. 2 Nov 2026 · 16:27:39 UTC Source coverage: first-epssCurrent → Incomplete
  16. 2 Nov 2026 · 16:27:39 UTC Source coverage: msrc-cvrfCurrent → Incomplete
  17. 30 Oct 2026 · 07:19:14 UTC Last revised28 Oct 2026 14:43 UTC → 30 Oct 2026 01:44 UTC
  18. 29 Oct 2026 · 20:19:26 UTC Public detection templateNo Nuclei template listed
  19. 29 Oct 2026 · 20:19:26 UTC EPSSNot scored → No EPSS score collected
  20. 29 Oct 2026 · 20:19:26 UTC Customer actionRequired: apply the update → Required: follow the MSRC remediation guidance
  21. 29 Oct 2026 · 20:19:26 UTC Publicly disclosedNo → Unknown: not stated by MSRC
  22. 29 Oct 2026 · 20:19:26 UTC Exploitation detectedNot reported by MSRC → Unknown: not stated by MSRC
  23. 28 Oct 2026 · 19:05:35 UTC Last revised15 Oct 2026 01:09 UTC → 28 Oct 2026 14:43 UTC
  24. 26 Oct 2026 · 07:26:10 UTC Affected productsazl3 httpd 2.4.68-1 on Azure Linux 3.0 → azl3 vitess 19.0.4-14 on Azure Linux 3.0
  25. 23 Oct 2026 · 09:33:49 UTC Public exploit codeUnknown: exploit-code evidence is incomplete or retained → No Nuclei template listed
  26. 23 Oct 2026 · 09:33:49 UTC CISA KEVUnknown: catalog evidence is incomplete or retained → Not listed in the collected catalog
  27. 23 Oct 2026 · 09:33:49 UTC Source coverage: public-exploit-codeIncomplete → Current
  28. 23 Oct 2026 · 09:33:49 UTC Source coverage: first-epssIncomplete → Current
  29. 23 Oct 2026 · 09:33:49 UTC Source coverage: cisa-kevIncomplete → Current
  30. 23 Oct 2026 · 09:33:49 UTC Source coverage: msrc-cvrfIncomplete → Current
  31. 23 Oct 2026 · 08:31:50 UTC Public exploit codeNo Nuclei template listed → Unknown: exploit-code evidence is incomplete or retained
  32. 23 Oct 2026 · 08:31:50 UTC CISA KEVNot listed in the collected catalog → Unknown: catalog evidence is incomplete or retained
  33. 23 Oct 2026 · 08:31:50 UTC Source coverage: public-exploit-codeCurrent → Incomplete
  34. 23 Oct 2026 · 08:31:50 UTC Source coverage: first-epssCurrent → Incomplete
  35. 23 Oct 2026 · 08:31:50 UTC Source coverage: cisa-kevCurrent → Incomplete
  36. 23 Oct 2026 · 08:31:50 UTC Source coverage: msrc-cvrfCurrent → Incomplete
  37. 18 Oct 2026 · 14:54:30 UTC Link: October 2026/security?release=2026-Oct#cves

Explore global source statements, affected packages and advisory history for CVE-2026-104252. The catalog has a separate collection scope from Microsoft release records.

Collected exploitation and prediction evidence

Risk source coverage

CISA KEV is observed exploitation evidence. FIRST EPSS is a dated prediction of exploitation in the next 30 days. Missing scores are unknown. This collector requests predictions only for explicit CVE aliases in the public NuGet archive; Microsoft release views retain their existing prediction scope.

No collected risk observation for these identifiers. This does not establish absence of exploitation or a zero probability.

cve-program · CVE-2026-104252

Published

Vitess vttablet /twopcz reflected XSS

Vitess is a database clustering system for horizontal scaling of MySQL. Prior to 23.0.5 and 24.0.2, twopczHandler in go/vt/vttablet/tabletserver/twopcz.go writes the Action and dtid form values from the vttablet and vtcombo /twopcz HTTP debug endpoint into a text/html response without HTML escaping. Under the default allow-all ACL policy, a remote unauthenticated attacker can send an operator a crafted request that executes script in the operator's browser after the request is opened. The script runs with the vttablet debug origin and can read same-origin diagnostic endpoints that expose query, transaction, environment, variable, or profiling data available in that deployment. This issue is fixed in versions 23.0.5 and 24.0.2.

Source published
13 Oct 2026 19:22:58 UTC
Source modified
15 Oct 2026 15:11:35 UTC
Observed here
23 Oct 2026 15:48:27 UTC
Source terms
CVE Program Terms of Use

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: cve-program · CVE Program Terms of Use. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 3.1 · 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

euvd · EUVD-2026-100525

Published

Vitess is a database clustering system for horizontal scaling of MySQL. Prior to 23.0.5 and 24.0.2, twopczHandler in go/vt/vttablet/tabletserver/twopcz.go writes the Action and dtid form values from the vttablet and vtcombo /twopcz HTTP deb…

Vitess is a database clustering system for horizontal scaling of MySQL. Prior to 23.0.5 and 24.0.2, twopczHandler in go/vt/vttablet/tabletserver/twopcz.go writes the Action and dtid form values from the vttablet and vtcombo /twopcz HTTP debug endpoint into a text/html response without HTML escaping. Under the default allow-all ACL policy, a remote unauthenticated attacker can send an operator a crafted request that executes script in the operator's browser after the request is opened. The script runs with the vttablet debug origin and can read same-origin diagnostic endpoints that expose query, transaction, environment, variable, or profiling data available in that deployment. This issue is fixed in versions 23.0.5 and 24.0.2.

EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.

Original publisher date fields

datePublished: Oct 13, 2026, 7:22:58 PM

dateUpdated: Oct 15, 2026, 3:11:35 PM

1 related source bulletins · separate from aliases

msrc_CVE-2026-104252: Vitess vttablet /twopcz reflected XSS

CVE-2026-104252

Source published
Oct 13, 2026, 7:22:58 PM (timezone not stated)
Source modified
Oct 15, 2026, 3:11:35 PM (timezone not stated)
Observed here
7 Nov 2026 04:27:57 UTC
Source terms
ENISA EUVD · source terms and attribution apply

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: euvd · ENISA EUVD · source terms and attribution apply. Source text is retained; field grouping and change labels are provided by ChangeIntel.

EUVD CVSS 3.1 · 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

nvd · CVE-2026-104252

Published

Vitess is a database clustering system for horizontal scaling of MySQL. Prior to 23.0.5 and 24.0.2, twopczHandler in go/vt/vttablet/tabletserver/twopcz.go writes the Action and dtid form values from the vttablet and vtcombo /twopcz HTTP deb…

Vitess is a database clustering system for horizontal scaling of MySQL. Prior to 23.0.5 and 24.0.2, twopczHandler in go/vt/vttablet/tabletserver/twopcz.go writes the Action and dtid form values from the vttablet and vtcombo /twopcz HTTP debug endpoint into a text/html response without HTML escaping. Under the default allow-all ACL policy, a remote unauthenticated attacker can send an operator a crafted request that executes script in the operator's browser after the request is opened. The script runs with the vttablet debug origin and can read same-origin diagnostic endpoints that expose query, transaction, environment, variable, or profiling data available in that deployment. This issue is fixed in versions 23.0.5 and 24.0.2.

NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.

Source analysis status: Analyzed

Weakness classifications: CWE-79

Original publisher date fields

published: 2026-10-13T20:17:12.453

lastModified: 2026-10-23T15:14:48.240

1 source CPE criteria · context only
  • cpe:2.3:a:linuxfoundation:vitess:*:*:*:*:*:*:*:*

The original JSON retains the logical configuration operators, exclusions and version bounds.

Source published
13 Oct 2026 20:17:12 UTC
Source modified
23 Oct 2026 15:14:48 UTC
Observed here
25 Oct 2026 04:17:29 UTC
Source terms
NIST NVD usage terms; underlying source attribution retained

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: nvd · NIST NVD usage terms; underlying source attribution retained. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 3.1 · [email protected] · Secondary · 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

osv · GHSA-v75v-6fpf-gvw8

Published

Vitess vttablet /twopcz reflected XSS

From: xylove21 To: [email protected] Subject: [Security Report] Vitess vttablet /twopcz reflected XSS Date: Tue, 24 Jun 2026 14:30:00 +0800 ## Summary The `twopczHandler` in `go/vt/vttablet/tabletserver/twopcz.go` (line 185) reflects the `Action` and `dtid` form values directly into the HTML response body via `fmt.Fprintln(w, msg)` — **without HTML escaping**. The response is served as `text/html; charset=utf-8`, and Vitess's default `acl` policy is **allow-all**, so the endpoint is reachable by anyone who can hit the vttablet's HTTP port (default `15999`, multiplexed with gRPC and MySQL wire-protocol ports). A crafted `Action` or `dtid` value yields a **reflected XSS** that executes in the operator's browser with same-origin access to the vttablet's debug endpoints. This includes `/queryz` (live query plans), `/querylogz` (recent queries with bound values), `/txlogz` (transactions), `/debug/env` (environment variables — may include MySQL/topology credentials), `/debug/vars` (expvar stats), and `/debug/pprof/*` if enabled. The bug was introduced before v20.0.0 (long-standing) and was silently fixed in commit `3140c1846c` (merged 2026-06-09, PR #20255, "tabletserver: escape reflected form values in twopcz handler"). The fix replaces `fmt.Fprintln(w, msg)` with `fmt.Fprintln(w, html.EscapeString(msg))`. **No released version of Vitess contains the fix** — the fix lives only on `main` (current tip `33a3c0fafe69`, 2026-06-23). There is **no CVE, GHSA, or OSV entry** for this specific bug (verified 2026-06-24 against GitHub Advisory Database, OSV.dev, and NVD). ## Impact | Field | Value | |-------|-------| | **Type** | Reflected Cross-Site Scripting (XSS) | | **CVSS 3.1** | `AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N` = **7.7 HIGH** | | **Attack Vector** | Network (vttablet HTTP port 15999, multiplexed with gRPC/MySQL) | | **Attack Complexity** | Low (craft URL, send to operator) | | **Privileges Required** | None (default `acl` policy is allow-all) | | **User Interaction** | Required (operator must visit crafted URL) | | **Scope** | Changed (XSS chain reaction to other vttablet debug endpoints) | | **Confidentiality** | High (query text, env vars, expvar stats) | | **Integrity** | None (XSS itself doesn't change state) | | **Availability** | None (XSS itself doesn't disrupt service) | ### Affected versions (verified) All released versions are vulnerable. The fix lives only on `main`: | Tag | Released | `twopcz.go` line 185 | Status | |---|---|---|---| | v20.0.0 | 2024-06-27 | `fmt.Fprintln(w, msg)` | **BUGGY** | | v20.0.1 - v20.0.6 | 2024 | `fmt.Fprintln(w, msg)` | **BUGGY** | | v22.0.4 | 2026-02-27 | `fmt.Fprintln(w, msg)` | **BUGGY** | | v23.0.3, v23.0.4 | 2026-02 / 2026-05 | `fmt.Fprintln(w, msg)` | **BUGGY** | | v24.0.0, v24.0.1 | 2026-04 / 2026-05 | `fmt.Fprintln(w, msg)` | **BUGGY** | | **main** (`33a3c0fafe69`) | 2026-06-23 | `fmt.Fprintln(w, html.EscapeString(msg))` | **FIXED** | ### Sensitive data exposed via the same-origin XSS chain A successful XSS lands in the vttablet's origin. From there, the attacker can fetch (via `fetch()` from injected JavaScript) the following same-origin endpoints, all of which are unauthenticated by default: - `/twopcz` — in-flight 2PC transactions (query text, parameters, dtid) - `/queryz` — live query plans - `/querylogz` — recent queries with bound values - `/txlogz` — transactions - `/debug/env` — environment variables (may include MySQL creds, topology credentials, encryption keys) - `/debug/vars` — expvar stats - `/debug/pprof/*` — CPU/memory profiles (if enabled) ## Reproduction (independent, runnable PoC) The PoC is a self-contained Go HTTP server that replicates the buggy `twopczHandler` from Vitess v20.0.0 verbatim (using the same line-185 code). It runs on `127.0.0.1:15080` and returns the same response shape as the real Vitess endpoint. ```bash # 1) Build the PoC (Go 1.23+) cd /path/to/finding/CVE-pending-twopcz-xss go build -o /tmp/vitess-twopcz-poc ./poc.go # 2) Start the buggy server ADDR=127.0.0.1:15080 /tmp/vitess-twopcz-poc & # 3) Reproduce — Test 1: bare GET (no params) curl -sS -i "http://127.0.0.1:15080/twopcz" # → Content-Type: text/html; charset=utf-8, status 200 # 4) Test 2: XSS via Action param (URL-encode the script tag) curl -sS -i "http://127.0.0.1:15080/twopcz?Action=%3Cscript%3Ealert(1)%3C%2Fscript%3E&dtid=zz" # → Response body contains literal "<script>alert(1)</script>(zz): completed." # → Browser executes the script as same-origin code # 5) Test 3: XSS via dtid param (attribute-context payload) curl -sS -i "http://127.0.0.1:15080/twopcz?Action=Demo&dtid=%3Cimg%20src%3Dx%20onerror%3Dalert(1)%3E" # → Response body contains literal "<img src=x onerror=alert(1)>" # → Browser fires the onerror handler as same-origin code # 6) Run the 3x automated runner (writes evidence/run-{1,2,3}.log) bash ./poc/run.sh ``` PoC result excerpt (from `evidence/run-1.log`): ``` --- Test 2: XSS via Action=<script>alert(1)</script> --- HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 ... <h2>WARNING: Actions on this page can jeopardize data integrity.</h2> <script>alert(1)</script>(zz): completed. PASS: payload reflected UNESCAPED (XSS exploitable in browser) ``` The PoC was run 3 times on the buggy server (all 3/3 PASS) and the same code is byte-identical to the v20.0.0 commit `8aeb274f6c8e` line 185. ## Root cause (technical detail) `go/vt/vttablet/tabletserver/twopcz.go` (v20.0.0 through v24.0.1): ```go // Line 185 fmt.Fprintln(w, msg) ``` `msg` is constructed earlier in the handler as: ```go msg := fmt.Sprintf("%s(%s): completed.", action, dtid) ``` with `action` and `dtid` coming from the form values `r.FormValue("Action")` and `r.FormValue("dtid")`. The form values are URL-decoded (so a `+` becomes a space, `%3C` becomes `<`) but never HTML-escaped. The handler explicitly sets `Content-Type: text/html; charset=utf-8` (via the `<!DOCTYPE html>` it writes first), so the browser executes any injected `<script>` or attribute-context payload. The fix in main (`fmt.Fprintln(w, html.EscapeString(msg))`) closes the hole by HTML-escaping both `action` and `dtid` before reflection. ## Suggested fix (already in main) ```go // Recommended minimal patch (already in main, needs backport to all release branches): import "html" func twopczHandler(w http.ResponseWriter, r *http.Request) { // ... existing logic ... msg := fmt.Sprintf("%s(%s): completed.", action, dtid) fmt.Fprintln(w, html.EscapeString(msg)) // ← was: fmt.Fprintln(w, msg) } ``` Backport the fix to v20.0.x, v22.0.x, v23.0.x, and v24.0.x as patch releases. The fix is one line and a one-line `import "html"` addition, so the backport risk is minimal. ## Workaround / mitigation (no patch available) If you cannot upgrade to a fixed release immediately: 1. **Restrict the vttablet HTTP port** (default 15999) to localhost only. vttablet can run with `--tablet-allow-stats=false` and `--tablet-grpc-port` configured separately from the HTTP port, or you can firewall the HTTP port at the network layer. The debug endpoints are not needed by production traffic. 2. **Set a non-default ACL policy**. Vitess supports an `acl` policy that defaults to allow-all. Setting it to a JSON file that denies unauthenticated access to debug endpoints (see `go/acl/acl.go::savePolicy`) would block the XSS, but the default policy is currently `""` (allow-all) and many users don't override it. 3. **Use a reverse proxy** (nginx, envoy) in front of the vttablet HTTP port with a strict allowlist of clients. ## Cross-references - The bug is **not** related to: - CVE-2024-53257 (`/debug/querylogz` HTML injection, fixed in v20.0.4 — different endpoint) - CVE-2026-27969 (backup MANIFEST path traversal) - CVE-2026-27965 / GHSA-8g8j-r87h-p36x (backup external decompressor RCE) - PR #20255 is the fix commit; PR #19486 (defense-in-depth) is a separate hardening change ## Contact - GitHub: @xylove21

Source published
15 Oct 2026 20:16:29 UTC
Source modified
5 Nov 2026 23:26:16 UTC
Observed here
5 Nov 2026 23:38:32 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS_V3 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Publisher rating · CRITICAL

osv · GO-2026-6798

Published

Vitess vttablet /twopcz reflected XSS in vitess.io/vitess

Vitess vttablet /twopcz reflected XSS in vitess.io/vitess

Source published
5 Nov 2026 22:53:53 UTC
Source modified
5 Nov 2026 23:15:12 UTC
Observed here
5 Nov 2026 23:38:32 UTC
Source terms
OSV · upstream source license applies

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · OSV · upstream source license applies. Source text is retained; field grouping and change labels are provided by ChangeIntel.

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 8 Nov 05:18 UTC · 275 of 275 readable · 273 fully read · documentation 469/469 current