Skip to main content

Lichess CVE-2026-103974

| EUVDEUVD-2026-101591 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-14 security-advisories@github.com
5.4
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain study chapter-add access
  2. Delivery
    Inject HTML via PGN Annotator tag
  3. Exploit
    Stored as Comment.Author.External
  4. Execution
    Victim opens study, innerHTML renders payload
  5. Impact
    Content 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Lila < c54596c9e1569d378fe20f80d4c790c6fdee54c4

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

Vendor (github) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

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

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

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

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
single open-source chess server, minimal self-hosted or enterprise deployment footprint
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy