Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with valid account
-
ExploitEnumerate victim's SlotEntry ID
-
ExecutionPOST workoutlog with own routine + victim slot_entry
-
ImpactCorrupt 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Improper Restriction of Excessive Authentication Attempts in GitHub repository wger-project/wger prior to 2.2. Rated cri
Cross Site Scripting vulnerability in wger Project wger Workout Manager v.2.2.0a3 allows a remote attacker to gain privi
Cross Site Request Forgery (CSRF) vulnerability in wger Project wger Workout Manager 2.2.0a3 allows a remote attacker to
Wger versions up to 2.4 allow authenticated users to access other users' private nutrition plans through insecure direct
Wger versions up to 2.4 expose all users' repetition configuration data to any authenticated attacker due to missing aut
Uncontrolled resource consumption in wger before 2.5 allows any authenticated user to exhaust server worker threads and
wger is a free, open-source workout and fitness manager. Five routine detail action endpoints check a cache before calli
Account-deactivation privilege escalation in wger before 2.6 lets an authenticated user who holds only the gym_trainer r
Incomplete authorization fix in wger through master exposes three user-management views in wger/core/views/user.py to th
wger before 2.6 contains a CSRF bypass (CWE-352) that lets an attacker-controlled web page silently rebind an authentica
Cross-site request forgery in wger's gym password-reset endpoint allows a remote attacker to force an arbitrary member's
Open redirect in wger's trainer_login view allows an attacker to redirect an authenticated trainer's browser to an arbit
EUVD-2026-94335
GHSA-rjpf-7pf5-q54x
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB