Description
Insufficient Session Expiration vulnerability in the OAuth token refresh grant in hexpm hexpm allows a user removed from an organization to keep reading its private packages.

expand_repositories_scope/3 in lib/hexpm/permissions.ex only rewrites the literal repositories scope, so an explicitly granted repository:<org> or docs:<org> scope passes through it untouched. The refresh grant re-derives a new token from the stored granted_scopes, which holds that expanded form, so every refresh reproduces the organization scope without revisiting membership. Because both CDN edges authorize repository access from the token claim without querying the database, an account removed from an organization retains read access for as long as it keeps refreshing, bounded by the 30 day refresh token lifetime rather than the 30 minute access token lifetime.

This issue affects hex.pm: from 2025-10-10 before 2026-08-24.
Published: 2026-08-24
Score: 2.3 Low
EPSS: < 1% Very Low
KEV: No
Impact: Unauthorized Package Access
Action: Patch Immediately
AI Analysis

Impact

A user who has been removed from an organization can continue to read that organization’s private packages by repeatedly refreshing an OAuth token. The vulnerability lies in the token refresh grant not re‑checking membership status; the grant merely re‑derives a new access token from expanded scopes that were originally granted. This flaw allows an otherwise revoked member to maintain read access indefinitely while a valid refresh token persists, effectively providing unauthorized access to private data.

Affected Systems

The issue affects the Hex.pm package registry, specifically releases from 2025‑10‑10 up to before 2026‑08‑24. All installations of hexpm running within that version window are vulnerable; newer releases past 2026‑08‑24 are not impacted.

Risk and Exploitability

The CVSS score of 2.3 reflects low severity, and no EPSS score is available. The vulnerability is not listed in the CISA KEV catalog. Attackers would need a valid refresh token for the removed account, which they could obtain if they have lingering access or intercept token traffic. The 30‑day lifetime of the refresh token limits the window but still permits prolonged unauthorised data exposure. Because the flaw does not enable code execution, impact is confined to data confidentiality but can aid an adversary in gathering sensitive package artefacts.

Generated by OpenCVE AI on August 24, 2026 at 21:42 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update Hex.pm to a release dated 2026‑08‑24 or later, which removes the flawed scope handling logic.
  • Revoke all refresh tokens for accounts previously removed from organizations and require re‑authentication before new tokens are issued.
  • Implement a server‑side check that validates membership before issuing new access tokens, ensuring that removed members cannot obtain refreshed tokens that grant private scope access.

Generated by OpenCVE AI on August 24, 2026 at 21:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 25 Aug 2026 21:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Mon, 24 Aug 2026 20:30:00 +0000

Type Values Removed Values Added
Description Insufficient Session Expiration vulnerability in the OAuth token refresh grant in hexpm hexpm allows a user removed from an organization to keep reading its private packages. expand_repositories_scope/3 in lib/hexpm/permissions.ex only rewrites the literal repositories scope, so an explicitly granted repository:<org> or docs:<org> scope passes through it untouched. The refresh grant re-derives a new token from the stored granted_scopes, which holds that expanded form, so every refresh reproduces the organization scope without revisiting membership. Because both CDN edges authorize repository access from the token claim without querying the database, an account removed from an organization retains read access for as long as it keeps refreshing, bounded by the 30 day refresh token lifetime rather than the 30 minute access token lifetime. This issue affects hex.pm: from 2025-10-10 before 2026-08-24.
Title Explicit organization scopes survive token refresh after membership ends
First Time appeared Hexpm
Hexpm hexpm
Weaknesses CWE-613
CPEs cpe:2.3:a:hexpm:hexpm:*:*:*:*:*:*:*:*
Vendors & Products Hexpm
Hexpm hexpm
References
Metrics cvssV4_0

{'score': 2.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-08-25T19:53:55.535Z

Reserved: 2026-08-18T06:00:02.163Z

Link: CVE-2026-75554

cve-icon Vulnrichment

Updated: 2026-08-25T19:52:43.953Z

cve-icon NVD

Status : Deferred

Published: 2026-08-24T21:17:47.557

Modified: 2026-09-01T21:15:00.147

Link: CVE-2026-75554

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-24T21:45:03Z

Weaknesses
  • CWE-613

    Insufficient Session Expiration