CVE-2024-35659
Executive Summary
CVE-2024-35659 is a Missing Authorization vulnerability in the Iqonic KiviCare WordPress plugin (clinic management system). This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to sensitive data or functionality. The vulnerability affects all versions up to and including 3.6.6. As of this report, no official patch has been released, and no public proof-of-concept (PoC) or exploit code is available. The CVSS score is 5.3 (Medium), with a low EPSS probability of exploitation (0.0%). This is a WordPress ecosystem issue, not related to Apache or Nginx.
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.
No signup required
Supply Chain & Package Security
This vulnerability resides in a WordPress plugin distributed via the official WordPress plugin repository and third-party marketplaces. Organizations using KiviCare should treat this as a supply chain risk, as the plugin may be bundled in managed WordPress hosting environments or custom deployments. No OSV or GitHub advisory data is available, and the patch status remains unknown.
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 user action required.
- Scope: Unchanged (S:U) – Impact confined to the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited information disclosure.
- Integrity Impact: None (I:N) – No data modification.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for data exposure in a healthcare context elevates the risk for organizations using KiviCare.
Deep Dive & Mechanics
The vulnerability stems from Missing Authorization (CWE-862) in the KiviCare plugin. The plugin fails to properly enforce access control checks on certain REST API endpoints or AJAX actions, allowing unauthenticated users to access functionality intended for authenticated roles (e.g., clinic staff, administrators). This could include:
- Viewing patient records or appointment data.
- Accessing configuration settings.
- Triggering privileged operations without proper capability checks.
The exact vulnerable endpoint is not publicly documented, but based on the CWE, it likely involves a function that does not call current_user_can() or wp_verify_nonce() before processing requests. The plugin’s architecture uses custom post types and REST routes, which may have been left unprotected.
Vulnerable vs. Patched Code
Since no patch is available, a hypothetical fix would involve adding capability checks to all REST API endpoints and AJAX handlers. Below is an example of vulnerable vs. patched code for a typical WordPress plugin endpoint.
Vulnerable Code (e.g., in includes/class-kivicare-api.php):
add_action('rest_api_init', function () {
register_rest_route('kivicare/v1', '/appointments', array(
'methods' => 'GET',
'callback' => 'kivicare_get_appointments',
));
});
function kivicare_get_appointments($request) {
// No authorization check
$appointments = get_posts(array('post_type' => 'kivicare_appointment'));
return new WP_REST_Response($appointments, 200);
}
Patched Code (Hypothetical):
add_action('rest_api_init', function () {
register_rest_route('kivicare/v1', '/appointments', array(
'methods' => 'GET',
'callback' => 'kivicare_get_appointments',
'permission_callback' => function () {
return current_user_can('edit_posts'); // Or appropriate capability
}
));
});
function kivicare_get_appointments($request) {
$appointments = get_posts(array('post_type' => 'kivicare_appointment'));
return new WP_REST_Response($appointments, 200);
}
Exploitation & Lab Setup
Red Team
Objective: Exploit the missing authorization to access sensitive data.
Prerequisites:
- A WordPress instance with KiviCare <= 3.6.6 installed and activated.
- Network access to the WordPress site.
Steps:
- Identify the vulnerable endpoint. Common patterns include
/wp-json/kivicare/v1/or/wp-admin/admin-ajax.php?action=kivicare_*. - Send an unauthenticated GET request to the endpoint:
curl -X GET "http://target.com/wp-json/kivicare/v1/appointments" -H "User-Agent: Mozilla/5.0" - If successful, the response will contain sensitive data (e.g., patient names, appointment dates) without requiring authentication.
Note: No public exploit code is available; this is a generic approach based on the CWE.
Blue Team
Detection:
- Monitor for unauthenticated requests to
/wp-json/kivicare/v1/*oradmin-ajax.phpwithaction=kivicare_*parameters. - Look for anomalous data access patterns from IPs not associated with authenticated users.
Hunting:
- Search web server logs for requests to KiviCare REST endpoints without a valid
X-WP-Nonceheader or cookie. - Use the following Sigma rule to detect exploitation attempts.
Indicators of Compromise (IOCs)
- Network IOCs:
- Unauthenticated GET/POST requests to
/wp-json/kivicare/v1/* - Requests to
/wp-admin/admin-ajax.phpwithaction=kivicare_*and noCookieheader.
- Unauthenticated GET/POST requests to
- File IOCs:
- Plugin files in
/wp-content/plugins/kivicare-clinic-management-system/(version <= 3.6.6)
- Plugin files in
- Log IOCs:
- HTTP 200 responses to unauthenticated REST API calls that should require authentication.
Detection Engineering
YARA Rule
rule Detect_KiviCare_Missing_Auth {
meta:
description = "Detects KiviCare plugin files with missing authorization checks"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-35659"
strings:
$rest_route = /register_rest_route\s*\(\s*['\"]kivicare\/v1['\"]/
$no_permission = !"permission_callback"
$ajax_action = /add_action\s*\(\s*['\"]wp_ajax_nopriv_kivicare/
condition:
($rest_route and $no_permission) or $ajax_action
}
Sigma Rule
title: Unauthenticated Access to KiviCare REST API
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthenticated requests to KiviCare REST API endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-stem|startswith: '/wp-json/kivicare/v1/'
cs-uri-query|contains: 'rest_route'
condition: selection
falsepositives:
- Legitimate unauthenticated endpoints (if any)
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2024-35659 - KiviCare Missing Authorization Attempt";
flow:to_server,established;
content:"/wp-json/kivicare/v1/"; http_uri;
nocase;
sid:1000001;
rev:1;
metadata:created_at 2025-04-10, updated_at 2025-04-10;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not critical to operations, until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block unauthenticated requests to
/wp-json/kivicare/v1/*andadmin-ajax.php?action=kivicare_*. - Monitor logs for exploitation attempts using the provided Sigma and Suricata rules.
Long-Term Fix:
- Apply the vendor patch when available (check the WordPress plugin repository or contact Iqonic).
- If patching is not possible, consider forking the plugin and adding
permission_callbackto all REST routes andcurrent_user_can()checks to AJAX handlers.
Workaround:
- Use a WordPress security plugin (e.g., Wordfence, Sucuri) to add virtual patching for this vulnerability.
Valters IT
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.