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

CVE-2025-13383

CVE-2025-13383 Cross-Site Scripting in Bestwebsoft
📅 PUBLISHED: 2025-11-25 07:28 UTC 🔄 UPDATED: 2026-08-12 14:52 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.15%
👁️
0.15% probability
3.8× 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.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 6.1
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: N Availability None
6.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-13383 is a Stored Cross-Site Scripting (XSS) vulnerability in the Job Board by BestWebSoft plugin for WordPress, affecting all versions up to and including 1.2.1. The vulnerability arises from the plugin storing the entire unsanitized $_GET superglobal array into the database via update_user_meta() when users save search results. This stored data is later output without proper escaping, allowing unauthenticated attackers to inject arbitrary web scripts. The attack requires user interaction (tricking a user into performing a search and saving the results), but once stored, the malicious script executes whenever the victim accesses the saved search or views their profile. The CVSS score is 6.1 (Medium), and no official patch has been released as of the latest analysis.

⚡ 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 through the official WordPress plugin repository and third-party marketplaces. Since the plugin is part of the WordPress ecosystem, any site running the vulnerable version is at risk. The lack of a patch means site administrators must rely on manual mitigation or removal of the plugin. The plugin’s update mechanism does not currently provide a fix, making this a supply chain risk for all users of the Job Board plugin.

CVSS Breakdown & Threat Level

  • CVSS Score: 6.1 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
  • Attack Vector (AV): Network – The vulnerability can be exploited remotely.
  • Attack Complexity (AC): Low – No special conditions are required.
  • Privileges Required (PR): None – Unauthenticated attackers can trigger the vulnerability.
  • User Interaction (UI): Required – The victim must perform a search and save the results.
  • Scope (S): Changed – The injected script can affect other components (e.g., user profiles).
  • Confidentiality (C): Low – Limited data exposure possible.
  • Integrity (I): Low – Script injection can modify content.
  • Availability (A): None – No direct impact on availability.

Threat Level: Medium. The need for user interaction reduces the immediate risk, but the stored nature of the XSS means a single successful trick can lead to persistent compromise of user sessions and data.

Deep Dive & Mechanics

The vulnerability is rooted in the plugin’s handling of search result saving. When a user performs a job search and saves the results, the plugin uses update_user_meta() to store the entire $_GET superglobal array into the user’s metadata. This array contains all query parameters from the URL, including any malicious JavaScript payloads an attacker may have injected. Later, when the user views their saved search or profile, the plugin outputs this stored data without proper escaping (e.g., without using esc_html() or wp_kses()), allowing the injected script to execute in the browser.

Key Points:

  • The $_GET array is stored as-is, without sanitization.
  • The output occurs on pages like the user’s profile or saved search results.
  • The attack is unauthenticated, but requires the victim to be tricked into clicking a crafted link and then saving the search results.
  • The stored XSS persists until the user deletes the saved search or the metadata is cleared.

Vulnerable vs. Patched Code

Vulnerable Code (version <= 1.2.1):

// In the plugin's save search function
update_user_meta( $user_id, 'saved_search', $_GET );
// In the output function
$saved_search = get_user_meta( $user_id, 'saved_search', true );
echo $saved_search['search_term']; // No escaping

Patched Code (hypothetical fix):

// Sanitize input before storing
$sanitized_get = array_map( 'sanitize_text_field', $_GET );
update_user_meta( $user_id, 'saved_search', $sanitized_get );
// Escape output
$saved_search = get_user_meta( $user_id, 'saved_search', true );
echo esc_html( $saved_search['search_term'] );

The fix involves sanitizing the $_GET array with sanitize_text_field() before storage and escaping all output with esc_html().

Exploitation & Lab Setup

Red Team (Attack Simulation)

Prerequisites:

  • A WordPress site with the Job Board plugin (version <= 1.2.1) installed and active.
  • A victim user who is logged in and willing to click a crafted link.

Exploit Steps:

  1. Craft a malicious URL containing a JavaScript payload in a query parameter, e.g.:
    http://target-site.com/job-board/?search_term=<script>alert('XSS')</script>
    
  2. Trick the victim into clicking this link (e.g., via phishing email or social engineering).
  3. The victim performs the search and saves the results (e.g., by clicking a "Save Search" button).
  4. The plugin stores the entire $_GET array, including the payload, into the user’s metadata.
  5. When the victim later views their saved search or profile, the script executes.

Example Payload:

http://target-site.com/job-board/?search_term=<img src=x onerror=alert(document.cookie)>

Blue Team (Defense & Detection)

Detection:

  • Monitor for unusual query parameters containing <script>, <img>, or other HTML tags in the Job Board plugin’s search functionality.
  • Look for update_user_meta() calls with unsanitized $_GET data in the plugin’s code.
  • Use web application firewalls (WAF) to block common XSS payloads in query strings.

Mitigation:

  • Disable or remove the Job Board plugin until a patch is available.
  • Implement a custom filter to sanitize $_GET data before it reaches the plugin.
  • Educate users about phishing links and the risks of saving search results from untrusted URLs.

Indicators of Compromise (IOCs)

  • URL Patterns: Requests to /job-board/ with query parameters containing <script>, <img>, onerror, onload, or other event handlers.
  • Database Entries: User meta entries with key saved_search containing HTML or JavaScript in any field.
  • Logs: Access logs showing unusual query strings with encoded or raw XSS payloads.
  • Network Traffic: Outbound connections from the victim’s browser to attacker-controlled domains (if the payload exfiltrates data).

Detection Engineering

YARA Rule

rule CVE_2025_13383_Stored_XSS {
    meta:
        description = "Detects stored XSS payloads in WordPress user meta for Job Board plugin"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-13383"
    strings:
        $meta_key = "saved_search"
        $xss_payload = /<[^>]*script[^>]*>/
        $xss_event = /on\w+\s*=\s*['\"][^'\"]*['\"]/
    condition:
        $meta_key and ($xss_payload or $xss_event)
}

Sigma Rule

title: CVE-2025-13383 Stored XSS in Job Board Plugin
id: 8a3f7c2e-1b4d-4f9a-8c6e-5d2f1a3b7c9e
status: experimental
description: Detects potential XSS attempts targeting the Job Board plugin by BestWebSoft
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'GET'
        cs-uri-query|contains:
            - '<script'
            - '<img'
            - 'onerror'
            - 'onload'
            - 'onmouseover'
    condition: selection
falsepositives:
    - Legitimate use of HTML in search terms (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-13383 Stored XSS Attempt"; flow:to_server,established; content:"/job-board/"; http_uri; pcre:"/(<script|<img|onerror|onload|onmouseover)/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin: Deactivate and remove the Job Board plugin from all WordPress installations until a patch is released.
  2. Sanitize existing data: If the plugin must remain active, manually sanitize all existing saved_search user meta entries using a database query:
    UPDATE wp_usermeta SET meta_value = REPLACE(meta_value, '<script>', '') WHERE meta_key = 'saved_search';
    
  3. Implement WAF rules: Block query parameters containing common XSS patterns.

Long-Term Fix:

  • The vendor (BestWebSoft) must release a patched version that sanitizes $_GET input and escapes output. Until then, consider using an alternative job board plugin with active security maintenance.

Workaround:

  • Add a custom filter to the theme’s functions.php to sanitize $_GET before the plugin processes it:
    add_filter( 'query_vars', function( $vars ) {
        foreach ( $vars as $key => $value ) {
            $vars[$key] = sanitize_text_field( $value );
        }
        return $vars;
    });
    

Valters IT
Securing Digital Frontiers

👁️ 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:"Job Board"
http.html:"bestwebsoft"
http.html:"job-board"

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