CVE-2026-54743: Lemmy: Stored XSS via markdown image alt-text in lemmy-ui html5-embed
Lemmy is a link aggregator and forum for the fediverse. Prior to lemmy-ui 0.19.19-beta.1, LemmyNet/lemmy-ui renders Markdown in src/shared/markdown.ts for post bodies, comment bodies, private messages, and community and site sidebars through mdToHtml, which returns a raw html object that Inferno injects without a sanitizer pass. setupMarkdown configures html as false but registers markdown-it-html5-embed@1.0.0 with useImageSyntax enabled, so an image targeting video media becomes a video element whose fallback incorporates the image alt text through unescaped string replacement. The html setting does not apply to plugin-generated output, allowing crafted alt text to reach the DOM as live HTML in contexts that do not use mdToHtmlNoImages. An approved member or a remote federated instance can store such content, and a viewer who renders it may execute JavaScript in the lemmy-ui origin, exposing the viewer's session and authenticated actions. The advisory notes that Content Security Policy prevents the described exploit in production, but also states that the tested default self-hosted deployment serves no Content-Security-Policy. This issue is fixed in lemmy-ui version 0.19.19-beta.1.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
lemmy-uito a version that resolves this vulnerability.Fixed in 0.19.19-beta.1 - Compensating control
Ensure a Content Security Policy (CSP) is configured/enforced for the self-hosted deployment so the stored XSS exploit is prevented (the advisory states the tested default self-hosted deployment serves no Content-Security-Policy).
Event History
Frequently Asked Questions
Which deployments and content paths are exposed?
lemmy-ui versions before 0.19.19-beta.1 are affected where Markdown is rendered through mdToHtml. This includes post bodies, comment bodies, private messages, and community and site sidebars, except contexts that use mdToHtmlNoImages.
Who can supply exploit content, and what must happen for exploitation?
An approved member or a remote federated instance can store the crafted Markdown. A victim must then render the affected content in the lemmy-ui interface for JavaScript to execute in the lemmy-ui origin.
Are default self-hosted installations protected by Content Security Policy?
No. Although the advisory says CSP prevents the described exploit in production, it also states that the tested default self-hosted deployment serves no Content-Security-Policy.
What is the impact if a viewer executes the injected script?
The script executes in the lemmy-ui origin and can expose the viewer's session and authenticated actions.