Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Lychee instance
-
DeliverySubmit Photo::fromUrl with attacker-DNS hostname
-
ExploitValidation resolves to public IP, passes
-
ExecutionRebind DNS to internal address before fetch
-
Persistfopen re-resolves to private service
-
ImpactSSRF reaches internal service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Requires an authenticated Lychee account (PR:L) with access to the POST /api/v2/Photo::fromUrl URL-import feature, and the attacker must control authoritative DNS for the submitted hostname to execute a rebinding attack. Exploitation is further limited by a timing race: the attacker must make the hostname resolve to a permitted public address during PhotoUrlRule validation and then to a private/forbidden address during the separate fopen fetch in DownloadedFile.php (hence AC:H and AT:P). Realistic impact is additionally bounded by the Lychee server's network position (what internal services are actually reachable) and by TLS behavior on the fetched connection, as noted in the advisory. |
| Impact | This is a low-priority vulnerability despite being a real, verified flaw. The vendor-assigned CVSS 4.0 score is 2.3 (Low), and the vector CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N shows multiple mitigating factors that compound: exploitation requires an authenticated account (PR:L), high attack complexity (AC:H), and a present attack requirement (AT:P) - the latter two reflecting the need to win a DNS-rebinding race between the TOCTOU validation check and the later fetch. Impact is constrained: the 4.0 vector records VC:N/VI:N/VA:N on the vulnerable system itself and only SI:L/SA:L on subsequent (internal) systems reachable via SSRF, meaning no direct confidentiality loss is claimed and only limited integrity/availability effect on back-end services. No EPSS score, CISA KEV listing, or public POC was provided in the input, so exploitation probability signals are all absent rather than conflicting. The one caveat worth flagging: the description notes impact is 'subject to deployment and TLS behavior,' so real-world reachability of internal services is environment-dependent and may be higher or lower than the base score implies - verify against the specific Lychee deployment's network position. |
| Exploit ScenarioDerived | An attacker with a valid authenticated Lychee account submits a POST /api/v2/Photo::fromUrl request pointing at a hostname they control via DNS. The validation step (PhotoUrlRule) resolves the hostname to a public IP and passes, but on the subsequent fopen/download the same hostname re-resolves to an internal/forbidden address, letting the import fetch reach services on the Lychee server's internal network. No public exploit code was identified at time of analysis, and success depends on winning the DNS re-resolution race (AC:H, AT:P). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Server-side request forgery in the Lychee photo-management tool before 7.6.0 lets an authenticated user who can reach the POST /api/v2/Photo::fromUrl URL-import endpoint steer server-side fetches toward private or otherwise forbidden destinations by manipulating DNS answers between the validation step and the download step. The flaw is a classic time-of-check to time-of-use (CWE-367) DNS-rebinding race: app/Rules/PhotoUrlRule.php resolves and approves the submitted hostname, but app/Actions/Import/FromUrl.php later passes the original hostname to app/Image/Files/DownloadedFile.php, which opens a completely separate connection and resolves that hostname again, so an attacker controlling authoritative DNS for the name can return a public address to the check and a private address to the fetch. Exploitation requires a valid Lychee account (PR:L) and precise timing against the second resolution (AC:H), and real-world impact is bounded by which internal services the Lychee host can actually reach and by TLS behavior on the fetched connection, as the vendor advisory notes; no public exploit code has been identified at time of analysis and there is no confirmed active exploitation (CISA KEV).
RemediationAI
Vendor-released patch: Lychee 7.6.0 (https://github.com/LycheeOrg/Lychee/releases/tag/v7.6.0), delivered via PR https://github.com/LycheeOrg/Lychee/pull/4344 and commit a5f23e314f1a933d31aa650616bf9cd84bd0407e - upgrade to 7.6.0 or later, which threads a validated UrlValidatedDTO (URL plus resolved address) from validation through the download step instead of re-resolving the hostname. If immediate upgrade is not possible, restrict and monitor the import-from-URL feature: disable or gate POST /api/v2/Photo::fromUrl at the reverse proxy or via Lychee's feature/permission settings, accepting the loss of a legitimate import workflow for users; and keep the legacy fopen download path disabled (the patched code exposes it behind the 'use_fopen_for_url_imports' feature flag) so downloads go through the cURL path that carries the validated resolution. As a network-layer compensating control, apply egress filtering on the Lychee host that blocks outbound traffic to RFC1918 ranges, loopback, link-local and cloud metadata endpoints such as 169.254.169.254 while allowing only required external destinations - this trades off against any legitimate import from public hosts that traverse those ranges. Running Lychee in a segmented container/network namespace with no route to internal management services reduces the payoff of a successful rebind, and disabling redirects or unvalidated TLS acceptance on outbound fetches (while keeping certificate verification on) limits what a rebound request can retrieve. Because exploitation needs an authenticated account, reviewing accounts with import privileges and auditing outbound connection logs to unexpected internal addresses provides useful detection in the meantime.
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 PHP application (Laravel-style request/action structure) for photo management, and the affected code path is its server-side image import-from-URL feature. The root cause is CWE-367, Time-of-check Time-of-use Race Condition, applied to DNS: PhotoUrlRule.php performs the SSRF guard by validating the hostname and its resolved addresses, but the URL string - not the validated resolution - is carried forward through App\Actions\Import\FromUrl and into App\Image\Files\DownloadedFile, where a fresh fopen resolves the hostname a second time. Because the two resolutions are independent, an attacker with control of the authoritative DNS zone can flip the answer between them, defeating the intent of the allow/deny list. The upstream fix restructures the data flow rather than patching the race inline: a new App\DTO\UrlValidatedDTO object carries the URL together with its resolved_ip and any error, a new App\Services\UrlValidation service performs validation during FromUrlRequest::prepareForValidation, PhotoUrlRule is simplified to operate on the already-validated DTO, and DownloadedFile becomes final with the download performed either by cURL or by the legacy fopen path gated behind a Features flag named 'use_fopen_for_url_imports'. The patch also removes a fragile str_replace(' ', '%20') URL-mangling hack and bumps the pinned FrankenPHP base image digest in the Dockerfile, indicating the change is part of the 7.6.0 release rather than a standalone hotfix. Affected builds are represented by the CPE cpe:2.3:a:lycheeorg:lychee:*:*:*:*:*:*:*:*, i.e. the full version-unqualified Lychee product line prior to the fixed release. Authentication requirements are confirmed from the assessed vector as authenticated (PR:L).
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:N/VA:N/SC:N/SI:L/SA:L
DNS-rebinding race needs AC:H and an authenticated account (PR:L); SSRF crosses into internal services so S:C, with only limited integrity impact (I:L) and no confirmed confidentiality or availability loss.
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, the POST /api/v2/Photo::fromUrl flow validates a hostname and its resolved addresses in app/Rules/PhotoUrlRule.php but later passes the original hostname through app/Actions/Import/FromUrl.php to app/Image/Files/DownloadedFile.php for a separate fopen connection. An authenticated attacker who controls DNS responses can cause validation to observe a public address and the subsequent fetch to resolve the same hostname to a private or otherwise forbidden address. This DNS rebinding time-of-check to time-of-use mismatch bypasses the intended server-side request forgery protections and can reach services available from the Lychee server, subject to deployment and TLS behavior. 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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
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-102188
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB