Skip to main content

wger EUVDEUVD-2026-94334

| CVE-2026-46437 MEDIUM
Improper Authentication (CWE-287)
2026-10-07 GitHub_M GHSA-v3x9-6gg8-c2c9
4.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Steal victim DRF/JWT token out-of-band
  2. Delivery
    Victim logs out and changes password
  3. Exploit
    Replay unrevoked token against /api/v2/*
  4. Execution
    Refresh JWT to mint new access tokens
  5. Impact
    Retain access to victim account data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK

2 techniques across 2 tactics: Defense Evasion, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the attacker to already possess a valid stolen bearer credential - either a DRF authtoken sent as 'Authorization: Token ...' or a SimpleJWT refresh token obtained from POST /api/v2/token; the vulnerability itself provides no means to acquire that token. The defining condition is that lifecycle events fail to revoke credentials: /user/logout only clears the Django session cookie and password change only updates the hash, leaving rows in authtoken_token valid and JWT refresh tokens usable (no server-side revocation list or token versioning). LIMITING FACTORS: no token theft, no exploit; DRF tokens persist until manually rotated/deleted and JWT refresh tokens until natural expiry, so impact window depends on configured REFRESH_TOKEN_LIFETIME; only affects wger versions prior to 2.6.

Impact

This is a moderate, defense-in-depth authentication weakness (CWE-287) rather than a high-urgency flaw. The provided CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N, base 4.8 Medium) correctly reflects that the vulnerability is network-reachable but gated behind high attack complexity, because exploitation is impossible without first obtaining the victim's bearer credential through some out-of-band means. The PR:N label is technically accurate (the attacker does not authenticate with their own account) but is misleading in isolation - the real precondition is possession of a stolen DRF authtoken or JWT refresh token, so this is effectively a post-compromise persistence/privilege-retention issue, not a primary access vector. No EPSS score, no SSVC decision data, and no CISA KEV listing are present in the input, so automatable/exploitation-maturity signals cannot be compared; absence of EPSS/KEV is not evidence of safety but does suggest this is not a mass-exploited target. A detailed, runnable proof-of-concept is published in the GHSA advisory, so publicly available exploit code exists - but POC availability must not be conflated with active exploitation, which is not indicated by any source here. Net: real but low-to-medium priority for internet-facing self-hosted instances, driven mainly by the fact that logout and password change - the exact actions a user takes after suspecting compromise - fail to revoke access.

Exploit ScenarioDerived

An attacker who has already captured a user's API token (e.g., via leaked browser/local storage, an XSS, or intercepted traffic) continues calling /api/v2/* endpoints even after the victim notices the compromise and logs out and changes their password. Because neither action revokes the DRF authtoken or JWT refresh token, the stolen credential keeps working - and the JWT refresh token can mint fresh access tokens until it naturally expires. A copy-paste Python PoC demonstrating token replay after password change is published in the vendor's GHSA advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 07, 2026

wger before 2.6 fails to revoke bearer-style API credentials on logout or password change, allowing an attacker who already holds a stolen DRF authtoken or JWT refresh token to continue accessing protected /api/v2/* endpoints. The assessed CVSS is 4.8 with vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N, reflecting a moderate defense-in-depth authentication weakness rather than a high-urgency flaw. Publicly available exploit code exists in the form of proof-of-concept replay steps, but exploitation requires prior token theft and the vulnerability provides no means to obtain the token; active exploitation is not confirmed.

RemediationAI

Upgrade to wger 2.6 or later, which contains the vendor-released patch and implements JWT refresh-token rotation with blacklist-after-rotation. If immediate upgrade is not possible, manually rotate or delete all DRF authtokens via /user/api-key and invalidate or blacklist existing JWT refresh tokens; reduce REFRESH_TOKEN_LIFETIME to a short interval such as 3000 seconds to shrink the window, accepting more frequent re-authentication as a trade-off. Because logout and password change alone do not revoke credentials in vulnerable versions, users should assume stolen tokens remain valid and administrators should consider rotating signing keys if server-side revocation is unavailable, at the cost of invalidating all sessions. Advisory: https://github.com/wger-project/wger/security/advisories/GHSA-v3x9-6gg8-c2c9; patched release: https://github.com/wger-project/wger/releases/tag/2.6.

Affected VersionsENISA

wger < 2.6

Affected Packages

pypi wger fix: 2.6

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

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

Technical ContextAI · show details

The issue is CWE-287 improper authentication in wger's Django REST Framework and SimpleJWT token lifecycle. When a user logs out, /user/logout calls django_logout() and only clears the Django session cookie; password changes update the password hash but leave existing rows in authtoken_token valid and leave JWT refresh tokens usable because there is no server-side revocation list or token versioning. DRF tokens sent as 'Authorization: Token ...' persist until manually rotated or deleted, while JWT refresh tokens can keep minting new access tokens until natural expiry. The affected CPE is cpe:2.3:a:wger-project:wger:*:*:*:*:*:*:*:*; vulnerable files include wger/core/views/user.py, settings_global.py, main.py, and utils/api_token.py. wger 2.6 adds refresh-token rotation on every use and blacklist-after-rotation, making refresh tokens single-use and recommending a short REFRESH_TOKEN_LIFETIME such as 3000 seconds.

Know when Wger 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 (GitHub_M) PRIMARY 4.8 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 4.8 MEDIUM

AC:H because a token must first be stolen out-of-band and used within its validity window; PR:N since the attacker replays the victim's credential rather than their own; C:L/I:L and A:N as access is account-scoped with no availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 07, 2026 - 15:02 EUVD

DescriptionCVE.org

wger is a free, open-source workout and fitness manager. Versions prior to 2.6 have a vulnerability in the authentication/session lifecycle of wger where bearer-style API credentials remain valid after a user logs out and after a user changes their password. An attacker who steals a victim’s DRF authtoken (Authorization: Token ...) or JWT refresh token can continue to access protected /api/v2/* endpoints until the token is manually rotated/deleted (DRF token) or naturally expires (JWT refresh). Version 2.6 contains a patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Low
niche self-hosted open-source fitness tracker, limited enterprise footprint
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Wger

View all
CVE-2022-2650 CRITICAL POC
9.8 Nov 24

Improper Restriction of Excessive Authentication Attempts in GitHub repository wger-project/wger prior to 2.2. Rated cri

CVE-2023-38758 MEDIUM POC
5.4 Aug 08

Cross Site Scripting vulnerability in wger Project wger Workout Manager v.2.2.0a3 allows a remote attacker to gain privi

CVE-2023-38759 HIGH
8.8 Aug 08

Cross Site Request Forgery (CSRF) vulnerability in wger Project wger Workout Manager 2.2.0a3 allows a remote attacker to

CVE-2026-27839 MEDIUM POC
4.3 Feb 26

Wger versions up to 2.4 allow authenticated users to access other users' private nutrition plans through insecure direct

CVE-2026-27835 MEDIUM POC
4.3 Feb 26

Wger versions up to 2.4 expose all users' repetition configuration data to any authenticated attacker due to missing aut

CVE-2026-86255 HIGH
7.1 Sep 06

Uncontrolled resource consumption in wger before 2.5 allows any authenticated user to exhaust server worker threads and

CVE-2026-27838 LOW POC
3.1 Feb 26

wger is a free, open-source workout and fitness manager. Five routine detail action endpoints check a cache before calli

CVE-2026-46434 HIGH
7.1 Oct 07

Account-deactivation privilege escalation in wger before 2.6 lets an authenticated user who holds only the gym_trainer r

CVE-2026-46438 MEDIUM
6.5 Oct 07

Cross-user integrity corruption in wger versions prior to 2.6 allows authenticated attackers to inject arbitrary workout

CVE-2026-86254 MEDIUM
6.1 Sep 06

Incomplete authorization fix in wger through master exposes three user-management views in wger/core/views/user.py to th

CVE-2026-45161 MEDIUM
5.4 Oct 07

wger before 2.6 contains a CSRF bypass (CWE-352) that lets an attacker-controlled web page silently rebind an authentica

CVE-2026-82544 MEDIUM
5.3 Aug 30

Cross-site request forgery in wger's gym password-reset endpoint allows a remote attacker to force an arbitrary member's

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