<?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://vulnerability.circl.lu</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>Thu, 01 Oct 2026 12:39:33 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-63002</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-63002</link>
      <description>&lt;p&gt;REDAXO is a PHP-based content management system. Prior to 5.21.2, redaxo/src/addons/mediapool/pages/sync.php inserts filenames held in $diffFiles from the media filesystem into the Mediapool Sync page without rex_escape(). An attacker who can place an unregistered file with HTML metacharacters in the media directory can execute script in the browser of a backend user with media[sync] permission when that user opens the Sync page, enabling session theft or unauthorized backend actions. This issue is fixed in version 5.21.2.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;REDAXO is a PHP-based content management system. Prior to 5.21.2, redaxo/src/addons/mediapool/pages/sync.php inserts filenames held in $diffFiles from the media filesystem into the Mediapool Sync page without rex_escape(). An attacker who can place an unregistered file with HTML metacharacters in the media directory can execute script in the browser of a backend user with media[sync] permission when that user opens the Sync page, enabling session theft or unauthorized backend actions. This issue is fixed in version 5.21.2.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-63002</guid>
    </item>
    <item>
      <title>GHSA-w998-qmw9-mf4m — REDAXO: Stored XSS in Mediapool Sync Page via Unescaped Filesystem Filenames</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-w998-qmw9-mf4m</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: redaxo/source&lt;/p&gt;
&lt;p&gt;### Summary
The mediapool sync page (`sync.php`) renders filenames from the `/media` filesystem directory directly into HTML without applying `rex_escape()` (i.e., `htmlspecialchars`). Any file placed in the media directory whose filename contains HTML metacharacters will execute JavaScript in the browser of any backend user who views the sync page.&lt;/p&gt;
&lt;p&gt;### Details
In `redaxo/src/addons/mediapool/pages/sync.php`, the variable `$diffFiles` is populated from actual filesystem filenames (files in `/media/` not yet registered in the database). These filenames are then rendered without escaping:&lt;/p&gt;
&lt;p&gt;**File:** `redaxo/src/addons/mediapool/pages/sync.php:119-120`
```php
foreach ($diffFiles as $file) {
    if (is_writable(rex_path::media($file))) {
        $e = [];
        $e[&amp;#39;label&amp;#39;] = &amp;#39;&amp;lt;label&amp;gt;&amp;#39; . $file . &amp;#39;&amp;lt;/label&amp;gt;&amp;#39;;          // NO rex_escape!
        $e[&amp;#39;field&amp;#39;] = &amp;#39;&amp;lt;input type=&amp;#34;checkbox&amp;#34; name=&amp;#34;sync_files[]&amp;#34; value=&amp;#34;&amp;#39; . $file . &amp;#39;&amp;#34; /&amp;gt;&amp;#39;; // NO rex_escape!
        $writable[] = $e;
    } else {
        $notWritable[] = $file;
    }
}
```&lt;/p&gt;
&lt;p&gt;**File:** `redaxo/src/addons/mediapool/pages/sync.php:170`
```php
$fragment-&amp;gt;setVar(&amp;#39;body&amp;#39;, &amp;#39;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#39; . implode(&amp;#39;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#39;, $notWritable) . &amp;#39;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;#39;, false);
// $notWritable contains unescaped filenames
```&lt;/p&gt;
&lt;p&gt;By contrast, all other filename displays in the codebase use `rex_escape($fname)` (e.g., `media.detail.php:236`, `media.list.php`). The sync page is accessible to any backend user with the `media[sync]` permission (not exclusively admins).&lt;/p&gt;
&lt;p&gt;### Po…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: redaxo/source&lt;/p&gt;
&lt;p&gt;### Summary
The mediapool sync page (`sync.php`) renders filenames from the `/media` filesystem directory directly into HTML without applying `rex_escape()` (i.e., `htmlspecialchars`). Any file placed in the media directory whose filename contains HTML metacharacters will execute JavaScript in the browser of any backend user who views the sync page.&lt;/p&gt;
&lt;p&gt;### Details
In `redaxo/src/addons/mediapool/pages/sync.php`, the variable `$diffFiles` is populated from actual filesystem filenames (files in `/media/` not yet registered in the database). These filenames are then rendered without escaping:&lt;/p&gt;
&lt;p&gt;**File:** `redaxo/src/addons/mediapool/pages/sync.php:119-120`
```php
foreach ($diffFiles as $file) {
    if (is_writable(rex_path::media($file))) {
        $e = [];
        $e[&amp;#39;label&amp;#39;] = &amp;#39;&amp;lt;label&amp;gt;&amp;#39; . $file . &amp;#39;&amp;lt;/label&amp;gt;&amp;#39;;          // NO rex_escape!
        $e[&amp;#39;field&amp;#39;] = &amp;#39;&amp;lt;input type=&amp;#34;checkbox&amp;#34; name=&amp;#34;sync_files[]&amp;#34; value=&amp;#34;&amp;#39; . $file . &amp;#39;&amp;#34; /&amp;gt;&amp;#39;; // NO rex_escape!
        $writable[] = $e;
    } else {
        $notWritable[] = $file;
    }
}
```&lt;/p&gt;
&lt;p&gt;**File:** `redaxo/src/addons/mediapool/pages/sync.php:170`
```php
$fragment-&amp;gt;setVar(&amp;#39;body&amp;#39;, &amp;#39;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#39; . implode(&amp;#39;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#39;, $notWritable) . &amp;#39;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;#39;, false);
// $notWritable contains unescaped filenames
```&lt;/p&gt;
&lt;p&gt;By contrast, all other filename displays in the codebase use `rex_escape($fname)` (e.g., `media.detail.php:236`, `media.list.php`). The sync page is accessible to any backend user with the `media[sync]` permission (not exclusively admins).&lt;/p&gt;
&lt;p&gt;### Po…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-w998-qmw9-mf4m</guid>
    </item>
  </channel>
</rss>
