{"id":"CVE-2026-108357","summary":"PhpSpreadsheet: XmlScanner Bypass via Double-Encoded unentity() TOCTOU Allows XXE and Denial of Service","details":"PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. From 3.3.0 until 3.10.8 and 5.10.0, Reader\\Xml passes stored SpreadsheetML XML through XmlScanner::scan in Xml::canRead and Xml::trySimpleXMLLoadStringPrivate, while Xml::unentity decodes numeric entities only after each DOCTYPE pattern check. A double-encoded less-than character is reduced by the first callback to another encoded character and by the second callback to a literal less-than sign, so SimpleXML receives an unchecked DOCTYPE and entity declaration. Processing attacker-controlled SpreadsheetML XML can cause entity-expansion denial of service and can permit local file access or SSRF on PHP before 8.0 or when LIBXML_NOENT is enabled. This issue is fixed in versions 3.10.8 and 5.10.0.","aliases":["GHSA-rxj4-h86g-25gc"],"modified":"2026-10-23T02:45:26.442323999Z","published":"2026-10-22T17:38:16.098Z","database_specific":{"cwe_ids":["CWE-611","CWE-776"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/108xxx/CVE-2026-108357.json","cna_assigner":"GitHub_M"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/108xxx/CVE-2026-108357.json"},{"type":"FIX","url":"https://github.com/PHPOffice/PhpSpreadsheet/commit/89f455c133e1a7e2d4abfadc43ce29eb7450d781"},{"type":"FIX","url":"https://github.com/PHPOffice/PhpSpreadsheet/commit/980b5c294493856f1a25754f1e8a1d2185b93738"},{"type":"WEB","url":"https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/3.10.8"},{"type":"WEB","url":"https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/5.10.0"},{"type":"ADVISORY","url":"https://github.com/PHPOffice/PhpSpreadsheet/security/advisories/GHSA-rxj4-h86g-25gc"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-108357"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/phpoffice/phpspreadsheet","events":[{"introduced":"87ddd21eb0b6b7ad20a11d314348ef307475f547"},{"fixed":"fee9c1ca8d9f1f676f007ac1ab134ce43624bd52"},{"introduced":"2d4b9f3582102aafb6b1378fff8a20eeeacfb31c"},{"fixed":"eb18727acf6b1f4cc67145a52ab04f9fd4c28d53"},{"fixed":"89f455c133e1a7e2d4abfadc43ce29eb7450d781"},{"fixed":"980b5c294493856f1a25754f1e8a1d2185b93738"}],"database_specific":{"extracted_events":[{"strategy":"StringRangeExpression","range":[{"introduced":"3.3.0"},{"fixed":"3.10.8"}],"source":"AFFECTED_FIELD"},{"range":[{"introduced":"4.0.0"},{"fixed":"5.10.0"}],"source":"AFFECTED_FIELD","strategy":"StringRangeExpression"},{"source":"REFERENCES_COMMIT","range":[{"fixed":"89f455c133e1a7e2d4abfadc43ce29eb7450d781"}]},{"range":[{"fixed":"980b5c294493856f1a25754f1e8a1d2185b93738"}],"source":"REFERENCES_COMMIT"},{"original_tag":"3.10.8","range":[{"fixed":"fee9c1ca8d9f1f676f007ac1ab134ce43624bd52"}],"source":"REFERENCES_TAG"},{"original_tag":"5.10.0","range":[{"fixed":"eb18727acf6b1f4cc67145a52ab04f9fd4c28d53"}],"source":"REFERENCES_TAG"}]}}],"versions":["5.9.0","3.10.7","3.10.6","5.8.0","3.10.5","5.7.0","5.6.0","3.10.4","5.5.0","3.10.3","5.4.0","5.3.0","3.10.2","5.1.0","5.2.0","3.10.1","3.10.0","5.0.0","3.9.3","4.5.0","3.9.2","4.4.0","4.3.0","4.3.1","4.2.0","4.1.0","3.3.0","3.9.0","3.9.1","4.0.0","3.8.0","3.7.0","3.6.0","3.5.0","3.4.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-108357.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:L/SI:N/SA:N"}]}