Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Supporter/Pro webshop checkout as guest
-
ExploitSubmit hidden Dummy provider in session request
-
ExecutionComplete dummy test-gateway finalize flow
-
ImpactAuto-fulfill releases purchasable item unpaid
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Requires a Lychee Supporter or Pro edition instance running the webshop with at least one enabled purchasable item. The free-item release specifically requires webshop_auto_fulfill_enabled to be turned on so OrderCompletedListener::fullfillOrder() auto-releases the item; the unauthenticated guest path additionally requires webshop_allow_guest_checkout to be enabled (otherwise a registered buyer account is needed). These are non-default, paid-edition and opt-in configuration flags, which materially limits the exploitable population. A further unverified limit: the closed-source license middleware was bypassed during testing, so the real license layer may perform extra payment-provider validation that blocks this on genuinely licensed deployments. |
| Impact | This is a genuine but conditional integrity flaw, not a drive-by critical. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 8.3 (High) and models the attack honestly: network-reachable and unauthenticated for the guest path, but with AT:P (Attack Requirements: Present) reflecting that specific webshop configuration must be in place. The primary impact is VI:H (integrity) - a buyer obtains a purchasable item without real payment - with only VC:L confidentiality and no availability impact, so this is a fraud/revenue-loss issue rather than a system-compromise or RCE issue. No EPSS score, no CISA KEV listing, and no public exploit code were provided, so exploitation status is 'no public exploit identified at time of analysis'; the only public artifacts are the vendor advisory, fix commit, and PR diff, which describe the flaw but are not weaponized exploit code. The main caveat the vendor states explicitly: testing bypassed the closed-source license middleware, so whether the production license layer performs additional payment-provider validation remains UNVERIFIED - meaning real-world exploitability on a licensed Supporter/Pro instance is not fully confirmed. Overall priority is moderate: easy to trigger where conditions are met, but gated behind paid-edition webshop deployment and specific config flags, limiting the population of exploitable targets. |
| Exploit ScenarioDerived | On a Lychee Supporter/Pro instance running the webshop with guest checkout enabled, an attacker (or any guest buyer) starts a checkout session and directly submits the hidden 'Dummy' Omnipay test provider, which CreateSessionRequest accepts because it checks only that the value is a valid OmnipayProviderType and never calls isAllowed(). The attacker completes the fake test-gateway flow with no real payment, and if webshop_auto_fulfill_enabled is set, OrderCompletedListener::fullfillOrder() releases the purchasable item for free. No exploit code is public; the attack requires only crafted checkout requests and is network-reachable without authentication on the guest path. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Paid fulfillment bypass in Lychee (Supporter/Pro editions) before 7.7.0: the checkout validators accept any OmnipayProviderType enum value, including the Dummy test gateway that is deliberately hidden from production checkout, so a remote unauthenticated buyer - where webshop_allow_guest_checkout is enabled - can start and finalize a session against the Dummy gateway and, with webshop_auto_fulfill_enabled on, have OrderCompletedListener::fullfillOrder() release the purchasable item without any real payment. The integrity impact is genuine but conditional (CVSS 4.0 base 8.3 with Attack Requirements: Present; assessed CVSS 3.1 8.3, C:L/I:H/A:N), since exploitation requires a paid Supporter/Pro instance running the webshop with at least one enabled purchasable item and the relevant opt-in flags. No public exploit identified at time of analysis, and the vendor has released a fixed version, 7.7.0.
RemediationAI
Vendor-released patch: upgrade to Lychee 7.7.0 (https://github.com/LycheeOrg/Lychee/releases/tag/v7.7.0), which introduces App\Rules\OmnipayProviderTypeRule and enforces isAllowed() on the provider parameter in both CreateSessionRequest and FinalizeRequest; the corresponding commit is 8b73656f920c682862b9199acc87fbaf72ee5a90 via PR #4507, and the advisory is https://github.com/LycheeOrg/Lychee/security/advisories/GHSA-5wh2-hg7q-6hv3. If upgrading immediately is not possible, the most effective compensating control is to set webshop_auto_fulfill_enabled to false so confirmed orders are not released automatically by OrderCompletedListener::fullfillOrder(); the trade-off is that all orders - including legitimate paid ones - require manual review and fulfillment, increasing administrative workload and delaying delivery, and it does not prevent creation of a bogus Dummy session. A second control is to set webshop_allow_guest_checkout to false, forcing buyers to hold a registered account; this removes the unauthenticated path but adds signup friction and does not stop an authenticated buyer from supplying the Dummy provider. Because the Dummy provider is a code-level enum case rather than a configuration toggle, hiding it in production is not a reliable pre-patch mitigation; instead, restrict network access to the webshop checkout session and finalize endpoints (for example, put the Supporter/Pro instance behind VPN, HTTP basic auth, or a reverse proxy/WAF rule that rejects requests whose provider parameter is not an allow-listed value such as stripe/paypal), accepting the trade-off that this can break legitimate buyer flows and must mirror the gateway set actually in use. Finally, monitor and audit OrderCompletedListener fulfillment logs for orders associated with the dummy provider so any abuse is detected, noting that until version 7.7.0 is applied it remains unverified whether the closed-source license middleware performs additional provider validation on fully licensed deployments.
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 a self-hosted PHP/Laravel photo-management application whose commercial Supporter and Pro tiers ship a webshop built on the Omnipay payment-gateway abstraction. Provider selection is modeled as the backed enum App\Enum\OmnipayProviderType, which exposes an isAllowed() method; production checkout hides the Dummy (test) provider through OmnipayFactory::get_supported_providers(). The weakness (CWE-20, improper input validation) is that CreateSessionRequest and FinalizeRequest validated the submitted provider with Laravel's Illuminate\Validation\Rules\Enum rule, which only asserts that the value is a valid enum case - it never calls isAllowed(). Any caller could therefore pass the Dummy provider value, drive the test-gateway flow to a successful-looking completion, and trigger order fulfillment via OrderCompletedListener::fullfillOrder(). The upstream fix in PR #4507 replaces the Enum rule with a new App\Rules\OmnipayProviderTypeRule that resolves OmnipayProviderType::tryFrom($value) and fails unless $provider?->isAllowed() === true; the new rule is applied as nullable (sometimes) in CreateSessionRequest (new OmnipayProviderTypeRule(true)) and as required in FinalizeRequest (new OmnipayProviderTypeRule(false)), with unit tests covering valid, unknown, and empty-string providers. The patch note also confirms the payment finalize status check was not the root cause, and that the closed-source license middleware was bypassed during testing, so it remains unverified whether the real license layer performs additional provider validation on genuinely licensed deployments.
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:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N
Guest checkout path is network and unauthenticated (AV:N/PR:N/UI:N); payment-bypass yields high integrity impact (I:H) with limited confidentiality (C:L) and no availability impact; AC:L since the request is straightforward once the webshop config is present.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Lychee is a free, open-source photo-management tool. Prior to 7.7.0, Lychee hides the Omnipay Dummy test provider from the checkout options in production through OmnipayFactory::get_supported_providers(), but CreateSessionRequest validates only that the submitted provider is an OmnipayProviderType and does not enforce OmnipayProviderType::isAllowed(). A buyer, including a guest when webshop_allow_guest_checkout is enabled, can submit Dummy directly and complete the test gateway flow without a real payment. When webshop_auto_fulfill_enabled is enabled, OrderCompletedListener::fullfillOrder() can then release the purchasable item. The issue requires access to the Supporter or Pro webshop and an enabled purchasable item. Testing bypassed the closed-source license middleware, so whether the real license layer performs additional payment-provider validation remains unverified. The payment finalize status check itself is not the root cause. This issue is fixed in version 7.7.0.
Technical POC Analysis
CWE-20 (Improper Input Validation), with CWE-184 (Incomplete List of Disallowed Inputs) as the secondary class: the "Dummy must not be usable in production" policy exists as a list that is enforced i…
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Lychee's paid Supporter and Pro editions contain a checkout validation flaw that can let an unauthenticated buyer obtain paid, fulfillable items without making any real payment on any instance running the webshop module with guest checkout, auto-fulfillment, and at least one enabled purchasable item. Because fulfillment is automatic, affected organizations lose both the revenue and the goods or entitlements in a single transaction, with limited audit signal if no monitoring is in place. Leadership should treat this as a revenue-integrity and fraud exposure rather than a purely technical defect, and confirm whether any production storefronts match the required configuration.
Apply vendor patch.
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
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
Stored cross-site scripting in Lychee photo-management software (all versions prior to 7.6.0) allows an authenticated us
EUVD-2026-102197
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB