Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Network-reachable REST endpoint, no auth (API key is publicly derivable), but victim must load the poisoned page (UI:R); injected script runs in site origin so scope changes with low C/I impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Lifecycle Timeline
2DescriptionCVE.org
The GPTranslate - Multilingual AI Translation for WordPress: Automatically Translate Websites plugin for WordPress is vulnerable to Stored Cross-Site Scripting via REST API Translation Storage in all versions up to, and including, 2.31 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The deterministically derived API key (sha256 of the site URL) is printed in the HTML source of every page via the JavaScript variable gptApiKey, meaning any unauthenticated visitor can retrieve the key and submit malicious translation payloads to the /wp-json/gptranslate/v1/request endpoint without any additional precondition.
Articles & Coverage 2
AnalysisAI
Stored cross-site scripting in the GPTranslate - Multilingual AI Translation WordPress plugin (versions ≤ 2.31) allows unauthenticated attackers to inject arbitrary JavaScript into translated pages via the /wp-json/gptranslate/v1/request REST endpoint. Because the API key is deterministically derived as sha256(site_url) and exposed in every page's HTML as the gptApiKey JavaScript variable, any visitor can recover it and submit malicious translation payloads that execute in the browsers of subsequent visitors. No public exploit identified at time of analysis, but the exposed key makes exploitation trivial once the technique is known.
Technical ContextAI
GPTranslate is a WordPress plugin by John Dagelmore that performs AI-driven page translation and caches translated content server-side. The vulnerability is a classic CWE-79 (Improper Neutralization of Input During Web Page Generation) caused by insufficient input sanitization on the REST endpoint /wp-json/gptranslate/v1/request and insufficient output escaping when the cached translation is rendered. The root design flaw compounds the XSS: the plugin uses a sha256 hash of the public site URL as its API authentication token and prints it to every rendered page via the gptApiKey JS variable (see admin.js and gptranslate.php around lines 1134/3578/3654 in tag 2.31), so the 'secret' is effectively public. The affected CPE is cpe:2.3:a:john-dagelmore:gptranslate_-_multilingual_ai_translation_for_wordpress.
RemediationAI
Upgrade to GPTranslate 2.32 or later, which per the WordPress plugin trac (https://plugins.trac.wordpress.org/browser/gptranslate/tags/2.32/gptranslate.php) reworks the affected request handler around lines 1104 and 3574; this corresponds to an upstream fix available (released patched version 2.32 referenced in the trac repository). If immediate patching is not possible, deactivate the GPTranslate plugin entirely - given the API key is derivable from the public site URL, no firewall rule on the /wp-json/gptranslate/v1/request endpoint can fully mitigate exploitation without effectively disabling the translation feature. As a compensating control, restrict access to /wp-json/gptranslate/v1/request via a WAF rule (Wordfence, Cloudflare, ModSecurity) and purge any cached translations created while ≤ 2.31 was installed, accepting the side effect that legitimate translation requests from end-user browsers will also be blocked. Review the Wordfence advisory for indicators and rule guidance.
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-36642
GHSA-j66v-hr5c-cjh2