<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 30 Sep 2026 14:45:45 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-102601</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-102601</link>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-102601</guid>
    </item>
    <item>
      <title>GHSA-cxf4-7mrp-vvpr — Flysystem: WhitespacePathNormalizer's control-character (CorruptedPathDetected) check is bypassed by malformed UTF-8 in…</title>
      <link>https://db.gcve.eu/vuln/ghsa-cxf4-7mrp-vvpr</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: league/flysystem&lt;/p&gt;
&lt;p&gt;## Related public issue (context, not a duplicate)&lt;/p&gt;
&lt;p&gt;Closed issue #1429 (&amp;#34;Handle non-UTF-8 paths&amp;#34;, 2024-03-24) raised exactly this general concern and
even suggested detection via `preg_match(&amp;#39;//u&amp;#39;, $path) !== 1` -- note the reporter&amp;#39;s suggested check
explicitly compares `!== 1`, which *would* correctly treat PCRE&amp;#39;s `false` return as &amp;#34;reject.&amp;#34; The
maintainer&amp;#39;s reply pointed to the `PathNormalizer` interface as the place to implement this. The
control-character check that ended up shipping in `WhitespacePathNormalizer`
(`if (preg_match(&amp;#39;#\p{C}+#u&amp;#39;, $unixPath))`) addresses the general concern but does **not** use the
`!== 1`-style comparison the original issue suggested -- it uses a bare truthy check, which is exactly
the gap this report demonstrates. So this is not a duplicate of #1429; it&amp;#39;s a concrete bypass
surviving in the fix that issue&amp;#39;s concern led to.&lt;/p&gt;
&lt;p&gt;## Vulnerability Details&lt;/p&gt;
&lt;p&gt;**File**: `src/WhitespacePathNormalizer.php`, lines 22-28 (`normalizePath()`) -- the **default**
`PathNormalizer` used by `Filesystem` for every adapter (Local, FTP, SFTP, S3, AsyncAwsS3, Azure, GCS,
ZipArchive, GridFS, InMemory) unless the application supplies a custom one.&lt;/p&gt;
&lt;p&gt;### Root Cause&lt;/p&gt;
&lt;p&gt;```php
public function normalizePath(string $path): string
{
    $unixPath = str_replace(&amp;#39;\\&amp;#39;, &amp;#39;/&amp;#39;, $path);&lt;/p&gt;
&lt;p&gt;if (preg_match(&amp;#39;#\p{C}+#u&amp;#39;, $unixPath)) {
        throw CorruptedPathDetected::forPath($path);
    }
    ...
```&lt;/p&gt;
&lt;p&gt;`preg_match()` returns `false` (a PHP engine error) rather than `0` when the subjec…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: league/flysystem&lt;/p&gt;
&lt;p&gt;## Related public issue (context, not a duplicate)&lt;/p&gt;
&lt;p&gt;Closed issue #1429 (&amp;#34;Handle non-UTF-8 paths&amp;#34;, 2024-03-24) raised exactly this general concern and
even suggested detection via `preg_match(&amp;#39;//u&amp;#39;, $path) !== 1` -- note the reporter&amp;#39;s suggested check
explicitly compares `!== 1`, which *would* correctly treat PCRE&amp;#39;s `false` return as &amp;#34;reject.&amp;#34; The
maintainer&amp;#39;s reply pointed to the `PathNormalizer` interface as the place to implement this. The
control-character check that ended up shipping in `WhitespacePathNormalizer`
(`if (preg_match(&amp;#39;#\p{C}+#u&amp;#39;, $unixPath))`) addresses the general concern but does **not** use the
`!== 1`-style comparison the original issue suggested -- it uses a bare truthy check, which is exactly
the gap this report demonstrates. So this is not a duplicate of #1429; it&amp;#39;s a concrete bypass
surviving in the fix that issue&amp;#39;s concern led to.&lt;/p&gt;
&lt;p&gt;## Vulnerability Details&lt;/p&gt;
&lt;p&gt;**File**: `src/WhitespacePathNormalizer.php`, lines 22-28 (`normalizePath()`) -- the **default**
`PathNormalizer` used by `Filesystem` for every adapter (Local, FTP, SFTP, S3, AsyncAwsS3, Azure, GCS,
ZipArchive, GridFS, InMemory) unless the application supplies a custom one.&lt;/p&gt;
&lt;p&gt;### Root Cause&lt;/p&gt;
&lt;p&gt;```php
public function normalizePath(string $path): string
{
    $unixPath = str_replace(&amp;#39;\\&amp;#39;, &amp;#39;/&amp;#39;, $path);&lt;/p&gt;
&lt;p&gt;if (preg_match(&amp;#39;#\p{C}+#u&amp;#39;, $unixPath)) {
        throw CorruptedPathDetected::forPath($path);
    }
    ...
```&lt;/p&gt;
&lt;p&gt;`preg_match()` returns `false` (a PHP engine error) rather than `0` when the subjec…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-cxf4-7mrp-vvpr</guid>
    </item>
  </channel>
</rss>
