Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft evil.xlsx with external drawing to whitelisted host
-
DeliveryVictim loads file with external images enabled
-
ExploitWhitelisted host returns 302 to internal/metadata URL
-
ExecutionPHP follows redirect without re-validation
-
ImpactServer issues blind GET to internal target
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a non-default configuration: the consuming application must call setAllowExternalImages(true) (default is false in BaseReader) AND typically a setIsWhitelisted callback must be in place, which the attacker's redirecting host must pass. The attacker must control, or be able to induce, a whitelisted image host to return an HTTP 302 Location redirect to the chosen internal target (e.g., 169.254.169.254 cloud metadata), and the victim application must load an attacker-supplied xlsx/ODS file or HTML (via Reader\Html) containing an external-image relationship. Limiting factors: the external-image feature is off by default; the whitelist must permit the attacker's redirecting host; and the primitive is blind - only redirect-following and reachability/GET-triggering is possible since the response body is image-validated and the temp file is unlinked, so no data is exfiltrated. |
| Impact | This is a genuine but moderate-priority issue, not a drop-everything emergency. The signals are internally consistent: CVSS 3.1 base 6.4 (AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N) and the vuln.today decision label of 'this_month' both place it in the patch-on-normal-cadence tier. There is no CISA KEV listing and no EPSS score supplied, so there is no evidence of active or widespread exploitation - exploitation status is 'no public exploit identified' in the strict sense, though the GHSA advisory does contain a detailed proof-of-concept writeup (a public PoC reference exists; it is not verified as working exploit code). The real-world severity is tempered by two facts the raw CVSS does not capture: the vulnerable code path is gated behind a non-default opt-in (setAllowExternalImages(true), default false) plus an operator-supplied whitelist, and the primitive is a BLIND GET - the HTTP response body is never returned to the attacker because the reader validates content as an image and unlinks the temp file. Note a data conflict worth flagging: the NVD CWE is CWE-863 (improper authorization) and the input tags say 'Authentication Bypass', but the vendor advisory classifies this as SSRF (CWE-918) via a redirect-based whitelist bypass - the SSRF framing is the accurate one. Net: a legitimate server-side request forgery weakness in a popular library, meriting prompt patching where external images are enabled, but lower real-world urgency than the headline network-vector score suggests because of the non-default configuration requirement and blind nature. |
| Exploit ScenarioDerived | An application that loads user-supplied spreadsheets with external image loading enabled (setAllowExternalImages(true)) and a host whitelist is fed a crafted xlsx whose drawing relationship points to an attacker-controlled but whitelisted host. That host answers the server's image fetch with an HTTP 302 redirect to http://169.254.169.254/latest/meta-data/ (or another internal endpoint); because the stream context omits follow_location=0, PHP follows the redirect with no re-validation, forcing a blind server-side GET to the internal target. A detailed PoC is published in the GHSA advisory (public PoC reference; not verified as working exploit code). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Blind server-side request forgery in PhpSpreadsheet allows an attacker-supplied spreadsheet (or HTML document) to steer the reading server's outbound image fetch to an internal address, because the operator's isWhitelisted callback is checked only against the initial external-image URL and never against HTTP redirect hops. Only deployments that have explicitly called setAllowExternalImages(true) - the default in BaseReader is false - and that also configure a whitelist which permits the attacker's redirecting host are exposed; those prerequisites make this a non-default configuration issue rather than a universal one. Impact is bounded: the fetched body is validated with isImage() and the temporary file is deleted, so the response is not returned to the attacker and the primitive is limited to triggering blind GET requests, coarse internal reachability probing and reaching endpoints such as cloud metadata services. A public PoC reference describing the redirect chain exists; it is not verified as working exploit code, and there is no confirmed active exploitation (CISA KEV).
RemediationAI
Vendor-released patches exist on every affected branch: upgrade to 1.30.7, 2.1.19, 2.4.8, 3.10.8 or 5.10.0 according to the release line in use, as documented in GHSA-2phh-27fw-q4gc and the corresponding GitHub release tags; the fixes add follow_location => 0 (and/or max_redirects => 0) to the HTTP stream context in Drawing::setPath(), mirroring the earlier Service.php fix, or follow redirects manually and re-run the isWhitelisted callback on each hop. Because the vulnerable code path only executes when external images are enabled, the effective compensating control for applications that cannot upgrade immediately is to leave setAllowExternalImages at its default false and not enable it for untrusted input; doing so disables external image loading from spreadsheets and HTML documents entirely, which is a functional loss for users who rely on linked images but removes the SSRF primitive. Operators who must keep the feature enabled should treat the whitelist as insufficient on its own, since it cannot constrain redirect destinations under the vulnerable versions, and should avoid processing untrusted uploaded spreadsheets while external images are on.
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 flaw sits in Worksheet\Drawing::setPath() in src/PhpSpreadsheet/Worksheet/Drawing.php, classified as CWE-863 (incorrect authorization) with an SSRF effect (CWE-918). The method applies three guards to the external image URL: a scheme allowlist permitting http/https/file/ftp/s3, the opt-in gate requiring setAllowExternalImages(true) (default false, BaseReader.php), and the operator-supplied isWhitelisted callback - but all three run once, against the initial URL only. The stream context assembled for the subsequent file_get_contents() call sets user_agent and header (plus ssl.crypto_method for https) and omits follow_location, so PHP's HTTP wrapper applies its defaults (follow_location=1, max_redirects=20) and transparently follows a 302 Location header to the internal target without re-invoking isWhitelisted. This is the same redirect-following pattern that was already hardened in Calculation/Web/Service.php for CVE-2026-59931 (commit 7ef7b25e adding follow_location => 0); that fix was never mirrored into Drawing.php, and a grep of the released tree confirms follow_location appears only in Service.php. After the fetch, the body is written to a temporary file, checked with isImage() (image/* mime, or application/octet-stream with a bin/emf extension) and only image dimensions are retained before the file is unlinked, which is why the issue yields a blind GET rather than response disclosure.
Know when Phpspreadsheet 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
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Non-default external-image config plus a whitelisted redirecting host raise AC:H; attacker just supplies a file (PR:N); SSRF reaches other systems (S:C) with blind limited impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Prior to 1.30.7, 2.1.19, 2.4.8, 3.10.8, and 5.10.0, Worksheet\Drawing::setPath validates only the initial external-image URL with setIsWhitelisted when setAllowExternalImages is enabled. The HTTP stream context permits PHP to follow a redirect without applying the callback to the redirected URL, so a permitted image host can redirect the server to an internal address and cause a blind GET request. The response body is not returned to the attacker because the reader validates the downloaded content as an image and removes the temporary file, but internal GET-driven endpoints, network reachability, and cloud metadata endpoints may be reached. This issue is fixed in versions 1.30.7, 2.1.19, 2.4.8, 3.10.8, and 5.10.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.
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Phpspreadsheet
View allPHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 8.8), this vul
PHPOffice PhpSpreadsheet before 1.8.0 has an XXE issue. Rated high severity (CVSS 8.8), this vulnerability is remotely e
securityScan() in PHPOffice PhpSpreadsheet through 1.5.0 allows a bypass of protection mechanisms for XXE via UTF-7 enco
PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab
PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.5), this v
This affects the package phpoffice/phpspreadsheet from 0.0.0. Rated medium severity (CVSS 6.4), this vulnerability is re
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.1), this v
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v
EUVD-2026-108264
NVD
CVE.org
GitHub
Exploit-DB