🛡️ CVE-2026-54605 — oauth

🟠 CVSS 8.0 — High ✅ No Known Exploit CWE-200 NVD
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

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

  • oauth v1.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..399 response.
  • 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

Severity HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
CWE CWE-200
Public Exploit ✅ No
Source NVD
Published 2026-07-28
Updated 2026-08-12
Modified 2026-07-28
Fix URL N/A

Affected Packages

Software From version Fixed in
oauth 0.5.5 1.1.6
unknown

Similar Threats

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.