Skip to main content

hex.pm EUVDEUVD-2026-84539

| CVE-2026-86698 LOW
Insufficient Session Expiration (CWE-613)
2026-09-22 EEF
2.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain refresh token as org member
  2. Delivery
    Membership or session ends
  3. Exploit
    Present retained refresh token to CDN
  4. Execution
    CDN authorizes from scope claim only
  5. Impact
    Download private packages and docs

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V7 - Session Management Session expiration enforcement
Exploitation Conditions

Exploitation requires that the attacker already possess a valid OAuth refresh token issued by hex.pm while they were a member of the target private organization, AND that their organization membership or session has since been terminated. The flaw is reachable because private-repository requests are served by a CDN that verifies only the JWT signature and time claims and authorizes from the embedded repository:<org> scope, performing no database membership lookup and unable to distinguish refresh tokens from access tokens. Limiting factors: access is read-only, confined strictly to organizations the account belonged to at token-grant time, and self-expires when the 30-day refresh token lapses; the actor must have been an authenticated member (not an external unauthenticated party), so this is fundamentally an offboarding/revocation-window exposure rather than open remote compromise.

Impact

This is a genuinely low-priority issue and the signals are internally consistent. The vendor CVSS 4.0 base score is 2.3 (AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N): network-reachable but requiring a specific attack precondition (AT:P), authenticated (PR:L), and limited to low confidentiality impact with no integrity or availability effect. No EPSS score was provided, the CVE is not in CISA KEV, and no public proof-of-concept was supplied - so there is no public exploit identified at time of analysis. The impact is narrow by design: read-only access, scoped only to organizations the account already belonged to when the token was granted, and self-limiting to the 30-day refresh-token lifetime. There is no privilege escalation, no write, and no path to new data the actor did not previously have visibility into as a member. The realistic risk is an insider/offboarding-window exposure (a removed member or ended session retaining access for up to 30 days) rather than mass or opportunistic exploitation. No conflicting signals: CVSS network vector aligns with the CDN-token architecture described, and the low score matches the read-only, precondition-gated nature. Note the AT:P (4.0) precondition - possession of a still-valid refresh token issued during membership - is a real limiter that raw 'network vector' framing could understate.

Exploit ScenarioDerived

A developer who was a member of a private hex.pm organization is removed from that organization (or their session is revoked), but they retain the OAuth refresh token issued while they were a member. Because the CDN that serves private repositories authorizes requests purely from the signed scope claim without any database lookup, the former member continues pulling the organization's private packages and documentation tarballs until the 30-day refresh token expires. No public exploit code is required or identified; the attacker simply keeps using a token they already legitimately hold.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 22, 2026

Retained OAuth refresh tokens on hex.pm allow a user whose organization membership or session has ended to keep reading that organization's private packages and documentation tarballs. Refresh tokens are issued with the same issuer, audience and repository:<org> scope claims as access tokens, and the CDN that serves private repositories validates only the JWT signature and time claims, performing no membership lookup and unable to tell the two token types apart, so revocation takes effect only when the 30-day refresh token expires instead of at the 30-minute access-token lifetime. The actor must be an authenticated party who was a member when the token was granted, access is read-only and limited to organizations the account belonged to at grant time, and no public exploit has been identified at time of analysis; CVSS 4.0 base score is 2.3 (independent assessment CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N).

RemediationAI

Vendor-released patch is available per the advisory at https://github.com/hexpm/hexpm/security/advisories/GHSA-vmw7-7g2w-gw2f, with the upstream fix commits db58cf3a86c7639708ef52ff86de0b4f938e6360 and 650faa03af511e74c1b3b49ec12d35666b6984c4 distinguishing access from refresh tokens by expanding the aggregate 'repositories' scope into explicit 'repository:{org}' scopes on access tokens (and dropping the parent_jti claim); a released version number is not independently confirmed from the provided data, so operators should track the advisory for the tagged release. Where immediate upgrade is not possible, compensating controls with trade-offs include: shorten the refresh-token lifetime below the current 30 days so the stale-capability window closes sooner (side effect: legitimate users must re-authenticate more often); invalidate outstanding refresh tokens by rotating the JWT signing key or, if the system supports it, revoking refresh tokens by jti on offboarding so consent removal is immediately effective (side effect: all active sessions, including legitimate ones, are terminated and clients must re-authorize); and adding a short-lived membership check or revocation denylist at the CDN edge, which restores the revoked-access guarantee but reintroduces the database/edge lookup the capability design was intended to avoid and adds latency and cache-invalidation complexity.

Affected VersionsENISA

hexpm 650faa03af511e74c1b3b49ec12d35666b6984c4 <db58cf3a86c7639708ef52ff86de0b4f938e6360
hexpm 2025-10-10 <2026-09-22

Affected Packages

euvd hexpm fix: 2026-09-22

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The issue is an insufficient session expiration flaw (CWE-613) in hex.pm's OAuth 2.0 token issuance. In lib/hexpm/oauth/jwt.ex, generate_refresh_token/4 signs refresh tokens with the same iss, aud and scope claims as access tokens, including repository:<org> capabilities, so the two token kinds are indistinguishable to downstream verifiers. The CDN edge that serves private repositories authorizes requests solely from the signed scope claim and the time claims, deliberately avoiding a database lookup; this capability-based edge design is what makes the stale refresh token usable after membership removal or session revocation. The affected code path is the OAuth/JWT module in the hexpm project (CPE cpe:2.3:a:hexpm:hexpm), an Elixir/Phoenix package registry, and the ADR-like fix refactors permissions by expanding the aggregate 'repositories' scope into per-organization 'repository:{org}' scopes for access tokens via Permissions.expand_repositories_scope/2 while leaving refresh tokens with the aggregate scope, and drops the parent_jti claim.

Know when Hexpm gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (EEF) PRIMARY 2.3 LOW
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
vuln.today AI 4.3 MEDIUM

Network-served CDN (AV:N), attacker must have held a member-issued token so PR:L; read-only exposure of private package data gives C:L with no integrity or availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Insufficient Session Expiration vulnerability in OAuth token issuance in hexpm hexpm allows a user whose organization membership or session has ended to keep reading the organization's private packages and their documentation tarballs via a retained refresh token.

generate_refresh_token/4 in lib/hexpm/oauth/jwt.ex signs the refresh token with the same iss, aud and scope claims as the access token, so it carries the same repository:<org> scopes. The CDN service that serves private repositories verifies the signature and time claims and then authorizes from the scope claim, with no database lookup and no way to tell the two token kinds apart. Removing a member or revoking a session therefore takes effect at the CDN only when the 30 day refresh token expires, instead of after the 30 minute access token lifetime. Access is read-only and limited to organizations the account belonged to when the token was granted.

This issue affects hex.pm: from 2025-10-10 before 2026-09-22.

Threat Intelligence Overview

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Low
central package registry for the niche Elixir/Erlang ecosystem
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

12
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +12
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Hexpm

View all
CVE-2026-21622 CRITICAL
9.5 Mar 05

Insufficient session expiration in hexpm. Password reset tokens never expire, enabling persistent account takeover.

CVE-2026-32148 HIGH
8.9 Apr 30

Silent dependency checksum bypass in hexpm/hex package manager (versions 0.16.0 through 2.4.1) allows attackers to subst

CVE-2026-21618 HIGH
8.5 Jan 19

Improper input sanitization in hexpm's SharedAuthorizationView module allows unauthenticated attackers to inject malicio

CVE-2026-75542 HIGH
8.3 Aug 24

Incorrect authorization in the hex.pm OAuth `client_credentials` endpoint allows any API key bearing the `repositories`

CVE-2026-96612 HIGH
7.5 Oct 12

Path traversal in the Hex package manager for the Elixir/Erlang (Mix) ecosystem, versions 0.6.0 through 2.5.1, lets a ma

CVE-2026-105668 HIGH
7.1 Oct 12

Hex, the package manager used by Elixir and Erlang projects, fails to properly scope its 'release-age cooldown' protecti

CVE-2026-23940 HIGH
7.1 Mar 13

An uncontrolled resource consumption vulnerability in the Hex.pm package manager allows authenticated attackers to cause

CVE-2026-21621 HIGH
7.0 Mar 05

Hexpm's OAuth implementation fails to enforce read-only API key restrictions during token exchange, allowing an attacker

CVE-2026-105280 MEDIUM
6.9 Oct 12

Integrity-check bypass in the Hex package manager (hexpm hex) allows a compromised or attacker-controlled package mirror

CVE-2026-23939 MEDIUM
6.9 Feb 26

Path traversal in hexpm's Local Storage backend allows unauthenticated attackers to read sensitive files through relativ

CVE-2026-103502 MEDIUM
5.9 Oct 12

Improper TLS server-certificate validation in hex_core (0.1.0 through versions before 0.20.0) lets an attacker who alrea

CVE-2026-103503 MEDIUM
5.9 Oct 12

Improper certificate validation in Hex (the Elixir/Erlang package manager client, versions 0.20.2 through 2.5.1) allows

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy