The Query Monitor plugin for WordPress has Reflected Cross-Site Scripting via Request URI
Date: 2026-03
Affected: composer/johnbillion/query-monitor
Attack vector: xss
Category: vulnerability-disclosure
Severity: Medium
CVE: CVE-2026-4267
CWE: CWE-80
CVSS: 6.1 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N)

### Impact The Query Monitor plugin for WordPress is vulnerable to Reflected Cross-Site Scripting via the `$_SERVER['REQUEST_URI']` parameter in all versions up to, and including, 3.20.3 due to insufficient output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that execute if they can successfully trick an Administrator-level user into performing an action such as clicking on a link. On admin requests, the plugin reads user controlled data from `$_SERVER['REQUEST_URI']` and stores it in the request field, then renders `request`, `matched_query`, and `query_string` through `format_url()`. If the attacker supplied string does not contain `&`, `format_url()` returns it without HTML escaping, which allows injected HTML or JavaScript from the request target to be inserted directly into the page inside a `<code>` element and executed in the victim's browser. ### Patches This issue has been patched in Query Monitor 3.20.4. ### Credits Many thanks to Dmitrii Ignatyev at CleanTalk for responsibly disclosing this vulnerability. ### How can I report a security bug? You can submit a private security vulnerability report to Query Monitor via [the Security tab on the GitHub repo](https://github.com/johnbillion/query-monitor/security). The GitHub Security Advisory process facilitates private collaboration on security issues. You'll receive credit for a valid report and a CVE if necessary.


Mitigations:

Architectural layers (MAESTRO):