Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain album-edit permissions
-
DeliveryStore javascript: URI in Markdown description
-
ExploitVictim opens public gallery album
-
ExecutionVictim clicks rendered malicious link
-
ImpactExecute JavaScript, exfiltrate session data
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 | Exploitation requires three concrete conditions drawn from the description: (1) the attacker must be an authenticated user holding album-edit permissions, used to store a 'javascript:' URI inside an album or photo Markdown description; (2) the affected version (prior to 7.6.0) must be running with the default config/markdown.php setting allow_unsafe_links=true, which permits the unsafe URI to survive HTML conversion in PreformattedPhotoData.php / PreFormattedAlbumData.php; and (3) a victim must actively click the link as rendered via v-html in the gallery components (PhotoDetails.vue, Overlay.vue, PhotoThumb.vue, AlbumHero.vue, AlbumCard.vue). Limiting factors: the injection step needs an authenticated edit-capable account, and code execution does not occur on page load - it requires the victim's click (UI:A), so passive viewing alone is insufficient. The payoff is broadened because the clicking victim may be an unauthenticated public-album visitor. |
| Impact | This is a stored XSS (CWE-79) with a realistic but not alarming risk profile. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:A) and the 5.7 Medium score align well with the description: the attacker side requires an authenticated account holding album-edit permissions (PR:L), and successful exploitation depends on a victim actively clicking a rendered link (UI:A, AT:P). No EPSS score, KEV listing, or SSVC decision data was provided in the input, and no public exploit was identified - so there is no signal of active or probable exploitation. The GitHub references are a vendor security advisory, the fix PR, the fix commit, and the 7.6.0 release, i.e. patch artifacts rather than weaponized exploit code. The one notable amplification is that while the payload author must be authenticated, the victim can be an unauthenticated visitor to a public album, widening the pool of potential targets even though the injection barrier remains authenticated. The VC:H rating in the vendor vector (full confidentiality impact via session/token theft) is somewhat aggressive for a reflected-on-click XSS; real impact is bounded by what the clicking victim's session can access. Net: a legitimate issue worth patching, not an emergency - closer to a high-CVSS-components-but-moderate-real-risk item, gated by both an authenticated injection step and required user interaction. |
| Exploit ScenarioDerived | An attacker who holds album-edit rights sets a photo or album Markdown description to a 'javascript:' URI, which Lychee renders as a clickable link because allow_unsafe_links is enabled. When any visitor - including an unauthenticated user browsing a public album - clicks that link in the gallery view, attacker-controlled JavaScript runs in the Lychee origin and can read session data or issue requests as the victim. No public exploit code was identified at time of analysis, though the fixing PR and commit are public. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Stored cross-site scripting in Lychee photo-management software (all versions prior to 7.6.0) allows an authenticated user holding album-edit permissions to embed a javascript: URI inside an album or photo Markdown description, which is then converted to HTML server-side and rendered client-side via v-html in the gallery components. Because the payload is stored in album/photo metadata, any visitor who clicks the rendered link - including an unauthenticated visitor to a public album - executes attacker-controlled JavaScript in the Lychee origin, which can expose session data or let the attacker issue authenticated requests in the victim's context; exploitation requires the victim's click and therefore is not triggered by passive page views. The issue is fixed in Lychee 7.6.0 and no public exploit was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade to Lychee 7.6.0, which is published at https://github.com/LycheeOrg/Lychee/releases/tag/v7.6.0 and corresponds to the changes in https://github.com/LycheeOrg/Lychee/pull/4377 (commit f0604ead5889bfed404d6f5e1a9205f945172c7e), per the advisory https://github.com/LycheeOrg/Lychee/security/advisories/GHSA-pgfr-x389-5p2h. If upgrading immediately is not possible, the equivalent compensating control is to edit config/markdown.php and set allow_unsafe_links to false (and, optionally, lower max_nesting_level from PHP_INT_MAX to 10); the trade-off is that legitimate Markdown links using non-http schemes, relative targets, or other unsafe schemes will be stripped from descriptions, so user-visible link behaviour may change. Because the injection step requires an authenticated account with album-edit permissions, additionally restricting album-edit rights to trusted accounts and auditing existing album and photo descriptions for stored javascript: or data: URIs (removing any that are found) reduces the attack surface, though this is only a partial measure since a victim's single click is still needed for execution. Note that applying the feed-rendering fix for CVE-2026-33738 does not remediate this separate gallery-view flaw; no public exploit was identified at time of analysis.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-79 (improper neutralization of input during web page generation) arising from a deliberately permissive Markdown configuration rather than a traditional output-escaping bug. Lychee processes album and photo descriptions through league/commonmark, and the shipped config/markdown.php set allow_unsafe_links to true, which lets the parser preserve hazardous URI schemes such as javascript: (see the CommonMark security documentation on unsafe links). app/Http/Resources/Models/Utils/PreformattedPhotoData.php and app/Http/Resources/Models/Utils/PreFormattedAlbumData.php transform the stored description into HTML, and the Vue gallery components PhotoDetails.vue, Overlay.vue, PhotoThumb.vue, AlbumHero.vue, and AlbumCard.vue inject that HTML with v-html, which bypasses Vue's normal escaping and creates the execution sink. The upstream fix in pull request 4377 flips allow_unsafe_links to false and additionally reduces max_nesting_level from PHP_INT_MAX to 10 to bound Markdown nesting depth; the change is captured in commit f0604ead5889bfed404d6f5e1a9205f945172c7e and released as v7.6.0. The advisory explicitly distinguishes this gallery-view path from CVE-2026-33738, which covered feed rendering, so the two vulnerabilities share a class but affect different sinks and must be remediated independently. The assessed CVSS:3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) reflects stored XSS confined to the Lychee origin with scope change and low confidentiality/integrity impact; the CNA-published CVSS:4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N) is consistent on the authenticated (PR:L) and user-interaction-required dimension.
Know when Lychee gets its next vulnerability
- 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Authenticated album-edit account to inject so PR:L; victim must click the link so UI:R; XSS executes in a different browser context so S:C; limited session-level confidentiality/integrity impact, no availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Lychee is a free, open-source photo-management tool. Prior to 7.6.0, Lychee permits an authenticated user with album-edit permissions to store a javascript URI in an album or photo Markdown description because config/markdown.php enables allow_unsafe_links. app/Http/Resources/Models/Utils/PreformattedPhotoData.php and app/Http/Resources/Models/Utils/PreFormattedAlbumData.php convert the description to HTML, and the gallery components PhotoDetails.vue, Overlay.vue, PhotoThumb.vue, AlbumHero.vue, and AlbumCard.vue render that HTML with v-html. A visitor, including an unauthenticated visitor to a public album, who clicks the rendered link executes attacker-controlled JavaScript in the Lychee origin, which can expose session data or enable authenticated requests in the victim's context. This gallery-view flaw is distinct from CVE-2026-33738, which addressed feed rendering. This issue is fixed in version 7.6.0.
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.
Cross-site Request Forgery (CSRF) vulnerability in Lychee version 3.1.6, allows remote attackers to execute arbitrary co
Cross Site Scripting (XSS) vulnerability in Lychee 3.1.6, allows remote attackers to execute arbitrary code and obtain s
Lychee is a free photo-management tool. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable,
Authenticated path traversal in Lychee photo-management tool prior to 7.6.4 allows any logged-in user to read files acce
Lychee photo management tool versions before 7.1.0 contain an authorization bypass in the album password unlock mechanis
Paid fulfillment bypass in Lychee (Supporter/Pro editions) before 7.7.0: the checkout validators accept any OmnipayProvi
Unauthenticated buyers on Lychee instances running the Supporter/Pro webshop can tamper with the parameters handed to th
Unauthenticated attackers who know the shared identifier of a public, password-protected Lychee album can pull down a ZI
Lychee photo-management instances running versions prior to 7.6.1 expose POST /api/v2/Album::unlock with no throttle, at
Denial of service in Lychee before 7.7.0 allows an authenticated user with upload/import permission to tie up image-proc
Unauthenticated remote attackers can retrieve a complete OpenAPI schema and repeatedly force CPU-intensive schema regene
Lychee-v3 3.2.16 is affected by a Cross Site Scripting (XSS) vulnerability in php/Access/Guest.php. Rated medium severit
EUVD-2026-102187
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB