{"id":"CVE-2026-77610","aliases":["EUVD-2026-83186","GHSA-q5fm-9mx6-44f4"],"status":"published","title":"Semantic MediaWiki has a query debug output XSS (`DebugFormatter`)","description":"Semantic MediaWiki is a free, open-source extension to MediaWiki that lets users store and query data within the wiki's pages. Prior to version 7.2.0, query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping. On `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices. This is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Version 7.2.0 patches the issue.","severity":{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00283,"percentile":0.21042,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-79"],"published":"2026-09-18T16:53:23Z","modified":"2026-10-28T02:30:51Z","fixes":[{"ecosystem":"Packagist","package":"mediawiki/semantic-media-wiki","fixed_in":["7.2.0"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"mediawiki/semantic-media-wiki","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"7.1.0"},{"fixed":"7.2.0"}]}]},{"source":"osv","ecosystem":"Packagist","package":"mediawiki/semantic-media-wiki","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.2.0"}]}],"versions":["1.9","1.9-RC1","1.9.0.1","1.9.0.2","1.9.1","1.9.1.1","1.9.2","1.9beta1","2.0","2.0-RC1","2.0-RC2","2.0-RC3","2.1.0","2.1.0-RC1","2.1.1","2.1.2","2.1.3","2.2.0","2.2.0-RC1","2.2.1","2.2.2","2.2.3","2.3.0","2.3.0-RC1","2.3.1","2.4.0","2.4.0-RC1","2.4.1","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.5.0","2.5.0-rc.1","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.5.8","3.0.0","3.0.0-rc.1","3.0.0-rc.2","3.0.1","3.0.2","3.1.0","3.1.0-rc.1","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.2.0","3.2.0-rc.1","3.2.0-rc.2","3.2.1","3.2.2","3.2.3","4.0.0","4.0.1","4.0.2","4.1.0","4.1.1","4.1.2","4.1.3","4.2.0","5.0.0","5.0.1","5.0.2","5.1.0","6.0.0","6.0.1","7.0.0","7.1.0"]}],"products":[{"vendor":"semanticmediawiki","product":"semanticmediawiki"}],"references":[{"url":"https://github.com/SemanticMediaWiki/SemanticMediaWiki/security/advisories/GHSA-q5fm-9mx6-44f4","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/SemanticMediaWiki/SemanticMediaWiki/releases/tag/7.2.0","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-q5fm-9mx6-44f4"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/77xxx/CVE-2026-77610.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77610","tags":["advisory"]},{"url":"https://github.com/SemanticMediaWiki/SemanticMediaWiki","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-77610","title":"Semantic MediaWiki has a query debug output XSS (`DebugFormatter`)","description":"Semantic MediaWiki is a free, open-source extension to MediaWiki that lets users store and query data within the wiki's pages. Prior to version 7.2.0, query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping. On `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices. This is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Version 7.2.0 patches the issue.","status":"published","published":"2026-09-18T16:55:01.848Z","modified":"2026-09-21T20:49:32.926Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:20:15.712761Z"}],"euvd":[{"id":"EUVD-2026-83186","description":"Semantic MediaWiki is a free, open-source extension to MediaWiki that lets users store and query data within the wiki's pages. Prior to version 7.2.0, query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping. On `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices. This is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Version 7.2.0 patches the issue.","status":"published","published":"2026-09-18T16:55:01Z","modified":"2026-09-21T20:49:32Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T17:28:04.224689Z"}],"ghsa":[{"id":"GHSA-q5fm-9mx6-44f4","title":"Semantic MediaWiki has a query debug output XSS (`DebugFormatter`)","description":"## Query debug output XSS\n\n#### Failure mode\n\nSemantic MediaWiki's query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping:\n\n- `buildHTML()` echoes the re-serialized ASK query string escaping only `[`; `\u003c`, `\u003e`, `\"`, `'` pass through.\n- `prettifySQL()` returns the generated SQL verbatim. Query value literals are inlined into the SQL through the database layer's quoting (SQL-escaping only, no HTML encoding), so markup in a value survives.\n- `prettifyExplain()` echoes `EXPLAIN` output; on PostgreSQL the plan text contains the `WHERE` literals.\n\nOn `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices.\n\nThis is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Example request:\n\n```\nSpecial:Ask?q=[[Text::\u003cscript\u003ealert(document.domain)\u003c/script\u003e]]\u0026debug=1\n```\n\n#### Remediation\n\n- Apply output-context escaping at the `DebugFormatter` boundary. The `buildHTML()` contract already assumes its inputs are HTML-safe, but its callers do not honour that; escape each entry value on emission, and the SQL and `EXPLAIN` strings before they are wrapped.\n- Escaping only the query-string echo is insufficient: `prettifySQL()` and the \"Auxilliary Tables\" executed-query text carry the same attacker-controlled literals.\n\n#### Scope\n\nThe `prettifySPARQL()` sink already encodes `\u003c` and `\u003e` and is not affected. The same debug path is also reachable through inline `{{#ask:...|format=debug}}`, but that output returns into parser context and is sanitized there; the reflected `Special:Ask` path is the exposed sink.\n\n#### Relationship to GHSA-5jhc-3j2f-52rv\n\nThis issue was identified while splitting the consolidated report GHSA-5jhc-3j2f-52rv into per-vulnerability advisories. It is distinct from the four items in that report (plain table header, `sep`, `SearchByProperty` value, open redirect) and from `Special:Ask` form-input XSS (which is escaped separately).","status":"published","published":"2026-09-18T16:53:23Z","modified":"2026-09-18T16:53:24Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:41:19.455935Z"}],"nvd":[{"id":"CVE-2026-77610","description":"Semantic MediaWiki is a free, open-source extension to MediaWiki that lets users store and query data within the wiki's pages. Prior to version 7.2.0, query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping. On `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices. This is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Version 7.2.0 patches the issue.","status":"published","published":"2026-09-18T17:17:01.413Z","modified":"2026-09-24T21:22:19.873Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:12:50.043898Z"}],"osv":[{"id":"CVE-2026-77610","title":"Semantic MediaWiki has a query debug output XSS (`DebugFormatter`)","description":"Semantic MediaWiki is a free, open-source extension to MediaWiki that lets users store and query data within the wiki's pages. Prior to version 7.2.0, query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping. On `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices. This is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Version 7.2.0 patches the issue.","status":"published","published":"2026-09-18T16:55:01.848Z","modified":"2026-10-28T02:30:51.894628491Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:45:17.44708Z"},{"id":"GHSA-q5fm-9mx6-44f4","title":"Semantic MediaWiki has a query debug output XSS (`DebugFormatter`)","description":"## Query debug output XSS\n\n#### Failure mode\n\nSemantic MediaWiki's query debug output (`format=debug`, or the `debug` request parameter on `Special:Ask`) is assembled by `SMW\\Query\\DebugFormatter` and emitted as raw HTML. Several of its sinks apply no output-context encoding, so attacker-controlled query input is reflected into the page without escaping:\n\n- `buildHTML()` echoes the re-serialized ASK query string escaping only `[`; `\u003c`, `\u003e`, `\"`, `'` pass through.\n- `prettifySQL()` returns the generated SQL verbatim. Query value literals are inlined into the SQL through the database layer's quoting (SQL-escaping only, no HTML encoding), so markup in a value survives.\n- `prettifyExplain()` echoes `EXPLAIN` output; on PostgreSQL the plan text contains the `WHERE` literals.\n\nOn `Special:Ask` the resulting string is concatenated into the page and sent through `OutputPage::addHTML`, never through the MediaWiki parser or Sanitizer. No special user right is required; an anonymous request suffices.\n\nThis is a reflected XSS: the payload is taken from the request and echoed in the same response. Exploitation requires the query condition to target a text/blob-typed property (whose value is re-serialized verbatim); the predefined `_txt` properties (`Text`, etc.) that ship on every install satisfy this, so no attacker-created content is needed. Example request:\n\n```\nSpecial:Ask?q=[[Text::\u003cscript\u003ealert(document.domain)\u003c/script\u003e]]\u0026debug=1\n```\n\n#### Remediation\n\n- Apply output-context escaping at the `DebugFormatter` boundary. The `buildHTML()` contract already assumes its inputs are HTML-safe, but its callers do not honour that; escape each entry value on emission, and the SQL and `EXPLAIN` strings before they are wrapped.\n- Escaping only the query-string echo is insufficient: `prettifySQL()` and the \"Auxilliary Tables\" executed-query text carry the same attacker-controlled literals.\n\n#### Scope\n\nThe `prettifySPARQL()` sink already encodes `\u003c` and `\u003e` and is not affected. The same debug path is also reachable through inline `{{#ask:...|format=debug}}`, but that output returns into parser context and is sanitized there; the reflected `Special:Ask` path is the exposed sink.\n\n#### Relationship to GHSA-5jhc-3j2f-52rv\n\nThis issue was identified while splitting the consolidated report GHSA-5jhc-3j2f-52rv into per-vulnerability advisories. It is distinct from the four items in that report (plain table header, `sep`, `SearchByProperty` value, open redirect) and from `Special:Ask` form-input XSS (which is escaped separately).","status":"published","published":"2026-09-18T16:53:23Z","modified":"2026-09-18T17:00:04.982326153Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:46:54.055966Z"}]}}
