{"id":"GHSA-8fxq-53rx-ph5f","aliases":[],"url":"https://o3.security/vulnerability/GHSA-8fxq-53rx-ph5f","summary":"Coder: Login endpoint user enumeration via timing-defense placeholder in password comparison","details":"### Summary\n\n`userpassword.Compare()` substituted a placeholder hash derived from the well-known string `\"hunter2\"` when the stored hash was empty. Submitting `\"hunter2\"` therefore matched accounts with no password hash (nonexistent users and SSO-only users) and a subsequent login-type check returned an HTTP 403 that disclosed the account's login type, versus 401 for password users.\n\n> **Note:** Practical exploitation is limited because the timing side channel is noisy and only reveals whether an account exists.\n\n### Impact\n\nAn unauthenticated attacker could enumerate valid accounts and their authentication provider by submitting logins with the password `\"hunter2\"`, distinguishing nonexistent users, SSO users (provider revealed) and password users from the response. This aids credential-stuffing and targeted phishing. No authentication bypass or data access resulted.\n\n### Patches\n\nThe fix derives the timing-defense placeholder from a secure random value that no supplied password can match.\n\nThe fix was backported to all supported release lines:\n\n| Release line | Patched version |\n|---|---|\n| 2.34 | [v2.34.2](https://github.com/coder/coder/releases/tag/v2.34.2) |\n| 2.33 | [v2.33.8](https://github.com/coder/coder/releases/tag/v2.33.8) |\n| 2.32 | [v2.32.7](https://github.com/coder/coder/releases/tag/v2.32.7) |\n| 2.29 (ESR) | [v2.29.17](https://github.com/coder/coder/releases/tag/v2.29.17) |\n\n### Workarounds\n\nNone.\n\n### References\n\n- Fix: #26205\n\n### Credits\n\nWe'd like to thank Anthropic's Security Team (ANT-2026-22433) for independently disclosing this issue!","published":"2026-08-20T18:34:21Z","modified":"2026-08-20T18:45:19.267525440Z","cvss":{"score":3.7,"severity":"LOW","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N"},"epss":null,"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Go","name":"github.com/coder/coder/v2","fixedVersion":"2.34.2"},{"ecosystem":"Go","name":"github.com/coder/coder/v2","fixedVersion":"2.33.8"},{"ecosystem":"Go","name":"github.com/coder/coder/v2","fixedVersion":"2.32.7"},{"ecosystem":"Go","name":"github.com/coder/coder/v2","fixedVersion":"2.29.17"}],"fix":{"url":"https://github.com/coder/coder/pull/26205","label":"coder/coder#26205"},"references":[{"type":"WEB","url":"https://github.com/coder/coder/security/advisories/GHSA-8fxq-53rx-ph5f"},{"type":"WEB","url":"https://github.com/coder/coder/pull/26205"},{"type":"WEB","url":"https://github.com/coder/coder/commit/35a7dc8ab9c7f15ce05d963947823ee31224512f"},{"type":"PACKAGE","url":"https://github.com/coder/coder"},{"type":"WEB","url":"https://github.com/coder/coder/releases/tag/v2.29.17"},{"type":"WEB","url":"https://github.com/coder/coder/releases/tag/v2.32.7"},{"type":"WEB","url":"https://github.com/coder/coder/releases/tag/v2.33.8"},{"type":"WEB","url":"https://github.com/coder/coder/releases/tag/v2.34.2"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-20T18:45:19.267525440Z"}}