Skip to content

GHSA-3rw9-wmc8-8948 CVE-2025-71435 GO-2025-3921

Coder accepts an APIKey beyond the linked OIDC expiry if there is no refresh token

Medium Go
Severity
0.0 / 10
Medium · CVSS 4.0
Exploit chance (EPSS)
0.18%
Chance of exploitation in the next 30 days. Higher than 6.96% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-324 Use of a Key Past its Expiration Date
Fix
2.23.0
Upgrade github.com/coder/coder/v2 to this version or later

Description

Summary

If users log in to Coder via OIDC, and the OpenID Identity Provider does not return a refresh token, then Coder may allow their web session to continue beyond the expiration of the token returned by the OpenID Identity Provider.

Details

When a user logs in via OIDC, Coder stores the OIDC token and refresh token (if any) in its datastore and sets an APIKey in the user's cookies. If there is a refresh token, then when the OIDC token is expired and a request is made with the APIKey, we attempt to refresh the OIDC token. If refresh fails, the Coder API request is also failed and the user needs to log in again.

However, if there is no refresh token provided, then affected versions of Coder fail to enforce the expiry of the OIDC token, and allow users to make API requests even if it is expired so long as their APIKey stored in cookies has not expired.

Coder APIKeys have an expiry and lifetime of 24 hours, but Coder is configured to extend the lifetime of the APIKey by up to 24 hours from the time it is used successfully. So, an APIKey that is used at least once every 24 hours will not expire. (This behavior can be disabled by configuration).

Impact

This could allow a user to access the Coder service beyond the lifetime of the token issued by the OpenID provider, potentially indefinitely, even if they are no loner authorized via OIDC.

Affected versions

Go

PackageVulnerableFixed in
github.com/coder/coder
all versions
No fix yet
github.com/coder/coder/v2
< 2.23.0
2.23.0

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

github.com/coder/coder/v2 Go → 2.23.0

go
go get github.com/coder/coder/v2@v2.23.0 && go mod tidy

Severity breakdown

CVSS 4.0 0.0

CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Attack vector
Network
Attack complexity
Low
Attack requirements
Present
Privileges required
Low
User interaction
None
Confidentiality (vulnerable system)
Low
Integrity (vulnerable system)
Low
Availability (vulnerable system)
None
Confidentiality (subsequent systems)
None
Integrity (subsequent systems)
None
Availability (subsequent systems)
None

CVSS 3.1 4.2

CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N

Attack vector
Network
Attack complexity
High
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Weakness

CWE-324: Use of a Key Past its Expiration Date

The product uses a cryptographic key or password past its expiration date, which diminishes its safety significantly by increasing the timing window for cracking attacks against that key.

How to prevent it
  • Architecture and Design: Adequate consideration should be put in to the user interface in order to notify users previous to the key's expiration, to explain the importance of new key generation and to walk users through the process as painlessly as possible.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-h58c-xccx-75m3
Coder: Stored HTML injection via unescaped ApplicationName and LogoURL appearance settings
Medium Also affects github.com/coder/coder
GHSA-8fxq-53rx-ph5f
Coder: Login endpoint user enumeration via timing-defense placeholder in password comparison
Medium Also affects github.com/coder/coder
GHSA-qrwj-vh9x-gw5v
Coder's workspace agent API insecure redirect handling allowed cross-agent file read and write
High Also affects github.com/coder/coder
GHSA-5wg6-jmq2-53pw
Coder's workspace app CORS origin check can be bypassed via UUID-based subdomain spoofing
Medium Also affects github.com/coder/coder
GHSA-7qw2-f75v-62f7
Coder vulnerable to stored HTML injection via workspace agent logs in AgentLogLine component
Medium Also affects github.com/coder/coder
GHSA-84rm-42xw-mx52
Coder's AI Bridge Proxy skips TLS certificate verification in default configuration
High Also affects github.com/coder/coder
GHSA-wqxv-w64v-5wh6
Suspended Coder users retain access to AI Bridge LLM proxy endpoints
Medium Also affects github.com/coder/coder
GHSA-f5vp-w269-392g
Coder vulnerable to denial of service via unbounded request body in AI Bridge provider endpoints
Medium Also affects github.com/coder/coder
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor