Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Stored XSS payload fires only when a victim loads the page (UI:R); a translator credential is required (PR:L); scope change confirmed as execution occurs in victim's browser context.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
Lifecycle Timeline
2DescriptionCVE.org
The Loco Translate plugin for WordPress is vulnerable to Stored Cross-Site Scripting via PO File Extracted Comments in all versions up to, and including, 2.8.7 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with translator-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.
AnalysisAI
Stored XSS in the Loco Translate WordPress plugin (versions up to and including 2.8.7) allows authenticated users holding the translator role or above to inject persistent malicious scripts via crafted PO file extracted comments. When an affected translation page is subsequently loaded by another authenticated user - including site administrators - the stored payload executes in that user's browser context, enabling session hijacking, credential theft, or unauthorized administrative actions. No public exploit code or CISA KEV listing has been identified at time of analysis; a fix commit is confirmed in the WordPress plugin trac repository, and the Wordfence advisory provides the authoritative disclosure record.
Technical ContextAI
Loco Translate (CPE: cpe:2.3:a:timwhitlock:loco_translate) is a WordPress plugin for managing GNU gettext PO and MO translation files directly within the WordPress admin interface. PO files support 'extracted comments' - lines prefixed with #. - that source-code parsers insert to provide translators with context about where a string is used. The root cause (CWE-79: Improper Neutralization of Input During Web Page Generation) is that the plugin's server-side save handler (SaveController.php at line 52) stores extracted comments in the database without sanitizing HTML metacharacters, and the admin-side JavaScript renderer (admin.js at lines 1404 and 3533, present identically in versions 2.8.4 and 2.8.5) outputs those stored values to the DOM without escaping, completing the stored-XSS sink. The flaw spans both the ingestion path (PHP) and the rendering path (JavaScript), indicating the absence of defence-in-depth sanitization at either layer.
RemediationAI
The primary fix is to upgrade Loco Translate to the version that incorporates changeset 3631056, referenced at https://plugins.trac.wordpress.org/changeset?reponame=&old=3631056%40loco-translate&new=3631056%40loco-translate; the exact version tag of the released patch is not stated in the available input data, so administrators should verify the current stable release in the WordPress plugin repository and confirm it is numbered above 2.8.7. If an immediate upgrade is not feasible, the most targeted compensating control is to audit all accounts holding the translator role and revoke that grant from any user who does not strictly require it, since the vulnerability is gated on translator-level authentication - reducing the pool of accounts capable of injecting payloads directly reduces exposure. As a secondary layer, restricting access to the WordPress admin interface to known trusted IP ranges via server-level allow/deny rules or a WAF policy will limit the attack surface, at the operational cost of blocking legitimate remote translators who work outside those ranges.
More in Loco Translate
View allThe Loco Translate WordPress plugin before 2.5.4 mishandles data inputs which get saved to a file, which can be renamed
The Loco Translate WordPress plugin before 2.6.1 does not properly remove inline events from elements in the source tran
Remote code execution in the Loco Translate WordPress plugin (all versions up to and including 2.8.5) is reachable throu
Reflected Cross-Site Scripting in Loco Translate WordPress plugin versions up to 2.8.2 allows unauthenticated attackers
Loco Translate plugin for WordPress versions up to 2.8.2 allows authenticated attackers with Translator-level access to
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-59864
GHSA-2cg4-q2f7-q8x7