GHSA-rq84-p6rr-vf89: Open WebUI: Account takeover via OAuth token exchange accepting tokens issued to any client
Summary
The OAuth token exchange endpoint accepts a raw provider access token and validates it by calling the provider's userinfo endpoint. A userinfo endpoint reports only that a token is valid, never which OAuth client it was issued to, and the endpoint performed no audience or client check of its own. Anyone holding an access token minted for any client registered with the same provider could exchange it for an Open WebUI session as that token's user, including applications the operator does not control and has never authorised.
Preconditions
- ENABLE_OAUTH_TOKEN_EXCHANGE=True. Disabled by default, so a stock deployment is not affected.
- The victim already has an Open WebUI account. The endpoint does not create users.
- The attacker can obtain a provider access token for the victim, typically by having them sign in to an unrelated OAuth application on the same provider. On public providers, registering that application is self-service.
- The subject identifier the attacker's client observes matches the one stored on the victim's account. Google, GitHub, Okta and self-hosted OIDC servers in default configuration issue a subject that is stable across all clients and are directly affected. Microsoft Entra ID issues per-application subjects, so the match fails there unless OAUTH_MERGE_ACCOUNTS_BY_EMAIL is enabled or OAUTH_SUB_CLAIM points at a globally stable claim such as oid.
- OAUTH_ALLOWED_DOMAINS is enforced on this endpoint but does not constrain the attack, because the impersonated user is a legitimate member of an allowed domain.
Impact
Full account takeover of any user whose provider access token the attacker can obtain. The endpoint applies no role gating, so the issued session carries the target account's role, and a targeted administrator yields an administrator session. The victim never interacts with Open WebUI and has no opportunity to notice.
The standard OAuth callback is not affected. It obtains its token through an authorization-code exchang
Details
Original advisory: https://github.com/advisories/GHSA-rq84-p6rr-vf89
Referenced CVEs
| CVE | CSIRTS overview | External |
|---|---|---|
| CVE-2026-70482 | coverage & exploitation status | NVD · CVE.org |
More from GitHub Security Advisories
- mediumGHSA-rffm-9q57-q649: Open WebUI: Client-side SSRF via unrestricted external resource loading in Vega/Vega-Lite…2026-08-04
- lowGHSA-3vf6-64vr-3g56: Open WebUI: Any authenticated user can cancel another user's chat generation via the chat…2026-08-04
- mediumGHSA-mj5r-jf49-m3w7: Open WebUI: Any member with write access to a standard channel can edit or delete other m…2026-08-04
- highGHSA-w2rx-84hp-gg95: Open WebUI: SSRF into internal services via unvalidated sub-resource requests in the Play…2026-08-04
- criticalGHSA-qgvm-j2hm-6m38: Flowise: Unauthenticated OAuth2 token refresh endpoint returns access tokens — enables to…2026-08-04