{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-30789","assignerOrgId":"2fdefc65-d750-4b8d-96ee-6e2c0c42dbfe","state":"PUBLISHED","assignerShortName":"VULSec","dateReserved":"2026-03-05T14:13:37.202Z","datePublished":"2026-03-05T15:41:51.417Z","dateUpdated":"2026-06-22T13:16:30.794Z"},"containers":{"cna":{"providerMetadata":{"orgId":"2fdefc65-d750-4b8d-96ee-6e2c0c42dbfe","shortName":"VULSec","dateUpdated":"2026-06-22T13:16:30.794Z"},"title":"RustDesk Auth Proof Uses Server-Controlled Salt/Challenge and Fast Double-SHA256, Enabling Offline Brute-Force","datePublic":"2026-03-05T13:45:00.000Z","problemTypes":[{"descriptions":[{"lang":"en","cweId":"CWE-916","description":"CWE-916 Use of Password Hash With Insufficient Computational Effort","type":"CWE"}]}],"impacts":[{"capecId":"CAPEC-49","descriptions":[{"lang":"en","value":"CAPEC-49 Password Brute Forcing"}]}],"affected":[{"vendor":"rustdesk-client","product":"RustDesk Client","platforms":["Windows","MacOS","Linux","iOS","Android"],"collectionURL":"https://github.com/rustdesk/rustdesk/releases","packageName":"rustdesk-client","repo":"https://github.com/rustdesk/rustdesk,https://github.com/rustdesk/hbb_common","modules":["Client login","peer authentication"],"programFiles":["src/client.rs"],"programRoutines":[{"name":"handle_hash()"},{"name":"handle_login_from_ui() (login proof construction)"}],"versions":[{"status":"affected","version":"0","lessThanOrEqual":"1.4.8","versionType":"custom"}],"defaultStatus":"affected"}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:a:rustdesk-client:rustdesk_client:*:*:windows:*:*:*:*:*","versionEndIncluding":"1.4.8","versionStartIncluding":"0","vulnerable":true},{"criteria":"cpe:2.3:a:rustdesk-client:rustdesk_client:*:*:macos:*:*:*:*:*","versionEndIncluding":"1.4.8","versionStartIncluding":"0","vulnerable":true},{"criteria":"cpe:2.3:a:rustdesk-client:rustdesk_client:*:*:linux:*:*:*:*:*","versionEndIncluding":"1.4.8","versionStartIncluding":"0","vulnerable":true},{"criteria":"cpe:2.3:a:rustdesk-client:rustdesk_client:*:*:ios:*:*:*:*:*","versionEndIncluding":"1.4.8","versionStartIncluding":"0","vulnerable":true},{"criteria":"cpe:2.3:a:rustdesk-client:rustdesk_client:*:*:android:*:*:*:*:*","versionEndIncluding":"1.4.8","versionStartIncluding":"0","vulnerable":true}],"negate":false,"operator":"OR"}],"operator":"OR"}],"descriptions":[{"lang":"en","value":"Use of Password Hash With Insufficient Computational Effort, Improper Restriction of Excessive Authentication Attempts vulnerability in rustdesk-client RustDesk Client rustdesk-client on Windows, MacOS, Linux, iOS, Android (Client login, peer authentication modules) allows Password Brute Forcing.\n\nThe authentication proof is SHA256(SHA256(password + salt) + challenge), where both the salt and the challenge are generated entirely by the server with no client-side nonce, and the hash uses no slow key-derivation function. A rogue or on-path API/relay server (see CVE-2026-30794 / CVE-2026-30797) can issue a chosen salt and challenge, capture the resulting proof, and recover the password offline. The capture-replay claim (CWE-294) is withdrawn: the challenge is regenerated per connection (challenge = Config::get_auto_password(6)), so a captured proof is not replayable against the legitimate server. The 1.4.7 OTP brute-force limiter and the existing LOGIN_FAILURES counter constrain only ONLINE attempts and do not address offline recovery.\n\nThis vulnerability is associated with program files src/client.rs and program routines handle_hash(), handle_login_from_ui() (login proof construction).\n\nThis issue affects RustDesk Client: through 1.4.8.","supportingMedia":[{"type":"text/html","base64":false,"value":"Use of Password Hash With Insufficient Computational Effort, Improper Restriction of Excessive Authentication Attempts vulnerability in rustdesk-client RustDesk Client rustdesk-client on Windows, MacOS, Linux, iOS, Android (Client login, peer authentication modules) allows Password Brute Forcing.<br><br>The authentication proof is SHA256(SHA256(password + salt) + challenge), where both the salt and the challenge are generated entirely by the server with no client-side nonce, and the hash uses no slow key-derivation function. A rogue or on-path API/relay server (see CVE-2026-30794 / CVE-2026-30797) can issue a chosen salt and challenge, capture the resulting proof, and recover the password offline. The capture-replay claim (CWE-294) is withdrawn: the challenge is regenerated per connection (challenge = Config::get_auto_password(6)), so a captured proof is not replayable against the legitimate server. The 1.4.7 OTP brute-force limiter and the existing LOGIN_FAILURES counter constrain only ONLINE attempts and do not address offline recovery.<br><br>This vulnerability is associated with program files src/client.rs and program routines handle_hash(), handle_login_from_ui() (login proof construction).<br><br>This issue affects RustDesk Client: through 1.4.8."}]}],"references":[{"url":"https://rustdesk.com/docs/en/client/","tags":["technical-description","x_--config documentation"]},{"url":"https://docs.google.com/document/d/e/2PACX-1vSds6jjpd38oO_yIAyd1HYtKNUuea-I-ozAPpGhYI7QgAU-QGJ7D8a4rOZVj1vmiUXV1EcdRHf9aZAW/pub","tags":["third-party-advisory","exploit"]},{"url":"https://www.vulsec.org/","tags":["vdb-entry","third-party-advisory"]}],"metrics":[{"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}],"cvssV4_0":{"attackVector":"LOCAL","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","subConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","subIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED","version":"4.0","baseSeverity":"MEDIUM","baseScore":5.7,"vectorString":"CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"}}],"configurations":[{"lang":"en","value":"Default — any password-based authentication","supportingMedia":[{"type":"text/html","base64":false,"value":"Default — any password-based authentication"}]}],"workarounds":[{"lang":"en","value":"Use long (16+ char) random passwords. Enable 2FA where available.","supportingMedia":[{"type":"text/html","base64":false,"value":"Use long (16+ char) random passwords. Enable 2FA where available."}]}],"solutions":[{"lang":"en","value":"Add a client-side nonce to the auth proof and use a slow KDF (e.g., Argon2id). Transition to SRP.","supportingMedia":[{"type":"text/html","base64":false,"value":"Add a client-side nonce to the auth proof and use a slow KDF (e.g., Argon2id). Transition to SRP."}]}],"exploits":[{"lang":"en","value":"PoC available.","supportingMedia":[{"type":"text/html","base64":false,"value":"PoC available.<br>"}]}],"credits":[{"lang":"en","value":"Erez Kalman","type":"finder"},{"lang":"en","value":"Erez Kalman","type":"reporter"}],"source":{"discovery":"UNKNOWN"},"x_generator":{"engine":"Vulnogram 0.5.0"}},"adp":[{"metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-03-17T14:32:41.844771Z","id":"CVE-2026-30789","options":[{"Exploitation":"poc"},{"Automatable":"yes"},{"Technical Impact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2026-03-17T14:32:45.784Z"}}]}}