WordPress plugins that provide business directory functionality often allow administrators and editors to customize categories, icons, images, and other visual elements. While these features improve usability, they also increase the attack surface if user-controlled input is not properly validated before being stored and rendered.

During security testing of the GeoDirectory plugin, a Stored Cross-Site Scripting (Stored XSS) vulnerability was discovered affecting versions prior to 2.8.110. The vulnerability allows an authenticated Editor (or higher) to inject malicious JavaScript into the Map Icon parameter of a Place Category. The payload is permanently stored and later executed whenever the vulnerable page is viewed by another privileged user.

Because the malicious payload is stored inside the WordPress database, every administrator who accesses the affected interface can unknowingly execute attacker-controlled JavaScript, potentially resulting in complete administrative account compromise.

CVECVE-2025-15677
Plugin VersionGeoDirectory < 2.8.110
All Time1 164 573
Active installations10 000+
Publicly PublishedJuly 24, 2026
Last UpdatedJuly 24, 2026
ResearcherArtyom Krugov
PoCYes
ExploitNo
Referencehttps://wpscan.com/vulnerability/bb6daced-3ee3-4ec7-a221-9981cd85285a/
https://www.cve.org/CVERecord?id=CVE-2025-15677
Plugin Security Certification by CleanTalk
Logo of the plugin

Join the community of developers who prioritize security. Highlight your plugin in the WordPress catalog.

PSC by Cleantalk

Timeline

April 16, 2025Plugin testing and vulnerability detection in GeoDirector were completed.
April 16, 2025The vulnerability was reported with PoC, description, and recommendations for remediation.
July 24, 2026CVE-2025-15677 was publicly published by WPSCAN.

Discovery of the Vulnerability

The vulnerability was discovered during a security assessment of the GeoDirectory plugin while reviewing administrative functionality responsible for managing business directory categories.

The vulnerable functionality is located in:

Places → Place Categories

Each category allows administrators to define a custom Map Icon.

Although the interface normally expects an image URL, the value supplied through the HTTP request is insufficiently validated before being saved.

Understanding of Stored XSS attacks

Stored Cross-Site Scripting occurs when malicious JavaScript is permanently stored by the application and later delivered to other users.

Unlike Reflected XSS, Stored XSS does not require victims to click a specially crafted URL.

The attack flow is simple:

  1. The attacker submits malicious input.
  2. The application stores the payload.
  3. Another user opens the vulnerable page.
  4. The browser executes the injected JavaScript automatically.

In WordPress environments this vulnerability is particularly dangerous because many administrative interfaces display user-controlled content without sufficient output encoding.

Exploiting the Stored XSS Vulnerability

The vulnerability can be reproduced using the following steps.

POC:

PoC Payload:
123123"onmouseover='alert(999)'

____

When the affected image is rendered and interacted with, the injected JavaScript executes.

Recommendations for Improved Security

To mitigate the risks associated with CVE-2025-15677, administrators should immediately update GeoDirectory to version 2.8.110 or later.

Developers should ensure that all values submitted through administrative interfaces—including the Map Icon field and related parameters such as ct_cat_icon[src]—are properly validated, sanitized, and securely encoded before being stored or rendered. User-controlled data should never be inserted directly into HTML attributes without appropriate escaping.

WordPress escaping functions such as esc_attr(), esc_url(), esc_html(), and sanitization functions like sanitize_text_field() or esc_url_raw() should be consistently applied based on the expected data type. If only image URLs are intended, strict allowlisting and URL validation should be enforced instead of accepting arbitrary input.

By addressing Stored XSS like CVE-2025-15677, WordPress site owners can reduce the risk from unsafe media metadata and protect visitors from browser-side compromise. Stay vigilant, stay secure.

#WPSCANSecurity #StoredXSS #WebsiteSafety #StayProtected #Vulnerability

Use CleanTalk solutions to improve the security of your website

CVE-2025-15677 – GeoDirectory < 2.8.110 – Editor+ Stored XSS – POC

Artyom Krugov

Cybersecurity Specialist with 4 years of hands-on experience in web application and WordPress security. Holder of the OSCP+ certification and author of 80+ publicly disclosed CVEs affecting WordPress plugins and themes. Specialized in vulnerability research, penetration testing, website incident response, malware removal, and security hardening of production environments. Experienced in identifying and validating high-impact vulnerabilities in WordPress plugins, themes, and custom web applications, as well as providing practical remediation guidance to improve overall security posture. Strong background in web application security, source code review, vulnerability assessment, exploit validation, and post-compromise recovery of infected websites.

Visit Author's Website

See all posts by krugov-artyom

Leave a Reply

Your email address will not be published. Required fields are marked *