GitHub Advisoryadvisory · PyPI
GHSA-7rw5-9f7q-xj36 Open WebUI: Account enumeration via observable login timing discrepancy
MEDIUM
Official page ↗
- Aliases
- CVE-2026-59218
- Ecosystem
- PyPI
- Packages
- open-webui
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Weaknesses
- CWE-208
- Reviewed
- 2026-07-24
Affected packages
• PyPI open-webui: < 0.10.0 → fixed in 0.10.0
Description
Summary
The `/api/v1/auths/signin` endpoint leaked whether an email address belonged to a registered account through a response-time side channel. Password verification ran bcrypt only when the email was found in the database; for a non-existent email the request returned early without hashing. The expensive bcrypt comparison therefore made valid-account attempts respond significantly slower (~180 ms) than non-existent ones (~5 ms), so an unauthenticated attacker could enumerate valid accounts by measuring response time.
Details
On signin the backend looked the user up by email and only performed the bcrypt password comparison if a record existed. A missing email short-circuited before any hashing, producing the timing gap. The built-in brute-force throttling did not prevent it: sending one request at a time with a small delay between requests stays under the rate limit while still exposing the difference.
Observed in the reporter's run (HTTP 400 for every attempt, the response time is the signal):
```
Email Status Response time
[email protected] 400 186 ms <- valid account
[email protected] 400 9 ms
[email protected] 400 6 ms
[email protected] 400 5 ms
```
Impact
An unauthenticated attacker can enumerate which email addresses are registered accounts, which enables targeted password-spraying against confirmed accounts. The impact is amplified by MFA not being enabled by default. No data is read or modified; the disclosure is limited to account existence.
Patched
The authentication path now runs a bcrypt verification against a constant placeholder hash whenever the email does not resolve to an active credential, so a real hash comparison executes on every attempt and the response time is the same whether or not the account exists. Fixed in 0.10.0.
Credits
@dievus
Related
Alias · CVE (1)
- CVE-2026-59218 Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. vulnerability
Weakness · CWE (1)
- CWE-208 Observable Timing Discrepancy weakness
References
- https://github.com/open-webui/open-webui/security/advisories/GHSA-7rw5-9f7q-xj36 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-59218 advisory
- https://github.com/open-webui/open-webui/pull/26385 web
- https://github.com/open-webui/open-webui/commit/993e74912199c66c522f08ec81abe31d76985e39 web
- https://github.com/open-webui/open-webui package
- https://github.com/open-webui/open-webui/releases/tag/v0.10.0 web