Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain study chapter-add access
-
DeliveryInject HTML via PGN Annotator tag
-
ExploitStored as Comment.Author.External
-
ExecutionVictim opens study, innerHTML renders payload
-
ImpactContent spoofing / redirect / CSS data exposure
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated lichess user who has permission to add a chapter to a study (contributor/owner of a shared study), who places attacker-controlled HTML/CSS in the PGN 'Annotator' tag - stored as Comment.Author.External and emitted by authorText(). The vulnerable rendering path in inlineView.ts triggers only when a study node has at least two comments, and the payload executes only when another user opens the affected study (UI:R). Exploitation is meaningfully LIMITED: the site's Content Security Policy blocks injected JavaScript, so impact is confined to stored HTML/CSS injection - content spoofing, navigation to attacker-controlled sites, and CSS-based data exposure - rather than script execution, cookie theft, or session takeover. |
| Impact | This is a genuine but moderate-severity stored XSS (CWE-79) that is deliberately bounded by multiple real-world constraints rather than a top-priority emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, 5.4 Medium) aligns well with the description: network-reachable but requiring an authenticated actor who can add a chapter to a study (PR:L) and requiring a victim to open the malicious study (UI:R). The scope change (S:C) correctly reflects that the injected content executes in the browser context of other viewers. SSVC reinforces this as mid-tier: Exploitation=poc (code/technique available, not active exploitation), Automatable=no (each attack needs a victim to open a specific study), and Technical Impact=partial - consistent with the C:L/I:L/A:N impact. Critically, the description states the site's Content Security Policy blocks injected JavaScript, so this is HTML/CSS injection enabling content spoofing, redirection to attacker sites, and CSS-based data exposure - NOT full script execution or session hijacking. There is no EPSS score and no KEV listing in the provided data, and the SSVC 'poc' status indicates a known technique but no evidence of in-the-wild use. Net: a legitimate issue worth patching promptly, but the PR:L + UI:R + CSP-limited impact combination makes it a managed-risk item rather than a drop-everything priority. |
| Exploit ScenarioDerived | An attacker with a lichess account that can contribute chapters to a shared study uploads a PGN whose 'Annotator' tag contains crafted HTML/CSS; this is stored as the comment author and rendered verbatim into innerHTML when the node has at least two comments. When other users open the study, the attacker-controlled markup renders in their browsers, spoofing content or linking to an attacker-controlled site. A proof-of-concept technique is referenced via the GitHub advisory (SSVC Exploitation=poc), though CSP prevents the injected payload from running JavaScript. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Stored cross-site scripting in Lichess study analysis lets an authenticated user who can add a chapter to a shared study embed attacker-controlled HTML and CSS in the PGN 'Annotator' tag, which is then rendered unescaped for other viewers who open that study, producing content spoofing, navigation to attacker-controlled sites, and CSS-based data exposure. Because the site's Content Security Policy blocks injected JavaScript, the impact is bounded to markup and style injection rather than script execution, cookie theft, or session takeover, and the vulnerable rendering branch only triggers when a study node carries at least two comments. Publicly available exploit code exists, but the flaw is not confirmed as actively exploited; the CVSS 3.1 vector AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N gives a base score of 5.4 that reflects the authenticated write prerequisite and the required victim interaction.
RemediationAI
Apply the upstream fix at commit c54596c9e1569d378fe20f80d4c790c6fdee54c4 or later in lichess-org/lila - upstream fix available (PR/commit); released patched version not independently confirmed - so self-hosted operators should redeploy from a revision that includes escapeHtml(authorText(comment.by)) in ui/analyse/src/treeView/inlineView.ts, while hosted lichess.org is corrected by the same change. Where an immediate upgrade is not possible, restrict who may add or edit study chapters (contributor and owner roles) to trusted users, which removes the authenticated write prerequisite at the cost of reduced collaboration, and screen imported or pasted PGN for Annotator tags containing markup before saving a study. Keep the site's strict Content Security Policy in place: it is the primary reason the impact remains HTML and CSS injection rather than script execution, and loosening or disabling it for any workaround would materially raise the severity and should not be done. The vendor advisory and any updates are tracked at https://github.com/lichess-org/lila/security/advisories/GHSA-43g7-r6hp-ccf8.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is the lichess-org/lila front end, specifically ui/analyse/src/treeView/inlineView.ts, where comment metadata attached to study nodes is assembled into HTML and handed to the innerHTML hook. Study chapters are stored as PGN, and the PGN Annotator tag is mapped into Comment.Author.External and emitted verbatim by authorText(); before commit c54596c9e1569d378fe20f80d4c790c6fdee54c4 that string was concatenated into a <span class="by"> element without encoding. This is a textbook CWE-79 (Improper Neutralization of Input During Web Page Generation) stored-XSS pattern, where the root cause is the absence of output encoding at the point of HTML construction rather than a missing input filter, and the rendering branch is only reached when a node has at least two comments. The upstream patch is a single-line change wrapping authorText(comment.by) in escapeHtml() from the lib module, and the site's Content Security Policy is the control that keeps the injected markup from escalating into JavaScript execution.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Requires an authenticated study contributor (PR:L) and a victim opening the study (UI:R); payload runs in other users' browsers (S:C); CSP blocks JS so confidentiality/integrity impact is limited (C:L/I:L) and availability unaffected (A:N).
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
lichess.org is the forever free, adless and open source chess server. Prior to commit c54596c9e1569d378fe20f80d4c790c6fdee54c4, a user who can add a chapter to a study can place attacker-controlled text in the PGN Annotator tag, which becomes Comment.Author.External and is returned verbatim by authorText. When a study node has at least two comments, ui/analyse/src/treeView/inlineView.ts interpolates that author string into HTML passed to the innerHTML hook without escaping it. Opening the affected study can therefore render stored attacker-controlled HTML and CSS for other viewers, including navigation to an attacker-controlled site, content spoofing, and CSS-based data exposure, although the site's content security policy blocks injected JavaScript. This vulnerability is fixed by commit c54596c9e1569d378fe20f80d4c790c6fdee54c4.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-101591
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB