CVE-2026-49265 · GHSA-xpv3-w29h-x7cv
Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)
- Risk score
- 57/100
- CVSS
- 6.8 v3.1
- Exploit chance (30 days)
- 0.4%
- Published
- 29 Sep 2026
Open in the live forecast Today's forecast
What to know
- What it is
- OAuthLib is an implementation of the OAuth request-signing logic for Python 3.6+. From 3.0.0 until 4.0.0, OAuthLib's PKCE checks in oauthlib/oauth2/rfc6749/grant_types/authorization_code.py compare attacker-supplied code_verifier values with stored challenges using ordinary string equality in code_challenge_method_pla…
- Affected
- oauthlib (pip) >= 3.0.0, < 4.0.0
- Fix
- Upgrade oauthlib to 4.0.0 or later.
- Exploitation
- Public proof of concept
Story map
At a glance
oauthlib: Yellow, plan it in. OAuthLib is an implementation of the OAuth request-signing logic for Python 3.6+. From 3.0.0 until 4.0.0, OAuthLib's PKCE checks in oauthlib/oauth2/rfc6749/grant_types/authorization_code.py compare attacker-supplied code_verifier values with stored challenges using ordinary string equality in code_challenge_method_pla…
The flaws
- CVE-2026-49265: Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208) (CVSS 6.8 · EPSS 0%)
- CVE-2026-49264: Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation (CVSS 6.1 · EPSS 0%)
The fix
Upgrade oauthlib: 4.0.0 or later on your release line
Who is exposed: oauthlib (pip) >= 3.0.0, < 4.0.0
Where it stands
- Public proof of concept
Connects to
- Same weakness: CWE-208 (CWE-208). 4 other warnings in 30 days
Why it is Yellow
- CVSS 6.8 medium
- Public exploit or proof of concept referenced
- On your watchlist: PyPI
Affected packages
| Package | Ecosystem | Vulnerable | Fixed in |
|---|---|---|---|
| oauthlib | pip | >= 3.0.0, < 4.0.0 | 4.0.0 |
References
- https://github.com/advisories/GHSA-xpv3-w29h-x7cv
- https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv
- https://github.com/oauthlib/oauthlib/pull/963
- https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950
- https://nvd.nist.gov/vuln/detail/CVE-2026-49265
- https://github.com/pypa/advisory-database/tree/main/vulns/oauthlib/PYSEC-2026-4114.yaml
- https://github.com/advisories/GHSA-xpv3-w29h-x7cv
- https://github.com/oauthlib/oauthlib/commit/74664d3fe037a354e180e305135c6bab1747a6b0
- https://github.com/oauthlib/oauthlib/releases/tag/v4.0.0
Original description
OAuthLib is an implementation of the OAuth request-signing logic for Python 3.6+. From 3.0.0 until 4.0.0, OAuthLib's PKCE checks in oauthlib/oauth2/rfc6749/grant_types/authorization_code.py compare attacker-supplied code_verifier values with stored challenges using ordinary string equality in code_challenge_method_plain and code_challenge_method_s256. Because the comparison can return after a length difference or the first mismatching character, repeated token endpoint measurements can reveal common-prefix timing information that could potentially allow recovery of the code_verifier, unauthorized access-token acquisition, and account takeover. Practical exploitation requires an intercepted, single-use authorization code and enough measurements to overcome real-world network noise; the local timing benchmark does not establish practical remote account takeover, so the weakness remains a defense-in-depth concern. This issue is fixed in version 4.0.0.
Last activity 29 Sep 2026. Patch Forecast updates every hour.