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

CVE-2025-12175

CVE-2025-12175 Unauthorized Access in The events calendar
📅 PUBLISHED: 2025-10-31 08:25 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.03%
👁️
0.03% probability
<1× above the median CVE
Tier: LOW
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 4.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-12175 is a medium-severity vulnerability in the The Events Calendar plugin for WordPress, affecting all versions up to and including 6.15.9. The flaw resides in the tec_qr_code_modal AJAX endpoint, which lacks a proper capability check. This allows authenticated attackers with Subscriber-level access or higher to view draft event names and generate or view QR codes for them. The vulnerability exposes sensitive event planning data, potentially leaking unpublished event details.

As a WordPress plugin vulnerability, this issue is specific to the WordPress ecosystem and does not involve the underlying web server (Apache/Nginx). The CVSS score of 4.3 reflects the low complexity and network-based attack vector, but the impact is limited to information disclosure.

⚡ 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. Users should monitor the plugin's update channel for a patched version. No known supply chain compromise has been reported.

CVSS Breakdown & Threat Level

  • CVSS Score: 4.3 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: Low (Subscriber)
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: Low (draft event names and QR codes)
  • Integrity Impact: None
  • Availability Impact: None

The threat level is considered Medium due to the low privileges required and the potential for information leakage of unpublished events.

Deep Dive & Mechanics

The vulnerability exists in the tec_qr_code_modal AJAX handler, which is registered in the plugin's code. This endpoint is intended to generate QR codes for events, but it fails to verify that the requesting user has the necessary capabilities (e.g., edit_posts or edit_others_posts) to view draft events.

The AJAX action is hooked to wp_ajax_tec_qr_code_modal and wp_ajax_nopriv_tec_qr_code_modal. The nopriv version is likely not present, but the authenticated version lacks a capability check. An attacker with a Subscriber account can send a POST request to /wp-admin/admin-ajax.php with the action tec_qr_code_modal and an event ID. The endpoint will return the event name and a QR code image URL, even if the event is in draft status.

The QR code generation function uses a third-party library (likely phpqrcode or similar) to generate a PNG image. The vulnerability does not allow modification of events or execution of arbitrary code, only unauthorized viewing of draft event data.

Vulnerable vs. Patched Code

Vulnerable Code (<= 6.15.9):

add_action('wp_ajax_tec_qr_code_modal', 'tec_qr_code_modal_callback');
function tec_qr_code_modal_callback() {
    $event_id = intval($_POST['event_id']);
    $event = get_post($event_id);
    // No capability check
    $event_name = $event->post_title;
    $qr_code_url = generate_qr_code($event_id);
    wp_send_json_success(array('name' => $event_name, 'qr' => $qr_code_url));
}

Patched Code (Expected):

add_action('wp_ajax_tec_qr_code_modal', 'tec_qr_code_modal_callback');
function tec_qr_code_modal_callback() {
    if (!current_user_can('edit_post', $_POST['event_id'])) {
        wp_send_json_error('Unauthorized');
        return;
    }
    $event_id = intval($_POST['event_id']);
    $event = get_post($event_id);
    $event_name = $event->post_title;
    $qr_code_url = generate_qr_code($event_id);
    wp_send_json_success(array('name' => $event_name, 'qr' => $qr_code_url));
}

The patched version adds a current_user_can('edit_post', $event_id) check to ensure the user has permission to view the event.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A WordPress site with The Events Calendar plugin <= 6.15.9
  • A valid Subscriber-level account (username/password or nonce)

Exploitation Steps:

  1. Log in as a Subscriber and obtain a valid WordPress nonce for AJAX requests.
  2. Send a POST request to /wp-admin/admin-ajax.php with the following parameters:
    • action: tec_qr_code_modal
    • event_id: ID of a draft event (e.g., 123)
    • _ajax_nonce: [valid nonce]
  3. The response will contain the draft event name and a QR code URL.

Example cURL command:

curl -X POST https://target.com/wp-admin/admin-ajax.php \
  -d "action=tec_qr_code_modal&event_id=123&_ajax_nonce=abc123"

Expected Response:

{"success":true,"data":{"name":"Draft Event Name","qr":"https://target.com/wp-content/uploads/qr-codes/123.png"}}

Blue Team

Detection:

  • Monitor AJAX requests to admin-ajax.php with the tec_qr_code_modal action from low-privilege users.
  • Look for unusual patterns of event ID enumeration (sequential IDs, high volume).
  • Check for Subscriber accounts accessing draft events.

Hunting:

  • Search web server logs for POST /wp-admin/admin-ajax.php with action=tec_qr_code_modal.
  • Correlate with user roles; flag requests from Subscribers.

Prevention:

  • Apply the patch as soon as it becomes available.
  • Restrict Subscriber access to AJAX endpoints using a Web Application Firewall (WAF) rule.
  • Implement additional logging for AJAX actions.

Indicators of Compromise (IOCs)

  • Network:
    • POST requests to /wp-admin/admin-ajax.php with action=tec_qr_code_modal
    • Response containing "success":true and "name" field with draft event titles
  • File System:
    • QR code images in /wp-content/uploads/qr-codes/ for draft events
  • Logs:
    • WordPress debug log entries showing tec_qr_code_modal action from unexpected user roles

Detection Engineering

YARA Rule

rule Detect_CVE_2025_12175_Exploit {
    meta:
        description = "Detects exploitation attempts of CVE-2025-12175 in WordPress The Events Calendar plugin"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-12175"
    strings:
        $ajax_action = "tec_qr_code_modal"
        $wp_ajax = "wp_ajax_tec_qr_code_modal"
        $event_id = "event_id"
    condition:
        any of them
}

Sigma Rule

title: CVE-2025-12175 Exploitation Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects exploitation of missing capability check in The Events Calendar plugin
author: Valters IT
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: POST
        cs-uri-query|contains: 'action=tec_qr_code_modal'
    condition: selection
falsepositives:
    - Legitimate admin users generating QR codes
level: medium

Suricata Rule

alert http any any -> any any (
    msg:"CVE-2025-12175 - The Events Calendar QR Code Modal Exploit";
    flow:to_server,established;
    content:"POST";
    http_method;
    content:"/wp-admin/admin-ajax.php";
    http_uri;
    content:"action=tec_qr_code_modal";
    http_client_body;
    sid:1000001;
    rev:1;
    reference:cve,2025-12175;
    classtype:attempted-recon;
    priority:2;
)

Remediation & Mitigation

Immediate Actions:

  1. Update the plugin to the latest version once a patch is released (check WordPress plugin repository).
  2. Disable the plugin if immediate patching is not possible and the functionality is not critical.
  3. Restrict Subscriber capabilities using a plugin like "User Role Editor" to remove AJAX access.

Long-term Measures:

  • Implement a Web Application Firewall (WAF) rule to block tec_qr_code_modal requests from non-admin users.
  • Regularly audit WordPress user roles and capabilities.
  • Monitor for plugin updates and apply them promptly.

Workaround:

  • Add a custom capability check via a mu-plugin:
add_action('wp_ajax_tec_qr_code_modal', 'tec_qr_code_modal_patch', 1);
function tec_qr_code_modal_patch() {
    if (!current_user_can('edit_posts')) {
        wp_die('Unauthorized', 403);
    }
}

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:"Events Calendar"
http.html:"wp-content/plugins/the-events-calendar"

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