Skip to content
Heist/ feed
Back to feed
Medium

wger: Stored XSS via Unescaped License Attribution Fields

Type: advisorySources: OSV

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

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-40353
Confirmed fixed CVEs
Not specified
Updated in this feed
5 Nov 2026, 01:22 UTC · Revision 1

Source evidence

wger: Stored XSS via Unescaped License Attribution Fields

core-osv · Original source

Published 17 Apr 2026, 21:16 UTC

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

osv:CVE-2026-40353
Complete source record
{
  "id": "b0855fe090796f7b268d7044052c895d6672dbe5de18c79bf0eaac70dd33e058",
  "url": "https://osv.dev/vulnerability/CVE-2026-40353",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "wger: Stored XSS via Unescaped License Attribution Fields",
    "summary": "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'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.",
    "evidence": "osv:CVE-2026-40353",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-40353",
      "aliases": [
        "CVE-2026-40353",
        "GHSA-6f54-qjvm-wwq3",
        "PYSEC-2026-3419"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/wger-project/wger",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "c1fca6bdf77d8ed80048d1b73a8da80cf36ee751"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.5"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "c1fca6bdf77d8ed80048d1b73a8da80cf36ee751"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "2.5"
                  },
                  {
                    "cpe": "cpe:2.3:a:wger:wger:*:*:*:*:*:*:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.5"
                      }
                    ],
                    "source": "CPE_RANGE"
                  }
                ]
              }
            }
          ],
          "versions": [
            "2.4",
            "2.3",
            "2.0",
            "1.9",
            "1.8",
            "1.7",
            "1.5",
            "1.4",
            "1.3",
            "1.2",
            "1.1",
            "1.0.3",
            "1.0.2",
            "1.0.1",
            "1.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-40353.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:41.425530382Z",
      "provider": "osv",
      "references": [
        "https://github.com/wger-project/wger/releases/tag/2.5",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40353.json",
        "https://github.com/wger-project/wger/security/advisories/GHSA-6f54-qjvm-wwq3",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-40353"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-79"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40353.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-40353",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 509024,
  "published_at": "2026-04-17T21:16:12.401+00:00"
}