CVE-2023-6637
Executive Summary
CVE-2023-6637 is a Missing Authorization vulnerability in the CAOS | Host Google Analytics Locally WordPress plugin (versions up to and including 4.7.14). The update_settings function lacks a capability check, allowing unauthenticated attackers to modify plugin settings. This can lead to unauthorized redirection of analytics data, injection of malicious scripts, or disruption of site analytics. The vulnerability has a CVSS score of 6.5 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood but high impact if exploited. No public proof-of-concept or patch is currently available.
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 affects a WordPress plugin distributed via the official WordPress plugin repository. Users are advised to monitor for updates and consider removing the plugin if no patch is released. The plugin is not distributed via NPM, PyPI, Go, or Ruby.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
- Base Score: 6.5 (Medium)
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: None
- Integrity Impact: Low
- Availability Impact: None
The threat level is Medium due to the ease of exploitation and potential for integrity compromise, though no public exploit exists.
Deep Dive & Mechanics
The vulnerability resides in the update_settings function of the CAOS plugin. This function is intended to be called by authenticated administrators to update plugin configuration. However, due to a missing capability check (nonce or permission verification), the function can be invoked by any unauthenticated user via a crafted HTTP request.
Attack Flow:
- An attacker sends a POST request to the WordPress REST API endpoint or admin-ajax.php with the
actionparameter set tocaos_update_settings. - The request includes arbitrary settings data (e.g.,
caos_analytics_id,caos_script_position,caos_disable_display_features). - The plugin processes the request without verifying the user's capabilities, updating the options in the WordPress database.
- The attacker can then redirect analytics traffic to a malicious server, inject custom JavaScript, or disable analytics tracking.
Impact:
- Data Integrity: Attacker can modify analytics settings, potentially exfiltrating data or injecting malicious scripts.
- Availability: Attacker could disable analytics, causing loss of tracking data.
- Confidentiality: No direct data theft, but script injection could lead to XSS or data exfiltration.
Vulnerable vs. Patched Code
Vulnerable Code (caos-settings.php, line ~45):
function caos_update_settings() {
// Missing capability check
if ( isset( $_POST['caos_analytics_id'] ) ) {
update_option( 'caos_analytics_id', sanitize_text_field( $_POST['caos_analytics_id'] ) );
}
// ... other settings
wp_die();
}
add_action( 'wp_ajax_nopriv_caos_update_settings', 'caos_update_settings' );
add_action( 'wp_ajax_caos_update_settings', 'caos_update_settings' );
Patched Code (Hypothetical):
function caos_update_settings() {
// Add capability check
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'Unauthorized' );
}
// Verify nonce
if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'caos_update_settings' ) ) {
wp_die( 'Nonce verification failed' );
}
if ( isset( $_POST['caos_analytics_id'] ) ) {
update_option( 'caos_analytics_id', sanitize_text_field( $_POST['caos_analytics_id'] ) );
}
// ... other settings
wp_die();
}
add_action( 'wp_ajax_caos_update_settings', 'caos_update_settings' );
Exploitation & Lab Setup
Red Team
Prerequisites:
- Target WordPress site with CAOS plugin <= 4.7.14
- Network access to the site
Exploitation Steps:
- Identify the target site's admin-ajax.php URL (e.g.,
https://target.com/wp-admin/admin-ajax.php). - Craft a POST request to update the analytics ID to a malicious tracking server:
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=caos_update_settings&caos_analytics_id=UA-MALICIOUS-1&caos_script_position=header"
- Verify the change by checking the site's source code for the injected analytics script.
Note: No public exploit code is available; this is a conceptual demonstration.
Blue Team
Detection Steps:
- Monitor for POST requests to
/wp-admin/admin-ajax.phpwithaction=caos_update_settingsfrom unauthenticated sources. - Check WordPress options table for unexpected changes to
caos_analytics_id,caos_script_position, etc. - Review server logs for unusual patterns in analytics-related requests.
Hunting Query (SQL):
SELECT * FROM wp_options WHERE option_name LIKE 'caos_%' AND option_value NOT LIKE '%expected_value%';
Indicators of Compromise (IOCs)
- Network:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=caos_update_settingsand no authentication cookies. - Outbound traffic to unknown analytics domains (e.g.,
malicious-analytics.com).
- POST requests to
- Host:
- Modified
caos_analytics_idoption in WordPress database. - Unexpected JavaScript in site footer/header referencing unknown domains.
- Modified
- File:
- Modified
wp-content/plugins/host-analyticsjs-local/caos-settings.php(if attacker gains file access).
- Modified
Detection Engineering
YARA Rule
rule CVE_2023_6637_CAOS_Unauth_Settings {
meta:
description = "Detects exploitation attempts of CVE-2023-6637 in CAOS plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2023-6637"
strings:
$action = "caos_update_settings"
$ajax = "admin-ajax.php"
$post = "POST"
condition:
$action and $ajax and $post
}
Sigma Rule
title: CVE-2023-6637 CAOS Plugin Unauthenticated Settings Modification
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated POST requests to admin-ajax.php with caos_update_settings action
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: POST
cs-uri-query|contains: admin-ajax.php
cs-uri-query|contains: action=caos_update_settings
condition: selection
falsepositives:
- Legitimate admin actions (if authenticated)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2023-6637 CAOS Plugin Unauthenticated Settings Modification"; flow:to_server; content:"POST"; http_method; content:"admin-ajax.php"; http_uri; content:"action=caos_update_settings"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-ajax.phpwithaction=caos_update_settingsfrom unauthenticated users. - Monitor WordPress options for unexpected changes to
caos_*settings.
Long-term Fix:
- Apply the hypothetical patch adding capability checks and nonce verification.
- Consider switching to an alternative analytics plugin with proper security practices.
Workaround:
- Add the following to
.htaccessto block unauthenticated access to the vulnerable endpoint:
<FilesMatch "admin-ajax\.php">
Require valid-user
</FilesMatch>
Note: This may break legitimate AJAX functionality; test thoroughly.
Valters IT
Securing Digital Frontiers
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.