<?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://cve.radiocsirt.org</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, 14 Oct 2026 15:25:31 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-338836</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-338836</link>
      <description>EUVD-2026-338836</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-338836</guid>
    </item>
    <item>
      <title>fkie_cve-2026-45138</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-45138</link>
      <description>&lt;p&gt;CI4MS is a CodeIgniter 4-based content management system skeleton. Prior to version 0.31.9.0, the custom `html_purify` validation rule used to sanitize blog post bodies relies on by-reference mutation (`?string &amp;amp;$str`), but CodeIgniter 4&amp;#39;s validator passes a local copy of the value, so the sanitized text is silently discarded. The Blog controller writes `$lanData[&amp;#39;content&amp;#39;]` directly into `blog_langs.content`, and the public template echoes it without escaping — yielding stored XSS executable in any visitor&amp;#39;s browser, including the superadmin when previewing or editing posts. Version 0.31.9.0 patches the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;CI4MS is a CodeIgniter 4-based content management system skeleton. Prior to version 0.31.9.0, the custom `html_purify` validation rule used to sanitize blog post bodies relies on by-reference mutation (`?string &amp;amp;$str`), but CodeIgniter 4&amp;#39;s validator passes a local copy of the value, so the sanitized text is silently discarded. The Blog controller writes `$lanData[&amp;#39;content&amp;#39;]` directly into `blog_langs.content`, and the public template echoes it without escaping — yielding stored XSS executable in any visitor&amp;#39;s browser, including the superadmin when previewing or editing posts. Version 0.31.9.0 patches the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-45138</guid>
    </item>
    <item>
      <title>GHSA-2m69-jmvh-6chr — CI4MS: Stored XSS in Blog Content via Broken `html_purify` Validation Rule</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-2m69-jmvh-6chr</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: ci4-cms-erp/ci4ms&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The custom `html_purify` validation rule used to sanitize blog post bodies relies on by-reference mutation (`?string &amp;amp;$str`), but CodeIgniter 4&amp;#39;s validator passes a local copy of the value, so the sanitized text is silently discarded. The Blog controller writes `$lanData[&amp;#39;content&amp;#39;]` directly into `blog_langs.content`, and the public template echoes it without escaping — yielding stored XSS executable in any visitor&amp;#39;s browser, including the superadmin when previewing or editing posts.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Root cause: by-reference mutation never propagates&lt;/p&gt;
&lt;p&gt;`Modules\Backend\Validation\CustomRules::html_purify` declares its first argument by reference:&lt;/p&gt;
&lt;p&gt;```php
// modules/Backend/Validation/CustomRules.php:54-73
public function html_purify(?string &amp;amp;$str = null, ?string &amp;amp;$error = null): bool
{
    if (empty(trim((string)$str))) return true;
    if (!class_exists(&amp;#39;\HTMLPurifier&amp;#39;)) { $error = lang(&amp;#39;Backend.htmlPurifierNotFound&amp;#39;); return false; }
    $clean = self::sanitizeHtml($str);
    $str   = $clean;                                  // &amp;lt;-- mutates only the local $value in CI4&amp;#39;s validator
    self::$cleanCache[md5((string)$str)] = $clean;    // &amp;lt;-- key is md5(CLEAN), getClean() looks up md5(ORIGINAL)
    return true;
}
```&lt;/p&gt;
&lt;p&gt;CI4&amp;#39;s validator invokes the rule via a local variable `$value` it created from a copy of `$this-&amp;gt;data`:&lt;/p&gt;
&lt;p&gt;```php
// vendor/codeigniter4/framework/system/Validation/Validation.php:204-211
foreach ($values as $dotField =&amp;gt; $value) {…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: ci4-cms-erp/ci4ms&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The custom `html_purify` validation rule used to sanitize blog post bodies relies on by-reference mutation (`?string &amp;amp;$str`), but CodeIgniter 4&amp;#39;s validator passes a local copy of the value, so the sanitized text is silently discarded. The Blog controller writes `$lanData[&amp;#39;content&amp;#39;]` directly into `blog_langs.content`, and the public template echoes it without escaping — yielding stored XSS executable in any visitor&amp;#39;s browser, including the superadmin when previewing or editing posts.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Root cause: by-reference mutation never propagates&lt;/p&gt;
&lt;p&gt;`Modules\Backend\Validation\CustomRules::html_purify` declares its first argument by reference:&lt;/p&gt;
&lt;p&gt;```php
// modules/Backend/Validation/CustomRules.php:54-73
public function html_purify(?string &amp;amp;$str = null, ?string &amp;amp;$error = null): bool
{
    if (empty(trim((string)$str))) return true;
    if (!class_exists(&amp;#39;\HTMLPurifier&amp;#39;)) { $error = lang(&amp;#39;Backend.htmlPurifierNotFound&amp;#39;); return false; }
    $clean = self::sanitizeHtml($str);
    $str   = $clean;                                  // &amp;lt;-- mutates only the local $value in CI4&amp;#39;s validator
    self::$cleanCache[md5((string)$str)] = $clean;    // &amp;lt;-- key is md5(CLEAN), getClean() looks up md5(ORIGINAL)
    return true;
}
```&lt;/p&gt;
&lt;p&gt;CI4&amp;#39;s validator invokes the rule via a local variable `$value` it created from a copy of `$this-&amp;gt;data`:&lt;/p&gt;
&lt;p&gt;```php
// vendor/codeigniter4/framework/system/Validation/Validation.php:204-211
foreach ($values as $dotField =&amp;gt; $value) {…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-2m69-jmvh-6chr</guid>
    </item>
  </channel>
</rss>
