<?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://cve.radiocsirt.org</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>Wed, 21 Oct 2026 16:06:37 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-40353 — wger: Stored XSS via Unescaped License Attribution Fields</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-40353</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; wger-project wger&lt;/p&gt;
&lt;p&gt;wger is a free, open-source workout and fitness manager. In versions 2.5 and below, the attribution_link property in AbstractLicenseModel constructs HTML by directly interpolating user-controlled license fields (such as license_author) without escaping, and templates render the result using Django&amp;#39;s |safe filter. An authenticated user can create an ingredient with a malicious license_author value containing JavaScript, which executes in the browser of any visitor viewing the ingredient page, resulting in stored XSS. This issue has been fixed in version 2.5.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; wger-project wger&lt;/p&gt;
&lt;p&gt;wger is a free, open-source workout and fitness manager. In versions 2.5 and below, the attribution_link property in AbstractLicenseModel constructs HTML by directly interpolating user-controlled license fields (such as license_author) without escaping, and templates render the result using Django&amp;#39;s |safe filter. An authenticated user can create an ingredient with a malicious license_author value containing JavaScript, which executes in the browser of any visitor viewing the ingredient page, resulting in stored XSS. This issue has been fixed in version 2.5.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-40353</guid>
    </item>
    <item>
      <title>PYSEC-2026-3419 — wger has Stored XSS via Unescaped License Attribution Fields</title>
      <link>https://cve.radiocsirt.org/vuln/pysec-2026-3419</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: wger&lt;/p&gt;
&lt;p&gt;# Stored XSS via Unescaped License Attribution Fields&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The `AbstractLicenseModel.attribution_link` property in `wger/utils/models.py` constructs HTML strings by directly interpolating user-controlled fields (`license_author`, `license_title`, `license_object_url`, `license_author_url`, `license_derivative_source_url`) without any escaping. The resulting HTML is rendered in the ingredient view template using Django&amp;#39;s `|safe` filter, which disables auto-escaping. An authenticated user can create an ingredient with a malicious `license_author` value containing JavaScript, which executes when any user (including unauthenticated visitors) views the ingredient page.&lt;/p&gt;
&lt;p&gt;## Severity&lt;/p&gt;
&lt;p&gt;**High** (CVSS 3.1: ~7.6)&lt;/p&gt;
&lt;p&gt;- Low-privilege attacker (any authenticated non-temporary user)
- Stored XSS — persists in database
- Triggers on a public page (no authentication needed to view)
- Can steal session cookies, perform actions as other users, redirect to phishing&lt;/p&gt;
&lt;p&gt;## CWE&lt;/p&gt;
&lt;p&gt;CWE-79: Improper Neutralization of Input During Web Page Generation (&amp;#39;Cross-site Scripting&amp;#39;)&lt;/p&gt;
&lt;p&gt;## Affected Components&lt;/p&gt;
&lt;p&gt;### Vulnerable Property
**File:** `wger/utils/models.py:88-110`&lt;/p&gt;
&lt;p&gt;```python
@property
def attribution_link(self):
    out = &amp;#39;&amp;#39;
    if self.license_object_url:
        out += f&amp;#39;&amp;lt;a href=&amp;#34;{self.license_object_url}&amp;#34;&amp;gt;{self.license_title}&amp;lt;/a&amp;gt;&amp;#39;
    else:
        out += self.license_title  # NO ESCAPING
    out += &amp;#39; by &amp;#39;
    if self.license_author_url:
        out += f&amp;#39;&amp;lt;a href=&amp;#34;{self.license_author_url}&amp;#34;&amp;gt;{self.…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: wger&lt;/p&gt;
&lt;p&gt;# Stored XSS via Unescaped License Attribution Fields&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The `AbstractLicenseModel.attribution_link` property in `wger/utils/models.py` constructs HTML strings by directly interpolating user-controlled fields (`license_author`, `license_title`, `license_object_url`, `license_author_url`, `license_derivative_source_url`) without any escaping. The resulting HTML is rendered in the ingredient view template using Django&amp;#39;s `|safe` filter, which disables auto-escaping. An authenticated user can create an ingredient with a malicious `license_author` value containing JavaScript, which executes when any user (including unauthenticated visitors) views the ingredient page.&lt;/p&gt;
&lt;p&gt;## Severity&lt;/p&gt;
&lt;p&gt;**High** (CVSS 3.1: ~7.6)&lt;/p&gt;
&lt;p&gt;- Low-privilege attacker (any authenticated non-temporary user)
- Stored XSS — persists in database
- Triggers on a public page (no authentication needed to view)
- Can steal session cookies, perform actions as other users, redirect to phishing&lt;/p&gt;
&lt;p&gt;## CWE&lt;/p&gt;
&lt;p&gt;CWE-79: Improper Neutralization of Input During Web Page Generation (&amp;#39;Cross-site Scripting&amp;#39;)&lt;/p&gt;
&lt;p&gt;## Affected Components&lt;/p&gt;
&lt;p&gt;### Vulnerable Property
**File:** `wger/utils/models.py:88-110`&lt;/p&gt;
&lt;p&gt;```python
@property
def attribution_link(self):
    out = &amp;#39;&amp;#39;
    if self.license_object_url:
        out += f&amp;#39;&amp;lt;a href=&amp;#34;{self.license_object_url}&amp;#34;&amp;gt;{self.license_title}&amp;lt;/a&amp;gt;&amp;#39;
    else:
        out += self.license_title  # NO ESCAPING
    out += &amp;#39; by &amp;#39;
    if self.license_author_url:
        out += f&amp;#39;&amp;lt;a href=&amp;#34;{self.license_author_url}&amp;#34;&amp;gt;{self.…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/pysec-2026-3419</guid>
    </item>
  </channel>
</rss>
