<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sun, 11 Oct 2026 22:20:42 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-46438</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-46438</link>
      <description>&lt;p&gt;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&amp;#39;s `SlotEntry` by supplying the victim&amp;#39;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&amp;#39;s injected data is silently folded into the victim&amp;#39;s progressive-overload calculations, corrupting their auto-generated weight and repetition targets. Version 2.6 contains a patch.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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&amp;#39;s `SlotEntry` by supplying the victim&amp;#39;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&amp;#39;s injected data is silently folded into the victim&amp;#39;s progressive-overload calculations, corrupting their auto-generated weight and repetition targets. Version 2.6 contains a patch.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-46438</guid>
    </item>
    <item>
      <title>GHSA-rjpf-7pf5-q54x — wger: Cross-User Data Corruption via Missing Ownership Check on WorkoutLog.slot_entry</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-rjpf-7pf5-q54x</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: wger&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;An authenticated attacker can inject arbitrary workout log entries into any other user&amp;#39;s `SlotEntry` by supplying the victim&amp;#39;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.&lt;/p&gt;
&lt;p&gt;Because `SlotEntry.get_config_data()` retrieves associated logs via `self.workoutlog_set.all()` with **no user filter**, the attacker&amp;#39;s injected data is silently folded into the victim&amp;#39;s progressive-overload calculations, corrupting their auto-generated weight and repetition targets.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;wger uses a centralized ownership-verification pattern in `WgerOwnerObjectModelViewSet.create()` (file: `wger/utils/viewsets.py`). This method iterates over the list returned by each ViewSet&amp;#39;s `get_owner_objects()` and verifies that every listed foreign-key value in the request belongs to the authenticated user. **Foreign keys not present in the list are never checked.**&lt;/p&gt;
&lt;p&gt;`WorkoutLogViewSet.get_owner_objects()` returns:&lt;/p&gt;
&lt;p&gt;```python
# File: wger/manager/api/views.py, lines 312-316
def get_owner_objects(self):
    return [(Routine, &amp;#39;routine&amp;#39;), (WorkoutSession, &amp;#39;session&amp;#39;)]
    #       ^^^^^^^ checked        ^^^^^^^^^^^^^^^ checked
    # (SlotEntry, &amp;#39;slot_entry&amp;#39;) is MISSING
```&lt;/p&gt;
&lt;p&gt;Because `slot_entry` is omitted, an attacker can supply their own `routine` (which passes the ownership check) alon…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: wger&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;An authenticated attacker can inject arbitrary workout log entries into any other user&amp;#39;s `SlotEntry` by supplying the victim&amp;#39;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.&lt;/p&gt;
&lt;p&gt;Because `SlotEntry.get_config_data()` retrieves associated logs via `self.workoutlog_set.all()` with **no user filter**, the attacker&amp;#39;s injected data is silently folded into the victim&amp;#39;s progressive-overload calculations, corrupting their auto-generated weight and repetition targets.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;wger uses a centralized ownership-verification pattern in `WgerOwnerObjectModelViewSet.create()` (file: `wger/utils/viewsets.py`). This method iterates over the list returned by each ViewSet&amp;#39;s `get_owner_objects()` and verifies that every listed foreign-key value in the request belongs to the authenticated user. **Foreign keys not present in the list are never checked.**&lt;/p&gt;
&lt;p&gt;`WorkoutLogViewSet.get_owner_objects()` returns:&lt;/p&gt;
&lt;p&gt;```python
# File: wger/manager/api/views.py, lines 312-316
def get_owner_objects(self):
    return [(Routine, &amp;#39;routine&amp;#39;), (WorkoutSession, &amp;#39;session&amp;#39;)]
    #       ^^^^^^^ checked        ^^^^^^^^^^^^^^^ checked
    # (SlotEntry, &amp;#39;slot_entry&amp;#39;) is MISSING
```&lt;/p&gt;
&lt;p&gt;Because `slot_entry` is omitted, an attacker can supply their own `routine` (which passes the ownership check) alon…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-rjpf-7pf5-q54x</guid>
    </item>
  </channel>
</rss>
