Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Lychee API endpoint
-
DeliveryEnumerate guessed photo identifiers
-
ExploitSend POST /api/v2/Photo::highlight
-
ExecutionDistinguish existing private photos via responses
-
ImpactToggle is_highlighted on target photo
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the installation to have the non-default configuration setting photos_star_visibility set to 'anonymous' - the flaw does not exist under the default setting. The attacker targets the POST /api/v2/Photo::highlight endpoint and must guess or enumerate valid photo identifiers (reflected in CVSS AC:H/AT:P), since SetPhotosHighlightedRequest::processValidatedValues() runs before authorization and PhotoPolicy::canHighlight() omitted a canSee check. Limiting factors that reduce real-world risk: the non-default config dependency, the need to guess opaque photo IDs, and the narrow impact (existence disclosure plus toggling is_highlighted, with no read of photo content, no deletion, and no availability impact). The description's 'unauthenticated' claim conflicts with the input vector's PR:L, so authentication requirements should be verified with the vendor. |
| Impact | This is a low-priority, low-real-risk access-control flaw (CWE-284) despite being network-reachable. The provided CVSS 4.0 vector (score 2.3) reflects the limited impact: AV:N but AC:H and AT:P mean exploitation is non-trivial (the attacker must guess valid photo identifiers), and the only confidentiality effect is an existence oracle while the only integrity effect is toggling a photo's is_highlighted flag (VI:L, VC:N/VA:N). No EPSS score, CISA KEV listing, or public POC was provided, so there is no evidence of active exploitation or weaponization. One important conflict must be flagged: the description explicitly states an 'unauthenticated attacker,' yet the provided CVSS 4.0 vector sets PR:L (authenticated) - this should be verified with the vendor, though the advisory narrative and the anonymous star-visibility context strongly favor unauthenticated access. A second nuance: the description's existence-disclosure/enumeration primitive arguably warrants a low confidentiality impact, whereas the provided vector marks VC:N. Critically, the flaw only exists when the non-default photos_star_visibility=anonymous setting is enabled, which sharply narrows the exposed population and keeps overall risk low. |
| Exploit ScenarioDerived | On a Lychee instance configured with the non-default photos_star_visibility=anonymous setting, a remote attacker iterates over guessed photo IDs against POST /api/v2/Photo::highlight; differing success versus not-found responses let them confirm which private or password-protected photos exist, and for existing ones they flip the is_highlighted state. No public exploit code was identified at time of analysis, and the high attack complexity (identifier guessing) limits practicality. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Improper access control in Lychee before 7.6.1 allows remote attackers to probe for and alter the highlight (star) state of photos they are not permitted to see, including photos in private or password-protected albums. The flaw only exists on installations configured with the non-default setting photos_star_visibility set to 'anonymous', where PhotoPolicy::canHighlight() returns true for callers without performing a canSee check, and SetPhotosHighlightedRequest::processValidatedValues() runs before authorization. Impact is narrow - existence disclosure via differing success/not-found responses plus toggling of is_highlighted - with no read of photo content, no deletion and no availability impact; exploitation additionally requires guessing valid photo identifiers, and no public exploit code has been identified at time of analysis (no CISA KEV listing). Note the source description labels the attacker 'unauthenticated' while the supplied CVSS 4.0 vector carries PR:L, and our independent assessment scores it PR:N, so authentication requirements are not fully confirmed from available data and should be verified with the vendor.
RemediationAI
Vendor-released patch: Lychee 7.6.1 (release tag v7.6.1, upstream PR #4449, commit fe07567c176bbdcda7b276bb6d664dfcd47a9b00) - upgrade to 7.6.1 or later; the fix adds the canSee() check to both the ANONYMOUS and AUTHENTICATED branches of PhotoPolicy::canHighlight() and eager-loads albums.access_permissions so visibility is enforced during resolution. If you cannot upgrade immediately, revert photos_star_visibility from 'anonymous' to the default (non-anonymous) value so the vulnerable anonymous code path is unreachable; the trade-off is that anonymous visitors lose the ability to star/highlight photos, and note that this interim step does not fully address the underlying missing canSee check for authenticated users, which is why patching remains required. As an additional compensating control, restrict access to /api/v2/Photo and the Photo::highlight endpoint at the reverse proxy for untrusted networks (recognizing this breaks legitimate API clients and any external integrations until the side effect is reconciled), and monitor server/access logs for repeated highlight requests with sequential or guessed photo IDs, which would indicate enumeration attempts. Verify the advisory at https://github.com/LycheeOrg/Lychee/security/advisories/GHSA-qcqq-p4pq-7r77 for vendor guidance, and confirm with the vendor whether authenticated or unauthenticated callers are required, given the PR:L/PR:N discrepancy between the supplied CVSS 4.0 vector and the description.
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
Lychee is an open-source, self-hosted photo management application built on PHP/Laravel, and the affected logic sits in its request-and-policy authorization layer. The root cause is CWE-284 Improper Access Control: in BaseApiRequest::validateResolved(), the request class SetPhotosHighlightedRequest::processValidatedValues() is invoked to fetch and hydrate the target Photo (eager-loading size_variants and albums) before the policy check runs, so the photo object is resolved and any success-versus-not-found difference is exposed to the caller prior to any visibility enforcement. Compounding this, PhotoPolicy::canHighlight() had branches mapping PhotoHighlightVisibilityType::ANONYMOUS => true and AUTHENTICATED => $user ! null, neither of which invoked canSee(), meaning an anonymous caller reaching the POST /api/v2/Photo::highlight endpoint could both distinguish existing-but-invisible photos and mutate their is_highlighted flag. The upstream fix in PR #4449 changes the eager-load set to include albums.access_permissions and rewrites both branches to require canSee($user, $photo) (ANONYMOUS => canSee, AUTHENTICATED => $user ! null && canSee), with test changes switching the exercised photos from a public photo (photo1) to a non-visible one (photo4) to assert denial. The CPE cpe:2.3:a:lycheeorg:lychee:*:*:*:*:*:*:*:* with no version bound matches all pre-7.6.1 releases; the vulnerability is reachable only when the operational toggle photos_star_visibility is 'anonymous' rather than the default.
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:H/AT:P/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
PR:N per description's unauthenticated claim; AC:H because exploitation depends on guessing photo IDs and a non-default setting; C:L for the existence oracle, I:L for toggling is_highlighted, A:N.
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.1, when photos_star_visibility is set to anonymous, POST /api/v2/Photo::highlight can fetch and modify a photo without confirming that the caller can see it. BaseApiRequest::validateResolved() invokes SetPhotosHighlightedRequest::processValidatedValues() before authorization, and PhotoPolicy::canHighlight() returns true for anonymous callers without a canSee check. An unauthenticated attacker who can guess photo identifiers can distinguish existing private photos through differing success and not-found responses and can change their is_highlighted state, including for photos in private or password-protected albums. The issue is limited to installations using the non-default anonymous star-visibility setting. This issue is fixed in version 7.6.1.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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-102190
NVD
CVE.org
EPSS
GitHub
Exploit-DB