☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Codepeople logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/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-46247

CVE-2025-46247 Missing Authorization in Codepeople
📅 PUBLISHED: 2025-04-22 10:15 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.16%
👁️
0.16% probability
3.9× 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 5.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-46247 is a Missing Authorization vulnerability in the Codepeople Appointment Booking Calendar WordPress plugin, affecting versions up to and including 1.3.92. The flaw allows unauthenticated attackers to access functionality that should be constrained by Access Control Lists (ACLs), potentially leading to unauthorized data exposure or manipulation of booking data. The vulnerability has a CVSS score of 5.3 (Medium), with a low EPSS probability (0.0%), indicating limited active exploitation at the time of analysis. No public exploit code or proof-of-concept is available, but the risk remains due to the lack of a vendor patch.

⚡ 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 are advised to monitor the plugin’s update channel and consider temporary deactivation if the plugin is not critical. No known supply chain compromise has been reported.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Base Score: 5.3 (Medium)
  • Attack Vector: Network (AV:N) – Exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions required.
  • Privileges Required: None (PR:N) – No authentication needed.
  • User Interaction: None (UI:N) – No victim action required.
  • Scope: Unchanged (S:U) – Impact confined to the vulnerable component.
  • Confidentiality Impact: Low (C:L) – Limited data exposure.
  • Integrity Impact: None (I:N) – No data modification.
  • Availability Impact: None (A:N) – No denial of service.

Threat Level: Medium. The vulnerability is easy to exploit but has limited impact. However, the lack of a patch increases the risk for unmaintained installations.

Deep Dive & Mechanics

The vulnerability resides in the Appointment Booking Calendar plugin’s REST API or AJAX handlers, where certain endpoints fail to enforce proper authorization checks. Specifically, the plugin exposes functions that allow reading or modifying booking data without verifying the user’s capabilities. An unauthenticated attacker can craft HTTP requests to these endpoints to:

  • Retrieve sensitive booking information (e.g., client names, email addresses, appointment details).
  • Potentially modify or cancel bookings if write endpoints are also unprotected.

The root cause is the absence of current_user_can() checks or nonce verification in the plugin’s callback functions. The plugin relies on WordPress’s default access controls, which are insufficient for custom endpoints.

Vulnerable vs. Patched Code

Since no patch is available, the following illustrates the vulnerable pattern and a hypothetical fix.

Vulnerable Code (appointment-booking-calendar.php):

add_action('wp_ajax_nopriv_get_bookings', 'abc_get_bookings');
function abc_get_bookings() {
    // No capability check
    $bookings = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}abc_bookings");
    wp_send_json($bookings);
}

Patched Code (Hypothetical):

add_action('wp_ajax_nopriv_get_bookings', 'abc_get_bookings');
function abc_get_bookings() {
    if (!current_user_can('manage_options')) {
        wp_die('Unauthorized', 403);
    }
    $bookings = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}abc_bookings");
    wp_send_json($bookings);
}

The fix adds a capability check (manage_options) to restrict access to administrators only.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites: A WordPress site with the vulnerable plugin installed and active.

Exploitation Steps:

  1. Identify the vulnerable endpoint (e.g., /wp-admin/admin-ajax.php?action=get_bookings).
  2. Send a crafted HTTP request without authentication:
    curl -X POST "http://target.com/wp-admin/admin-ajax.php" \
         -d "action=get_bookings"
    
  3. If successful, the response will contain JSON-encoded booking data.

No public exploit code is available. The above is a generic example based on the vulnerability description.

Blue Team (Detection & Hardening)

Detection:

  • Monitor for unusual AJAX requests to admin-ajax.php with actions related to the plugin (e.g., get_bookings, delete_booking).
  • Look for requests from unauthenticated users to these endpoints.

Hardening:

  • Disable the plugin until a patch is released.
  • Implement a Web Application Firewall (WAF) rule to block unauthenticated requests to known vulnerable endpoints.
  • Use a security plugin (e.g., Wordfence) to add virtual patching.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • HTTP POST requests to /wp-admin/admin-ajax.php with action=get_bookings or similar plugin-specific actions.
    • Unusual JSON responses containing booking data from unauthenticated sources.
  • File IOCs:

    • Presence of the plugin directory: /wp-content/plugins/appointment-booking-calendar/
    • Version file: /wp-content/plugins/appointment-booking-calendar/readme.txt containing version <= 1.3.92.
  • Log IOCs:

    • WordPress debug logs showing failed capability checks (if custom logging is enabled).

Detection Engineering

YARA Rule

rule CVE_2025_46247_Appointment_Booking_Calendar {
    meta:
        description = "Detects vulnerable Appointment Booking Calendar plugin files"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-46247"
    strings:
        $vuln_func = "wp_ajax_nopriv_" nocase
        $plugin_slug = "appointment-booking-calendar" nocase
    condition:
        $plugin_slug and $vuln_func
}

Sigma Rule

title: CVE-2025-46247 - Unauthenticated Access to Appointment Booking Calendar
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated AJAX requests to vulnerable endpoints
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        c-uri: '/wp-admin/admin-ajax.php'
        cs-uri-query: 'action=get_bookings'
    condition: selection
falsepositives:
    - Legitimate admin actions (if admin is logged in)
level: medium

Suricata Rule

alert http any any -> $HOME_NET any (
    msg:"CVE-2025-46247 - Unauthenticated AJAX Request to Appointment Booking Calendar";
    flow:to_server,established;
    content:"POST"; http_method;
    content:"/wp-admin/admin-ajax.php"; http_uri;
    content:"action=get_bookings"; http_client_body;
    classtype:attempted-recon;
    sid:1000001;
    rev:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin if it is not essential for business operations.
  2. Apply virtual patching via WAF rules to block unauthenticated requests to plugin-specific AJAX actions.
  3. Monitor logs for exploitation attempts.

Long-Term Fix:

  • The vendor must release a patched version that includes proper capability checks and nonce verification.
  • Users should update to the latest version once available.

Workaround:

  • Add custom code to the theme’s functions.php to enforce authorization:
    add_action('wp_ajax_nopriv_get_bookings', function() {
        wp_die('Unauthorized', 403);
    }, 1);
    

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:"Appointment Booking Calendar"
http.html:"appointment-booking-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-46247/ · 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.