league/flysystem security advisory
CVE-2026-102601: Flysystem: WhitespacePathNormalizer's control-character (CorruptedPathDetected) check is bypassed by malformed UTF-8 in the path…
CVE-2026-102601 is a low-severity security vulnerability in the PHP package league/flysystem (CVSS 3.5), published 29 September 2026. The advisory does not name a fixed version. Exploiting it needs a low-privilege user account.
low 3.5 published 2026-09-29 · updated 2026-09-30
- Affected versions
- <= 3.35.2
- Fixed in
- not stated
- Newest release
- 3.36.0
- Severity
- Low · CVSS 3.5
- Type
- Security issue
CWE-150 - Exploited in the wild
- Not on the CISA KEV list
checked 2026-11-04
Is your league/flysystem version affected?
Who can exploit CVE-2026-102601
- Access: A normal, low-privilege user account in the app.
- Interaction: A user also has to do something, such as open a link or a page the attacker prepared.
CVSS vector (scored by GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N
How to fix CVE-2026-102601 in league/flysystem
- Find the installed version:
composer show league/flysystem. If you never required it yourself,composer why league/flysystemshows which package pulls it in. - Update it:
composer update league/flysystem --with-all-dependencies. - If Composer will not go that high, your composer.json constraint is holding it back. Widen it (for example
"league/flysystem": "^3.36.0"if you can take that version), or upgrade the package that requires it. - Run
composer audit. It reads the same advisory data and should no longer list CVE-2026-102601. - Commit composer.lock and deploy it. On the server, run
composer install --no-devfrom the lock file, notcomposer update.
If you cannot upgrade yet
- If your app does not use the affected feature, note that in your audit, but still plan the upgrade.
The CVE-2026-102601 advisory
Flysystem is an open source file storage library for PHP. Prior to 3.35.3, the default WhitespacePathNormalizer in src/WhitespacePathNormalizer.php used by Filesystem across adapters calls preg_match with the u modifier and treats both false and 0 as falsy. A path containing malformed UTF-8 causes PCRE to return false, so paths that also contain control characters bypass CorruptedPathDetected::forPath() in normalizePath(). Filesystem::write() can store such names and Filesystem::listContents() can return the raw ANSI escape sequences, allowing hidden or spoofed terminal file listings when an administrator displays them. This issue is fixed in version 3.35.3.
References
- GitHub advisory GHSA-cxf4-7mrp-vvpr github.com
- Fix commit ef4a9a5 github.com
- Release 3.35.3 github.com
Other league/flysystem advisories
- critical CVE-2021-32708: TOCTOU Race Condition enabling remote code execution 2021-06-23
Related
Need help patching or upgrading? Laskyr does PHP and Laravel security fixes and upgrades. Tell us what you run and we reply with a plan and a price.
Ask about a fixWhere this data comes from
- Affected and fixed versions: the Packagist security advisories API (GitHub Advisory Database and FriendsOfPHP), the same data
composer audituses. Synced 2026-11-03. - Description, score, weakness and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Exploited-in-the-wild status: the CISA Known Exploited Vulnerabilities catalog, checked 2026-11-04.
- Compiled by Daniel Lasek at Laskyr from the sources above. The summary, “who can exploit it”, “how to fix it” and hardening sections are our plain-English reading of the record and are generated from it. The quoted description is the record's own text. Spot an error? Tell us.