Independent Analytics 404 tracking permits unauthenticated stored XSS
Independent Analytics through 2.15.0 allows unauthenticated stored cross-site scripting through an encoded 404 URL. An attacker can request a crafted 404 path, obtain the tracking payload and MD5 signature embedded in the resulting public page, and submit the signed payload.not_found_url value to POST /wp-json/iawp/search. Resource_Identifier::for_current_page() and View::fetch_or_create_resource() carry the value into the analytics resources table. Table::get_cell_content() later applies urldecode() after esc_url(), reconstructing percent-encoded script-capable markup when the stored URL entry is displayed.
- Component
- Independent Analytics – WordPress Analytics Plugin
- Plugin slug
independent-analytics- Affected
- <= 2.15.0
- Safe version
2.15.1- Published
- Aug 05, 2026
This CVE was published Aug 05, 2026 and is one of 2 known issues for this plugin.
Update, patch or deactivate.
Update Independent Analytics to 2.15.1 or later. Review recorded 404 URLs for encoded markup and invalidate privileged sessions if administrators or other trusted users viewed suspicious analytics entries while vulnerable.
A safe version is available, so updating to that version or later is the preferred remediation. If an immediate update is not practical, consider a targeted application patch or temporarily restricting the affected functionality.
Deactivate only when warranted by your risk profile, or when advised by your hosting provider in the limited circumstances where the vulnerability cannot otherwise be mitigated. If you’re unsure which action is appropriate, contact Fused or your hosting provider for guidance.
Technical description
The Independent Analytics plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 404 not_found_url tracking parameter in versions up to, and including, 2.15.0. This is due to the get_cell_content() function applying urldecode() after esc_url() when rendering the URL column for 404 entries — a sequence that allows percent-encoded HTML to pass URL validation and then be reconstructed as raw markup, which wp_kses_post() does not strip because it retains img elements and data-* attributes, and because the public REST endpoint /iawp/search accepts unauthenticated requests as long as they carry a signature that is itself embedded in public page HTML. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.
CVE / CNA vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Primary and upstream sources
- NVD record for CVE-2026-17506
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- WordPress upstream reference plugins.trac.wordpress.org
- Wordfence advisory wordfence.com