Skip to main content

wger CVE-2026-46438

| EUVDEUVD-2026-94335 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-07 GitHub_M GHSA-rjpf-7pf5-q54x
6.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with valid account
  2. Exploit
    Enumerate victim's SlotEntry ID
  3. Execution
    POST workoutlog with own routine + victim slot_entry
  4. Impact
    Corrupt victim's progression targets

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Requires (1) a valid authenticated account on the target wger instance, (2) the attacker owning at least one Routine of their own to satisfy the routine ownership check, and (3) knowledge or enumeration of the victim's numeric SlotEntry ID, submitted as the 'slot_entry' field in a POST /api/v2/workoutlog/ request. No user interaction or non-default configuration is needed - it works against default wger behavior. Exploitation is inherently limited to multi-user/shared instances (a single-user self-hosted deployment has no other user to target) and to integrity of workout-progression data only; it grants no read access, code execution, or availability impact.

Impact

This is a medium-severity authorization flaw (CWE-639, IDOR) whose real-world risk is moderate and bounded. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N, base 6.5) is internally consistent with the description: network-reachable REST API, low attack complexity, and a requirement that the attacker hold a valid account (PR:L) - correctly NOT PR:N, since the attacker must authenticate and own at least one Routine to pass the partial ownership check. Impact is integrity-only (C:N/A:N): no data is read or exfiltrated and no availability is lost; the attacker can only corrupt a victim's auto-generated progressive-overload weight/repetition targets, so I:H reflects total corruption of a narrow data set rather than system-wide integrity loss. No EPSS score, SSVC decision, or CISA KEV entry was provided in the input, so exploitation-probability and automatability signals are UNKNOWN. A detailed proof-of-concept (full HTTP request) is published in the GHSA advisory, so working exploit code is effectively public, but public PoC is not the same as active exploitation - there is no evidence of in-the-wild use. Net assessment: a legitimate bug worth patching on multi-user instances, but a low-priority, low-urgency item relative to RCE/credential-theft classes - the authentication requirement, integrity-only impact, and niche multi-tenant deployment pattern all cap the real-world risk well below what a raw 'network, low-complexity' reading might suggest.

Exploit ScenarioDerived

On a shared/multi-tenant wger instance, an authenticated user who knows or enumerates another user's sequential SlotEntry ID sends a single POST /api/v2/workoutlog/ request referencing their own Routine (to satisfy the ownership check) but the victim's slot_entry. The server never validates slot_entry ownership, so the forged log is persisted and silently folded into the victim's progression calculations, corrupting their recommended weights/reps. A copy-paste-ready PoC request 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

Cross-user integrity corruption in wger versions prior to 2.6 allows authenticated attackers to inject arbitrary workout log entries into another user's SlotEntry by exploiting a missing ownership check. A crafted POST to /api/v2/workoutlog/ with the victim's SlotEntry ID is accepted and persisted, silently folding the injected data into the victim's progressive-overload calculations and corrupting auto-generated weight and repetition targets. This IDOR (CWE-639) is rated medium severity (CVSS 6.5, PR:L), with a public proof-of-concept in the advisory; version 2.6 contains the vendor patch. Exploitation is bounded to multi-user instances and affects only data integrity-no read access, code execution, or availability impact.

RemediationAI

The primary remediation is to upgrade wger to version 2.6, which contains the vendor patch for this missing ownership check. The advisory (https://github.com/wger-project/wger/security/advisories/GHSA-rjpf-7pf5-q54x) and release notes for 2.6 should be reviewed, and the release includes breaking changes (e.g., offline mode, social login/2FA, JWT refresh rotation), so testing in a staging environment before production deployment is advised. If an immediate upgrade is not possible, no configuration toggle exists to directly disable the vulnerable behavior. As a compensating control with trade-offs, restrict API access to trusted, authenticated users on the same instance and monitor for anomalous workoutlog creation events where the slot_entry foreign key belongs to a different user; this does not prevent the attack but may aid detection. Adding custom server-side validation to ensure slot_entry ownership in WorkoutLogViewSet.get_owner_objects() is a temporary code-level mitigation for operators who maintain a fork, but it must be applied consistently and tested. Side effects of access restriction include potential disruption to legitimate multi-user or mobile-app sync workflows, and any custom patch may conflict with future upstream updates.

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 vulnerability is a classic Insecure Direct Object Reference (IDOR) under CWE-639, arising from a missing authorization check in wger's Django REST Framework API. The generic WgerOwnerObjectModelViewSet.create() method enforces ownership by iterating over a ViewSet's get_owner_objects() list, but WorkoutLogViewSet omits the SlotEntry foreign key from that list (it only checks Routine and WorkoutSession). An authenticated attacker who owns any Routine can thus supply a victim's numeric slot_entry ID in a workoutlog creation request; the server never verifies that the SlotEntry belongs to the requester. The second flaw is in SlotEntry.get_config_data(), which retrieves associated logs via self.workoutlog_set.all() with no user filter, so injected cross-user entries are included in progression calculations. The affected CPE is cpe:2.3:a:wger-project:wger:*:*:*:*:*:*:*:*; the pip package wger is listed as vulnerable up to version 2.1.

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 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
vuln.today AI 6.5 MEDIUM

Exploited via authenticated REST API (AV:N, AC:L, PR:L, UI:N); no read or availability impact (C:N/A:N) but victim's progression data is fully corrupted (I:H), scope unchanged.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
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. Prior to version 2.6, an authenticated attacker can inject arbitrary workout log entries into any other user's SlotEntry by supplying the victim's slot_entry ID in a POST /api/v2/workoutlog/ request. The slot_entry foreign key is not included in the ownership verification performed by WorkoutLogViewSet.get_owner_objects(), so the server accepts and persists the cross-user reference without error. Because SlotEntry.get_config_data() retrieves associated logs via self.workoutlog_set.all() with no user filter, the attacker's injected data is silently folded into the victim's progressive-overload calculations, corrupting their auto-generated weight and repetition targets. Version 2.6 contains a patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
niche self-hosted open-source fitness tracker, limited enterprise footprint
Threat Intel
1
1 sources
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

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

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-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

CVE-2026-86256 MEDIUM
5.1 Sep 06

Open redirect in wger's trainer_login view allows an attacker to redirect an authenticated trainer's browser to an arbit

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