Skip to main content

PhpSpreadsheet EUVDEUVD-2026-108264

| CVE-2026-108360 MEDIUM
Incorrect Authorization (CWE-863)
2026-10-22 GitHub_M
6.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft evil.xlsx with external drawing to whitelisted host
  2. Delivery
    Victim loads file with external images enabled
  3. Exploit
    Whitelisted host returns 302 to internal/metadata URL
  4. Execution
    PHP follows redirect without re-validation
  5. Impact
    Server 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).

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

PhpSpreadsheet 3.3.0, < 3.10.8
PhpSpreadsheet 2.0.0, < 2.1.19
PhpSpreadsheet 2.2.0, < 2.4.8
PhpSpreadsheet < 1.30.7
PhpSpreadsheet 4.0.0, < 5.10.0

Affected Packages

euvd phpspreadsheet fix: 1.30.7, 2.1.19, 2.4.8, 3.10.8, 5.10.0

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

Vendor (GitHub_M) PRIMARY 6.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Oct 22, 2026 - 18:18 EUVD
CVE Published
Oct 22, 2026 - 17:26 cve.org
MEDIUM 6.4

DescriptionCVE.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

Prevalence
High
very widely used PHP spreadsheet library across many web applications
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

CVE-2024-45291 HIGH POC
8.8 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 8.8), this vul

CVE-2019-12331 HIGH POC
8.8 Nov 07

PHPOffice PhpSpreadsheet before 1.8.0 has an XXE issue. Rated high severity (CVSS 8.8), this vulnerability is remotely e

CVE-2018-19277 HIGH POC
8.8 Nov 14

securityScan() in PHPOffice PhpSpreadsheet through 1.5.0 allows a bypass of protection mechanisms for XXE via UTF-7 enco

CVE-2024-48917 HIGH POC
7.5 Nov 18

PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab

CVE-2024-47873 HIGH POC
7.5 Nov 18

PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab

CVE-2024-45290 HIGH POC
7.5 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul

CVE-2024-45293 HIGH POC
7.5 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul

CVE-2024-45048 MEDIUM POC
6.5 Aug 28

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.5), this v

CVE-2020-7776 MEDIUM POC
6.4 Dec 09

This affects the package phpoffice/phpspreadsheet from 0.0.0. Rated medium severity (CVSS 6.4), this vulnerability is re

CVE-2024-45060 MEDIUM POC
6.1 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.1), this v

CVE-2024-45292 MEDIUM POC
5.4 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v

CVE-2024-45046 MEDIUM POC
5.4 Aug 28

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy