{"schema_version":"1.9.0","id":"GHSA-75mw-h36v-2jv7","published":"2026-06-26T21:03:43Z","modified":"2026-07-21T20:00:29.980326743Z","summary":"Dosage Vulnerable to Stored Cross-Site Scripting (XSS) in HTML/RSS Output Handlers","details":"## Summary\n\nThe HTML and RSS output handlers in `dosagelib/events.py` write user-controlled content (comic text and page URLs) directly into generated files without proper HTML escaping. When a user scrapes a malicious webcomic and opens the generated HTML/RSS file, attacker-controlled JavaScript can execute in their browser.\n\n**CWE**: [CWE-79](https://cwe.mitre.org/data/definitions/79.html) - Improper Neutralization of Input During Web Page Generation (Cross-site Scripting)\n\n---\n\n## Details\n\n### Vulnerable Code Locations\n\nThe vulnerability exists in `dosagelib/events.py` where untrusted content is written to HTML/RSS output without escaping:\n\n**1. RSSEventHandler (lines 116-118)**\n```python\n# events.py:116-118\nif comic.text:\n description += '
%s' % comic.text # ← Unescaped comic.text\ndescription += '
View Comic Online' % pageUrl # ← Unescaped URL\n```\n\n**2. HtmlEventHandler (lines 232, 238)**\n```python\n# events.py:232\nself.html.write(u'