CVE-2026-46438 wger: Cross-User Data Corruption via Missing Ownership Check on WorkoutLog.slot_entry
An authenticated attacker can inject arbitrary workout log entries into other users' profiles, corrupting their training data calculations.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- None listed
What is CVE-2026-46438?
CVE-2026-46438 is a medium-severity missing authorization vulnerability in wger-project wger, published on 7 Oct 2026. Any signed-in user can exploit it over the network, with no action from the victim.
Official description
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.
Which versions are affected by CVE-2026-46438?
3 open source packages ship an affected version, including wger.
| Package | Affected | Fixed in |
|---|---|---|
wger PyPI | All versions to 2.1 | None |
wger PyPI | All versions to 2.1 | None |
wger PyPI | All versions to 2.1 | None |
How do I fix CVE-2026-46438?
No fix has been published for CVE-2026-46438 yet. Limit exposure of the affected software until one is available.
Upgrade, and check permissions on every request on the server, not only in the interface. More about Missing authorization.
Is CVE-2026-46438 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-46438 exists.
Sources
Also known as GHSA-rjpf-7pf5-q54x, PYSEC-2026-4314.