CVE-2026-104252
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.8
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.
- Record
CVE-2026-104252- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2026-100525
9.8
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.
- Record
EUVD-2026-100525- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-v75v-6fpf-gvw8
9.8
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.
# 1) Build the PoC (Go 1.23+)
cd /path/to/finding/CVE-pending-twopcz-xss
go build -o…
- Record
GHSA-v75v-6fpf-gvw8- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-79, CWE-80, CWE-116
- Updated
- 2026-11-02
NVD
9.8
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.
- Record
CVE-2026-104252- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
9.8
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.
- Record
CVE-2026-104252- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-79
- Updated
- 2026-11-06
OSVGHSA-v75v-6fpf-gvw8
9.8
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.
# 1) Build the PoC (Go 1.23+)
cd /path/to/finding/CVE-pending-twopcz-xss
go build -o…
- Record
GHSA-v75v-6fpf-gvw8- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-116, CWE-79, CWE-80
- Updated
- 2026-11-06
OSVAZL-108039 No score
CVE-2026-104252 affecting package vitess for versions less than 19.0.4-16
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.
- Record
AZL-108039- Updated
- 2026-11-05
OSVGO-2026-6798 No score
Vitess vttablet /twopcz reflected XSS in vitess.io/vitess
Vitess vttablet /twopcz reflected XSS in vitess.io/vitess
- Record
GO-2026-6798- Updated
- 2026-11-06
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
vitess.io/vitessGo |
before 0.23.5 | 0.23.5 |
vitess.io/vitessGo |
0.24.0 up to 0.24.2 | 0.24.2 |
vitessAzure Linux:3 |
before 19.0.4-16 | 19.0.4-16 |
vitess.io/vitessGo |
before 0.23.5, 0.24.0 up to 0.24.2 | 0.23.50.24.2 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-104252 is a critical vulnerability (CVSS 9.8) in Linuxfoundation Vitess, published October 13, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.17%, the 67th percentile. Fixed in vitess.io/vitess 0.23.5.
References
github.com/vitessio/vitess/security/advisories/GHSA-v75v-6fpf-gvw8
github.com/vitessio/vitess/pull/20255
github.com/vitessio/vitess/pull/20273
github.com/vitessio/vitess/pull/20274
github.com/vitessio/vitess/commit/3140c1846cd120db34f33b2083139b4ab638aed2
github.com/vitessio/vitess/commit/976e1e0d78f9d29d02e5e31b4aa7e180648f08af
Show 7 moreShow less
github.com/vitessio/vitess/commit/c1ed96302e658190168c971afdac730cf70e43f7
github.com/vitessio/vitess/releases/tag/v23.0.5
github.com/vitessio/vitess/releases/tag/v24.0.2
nvd.nist.gov/vuln/detail/CVE-2026-104252
github.com/advisories/GHSA-v75v-6fpf-gvw8
github.com/CVEProject/cvelistV5/tree/main/cves/2026/104xxx/CVE-2026-104252.json
github.com/vitessio/vitess
Left out here: the rest of 2 source descriptions. The JSON record has them.