🛡️ CVE-2026-54605 — oauth
Description
OAuth: Cross-origin token-request redirects can expose signed request metadata
# Cross-origin OAuth token-request redirects can expose signed request metadata
Summary
When an application uses OAuth::Consumer to request OAuth 1.0 request tokens or
access tokens, the token request helper follows 300..399 redirects returned by
the OAuth server. In affected versions, OAuth::Consumer#token_request parses the
raw Location header, follows the redirect recursively, and can mutate the
consumer's configured site when the redirect points to a different host with
the same path.
The result is a cross-origin signed-request disclosure primitive: if an OAuth
server token endpoint returns a redirect whose target an attacker controls, the
client can re-sign the token request and send OAuth 1.0 request metadata,
including the OAuth signature, nonce, timestamp, consumer key, and any request
parameters included in the signature base string, to the attacker-controlled
host. The same behavior can also be used as an SSRF or confused-deputy primitive
because the application server follows the redirect and sends the next request
from its own network position.
Affected
oauthv1.1.5 and prior versions back to and including v0.5.5.- The cross-host token redirect behavior was introduced by
https://github.com/ruby-oauth/oauth/commit/d74b767f
- The behavior is documented in the v0.5.5 changelog as "Allow redirect to
different host but same path".
- The vulnerable behavior is in
OAuth::Consumer#token_request, which is used by
the documented request-token and access-token flows.
- The issue is not specific to a Ruby engine or platform. It is caused by the
gem's redirect handling and recursive token request behavior.
Patched version: oauth v1.1.6.
Impact
A consumer that calls OAuth::Consumer#get_request_token,
OAuth::Consumer#get_access_token, or lower-level token request helpers against
an OAuth server whose token endpoint redirect target can be influenced may lose
three security properties:
1. Cross-origin signed-request metadata disclosure. The redirected request is
signed for the attacker-controlled endpoint. Depending on the request method,
scheme, and parameters, the attacker may receive OAuth 1.0 parameters such as
oauth_consumer_key, oauth_signature_method, oauth_timestamp,
oauth_nonce, oauth_version, and oauth_signature.
2. SSRF from the application server. The OAuth client follows the redirect on
behalf of the application, so the redirected host is contacted from the
application server's network position.
3. Confused-deputy behavior. A malicious or compromised token endpoint can
cause an otherwise trusted application to initiate signed requests to an
unintended origin.
The disclosed OAuth 1 signature is not equivalent to an OAuth 2 bearer token: it
is bound to the signed request, timestamp, nonce, HTTP method, and request URL.
However, it can still disclose sensitive integration metadata, may be replayable
within the receiver's accepted nonce/timestamp window in some deployments, and
can expose application-server reachability to attacker-selected hosts.
Vulnerable code
[lib/oauth/consumer.rb](https://github.com/ruby-oauth/oauth/blob/v1.1.5/lib/oauth/consumer.rb)
at tag v1.1.5:
```ruby
def token_request(http_method, path, token = nil, request_options = {}, *arguments)
request_options[:token_request] ||= true
response = request(http_method, path, token, request_options, *arguments)
case response.code.to_i
when (200..299)
# parse token response
when (300..399)
# Parse redirect to follow
uri = URI.parse(response["location"])
our_uri = URI.parse(site)
# Guard against infinite redirects
response.error! if uri.path == path && our_uri.host == uri.host
if uri.path == path && our_uri.host != uri.host
options[:site] = "#{uri.scheme}://#{uri.host}"
@http = create_http
end
token_request(http_method, uri.path, token, request_options, arguments)
when (400..499)
raise OAuth::Unauthorized, response
else
response.error!
end
end
```
The vulnerable behavior has several parts:
response["location"]is trusted as the next token request target.- Redirects are followed for every
300..399response. - There is no general redirect counter or maximum redirect limit.
- Cross-host redirects with the same path can mutate
options[:site]and rebuild
the underlying HTTP client.
- The recursive call continues the token request flow and signs the next request
for the redirected destination.
Reachable in production
The vulnerable path is reachable through the normal OAuth 1 token exchange:
```ruby
consumer = OAuth::Consumer.new(
consumer_key,
consumer_secret,
site: "https://provider.example"
)
request_token = consumer.get_request_token
```
If https://provider.example/oauth/request_token returns a redirect to an
attacker-controlled host, the library
How this vulnerability can be exploited
This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality low, integrity low, availability none.
Weakness class
CVE-2026-54605 is classified as CWE-200: Exposure of Sensitive Information. Information that should stay internal is disclosed to someone who is not authorised to see it.
Affected software
CVE-2026-54605 is recorded against 2 packages.
- oauth (from 0.5.5 up to 1.1.6)
- unknown
Timeline and source
Published on 28 July 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.
References
github.com (Web)
github.com (Web)
github.com (Package)
github.com (Web)
Details
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Affected Packages
| Software | From version | Fixed in |
|---|---|---|
| oauth | 0.5.5 | 1.1.6 |
| unknown | — | — |
References
Similar Threats
- Unknown MAL-2025-145721
- Unknown MAL-2025-145722
- Unknown MAL-2025-145723
- Unknown MAL-2025-145726
- Unknown MAL-2025-145727
More CVE 2026 advisories
Browse all of CVE 2026 in the advisory index.
Site Security Check
Is oauth part of your stack?
CVE-2026-54605 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.
Scan My Site Free →No credit card required · Results in minutes
ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.