<?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, 08 Oct 2026 23:12:48 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-72697</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-72697</link>
      <description>&lt;p&gt;Grav CMS before 2.0.16 contains a path traversal vulnerability in the media_directory() Twig function that fails to validate filesystem paths, allowing authenticated users to enumerate and access files outside intended scope. Attackers with page authoring privileges can supply arbitrary filesystem paths to media_directory() and use the allow-listed filepath accessor on Medium objects to read file contents of any file matching configured media extensions that the web server process can access.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Grav CMS before 2.0.16 contains a path traversal vulnerability in the media_directory() Twig function that fails to validate filesystem paths, allowing authenticated users to enumerate and access files outside intended scope. Attackers with page authoring privileges can supply arbitrary filesystem paths to media_directory() and use the allow-listed filepath accessor on Medium objects to read file contents of any file matching configured media extensions that the web server process can access.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-72697</guid>
    </item>
    <item>
      <title>GHSA-47ch-6w46-6xm7 — Grav: media_directory() Twig function allows filesystem path traversal and file content disclosure from sandboxed page…</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-47ch-6w46-6xm7</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: getgrav/grav&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The `media_directory()` Twig function is allow-listed for use in sandboxed, editor-authored page content (`system/config/security.yaml`). Its implementation, `GravExtension::mediaDirFunc()`, only treats the input as unsafe when it looks like a Grav stream (`user://`, `theme://`, etc). If the input is instead a plain filesystem path, absolute or relative, the stream check is skipped entirely and the raw string is handed straight to `new Media($media_dir)`, which lists every file in that directory whose extension matches a configured media type (which by default includes `txt`, `json`, `xml`, `pdf`, `doc`, `docx`, and more, not just images) and builds `Medium` objects for them.&lt;/p&gt;
&lt;p&gt;Separately, the sandbox&amp;#39;s own allow-list for the `Medium` class includes the `filepath` accessor. A code comment directly above that allow-list entry states the developers&amp;#39; intent was for `filepath` to be part of the &amp;#34;dangerous surface&amp;#34; that &amp;#34;stays blocked&amp;#34;, but it is listed as an allowed method on the very same line, contradicting that stated intent.&lt;/p&gt;
&lt;p&gt;Combined, a user who can enter page content that gets processed as Twig (`process.twig: true` in frontmatter, or any modular page, which is unsandboxed and unconditional per the code comment in `processPage()`) can point `media_directory()` at any directory the web server process can read, anywhere on the filesystem, and both enumerate and read the content of any file in it whose extension is a recognized media type.&lt;/p&gt;
&lt;p&gt;## Affected product and…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: getgrav/grav&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The `media_directory()` Twig function is allow-listed for use in sandboxed, editor-authored page content (`system/config/security.yaml`). Its implementation, `GravExtension::mediaDirFunc()`, only treats the input as unsafe when it looks like a Grav stream (`user://`, `theme://`, etc). If the input is instead a plain filesystem path, absolute or relative, the stream check is skipped entirely and the raw string is handed straight to `new Media($media_dir)`, which lists every file in that directory whose extension matches a configured media type (which by default includes `txt`, `json`, `xml`, `pdf`, `doc`, `docx`, and more, not just images) and builds `Medium` objects for them.&lt;/p&gt;
&lt;p&gt;Separately, the sandbox&amp;#39;s own allow-list for the `Medium` class includes the `filepath` accessor. A code comment directly above that allow-list entry states the developers&amp;#39; intent was for `filepath` to be part of the &amp;#34;dangerous surface&amp;#34; that &amp;#34;stays blocked&amp;#34;, but it is listed as an allowed method on the very same line, contradicting that stated intent.&lt;/p&gt;
&lt;p&gt;Combined, a user who can enter page content that gets processed as Twig (`process.twig: true` in frontmatter, or any modular page, which is unsandboxed and unconditional per the code comment in `processPage()`) can point `media_directory()` at any directory the web server process can read, anywhere on the filesystem, and both enumerate and read the content of any file in it whose extension is a recognized media type.&lt;/p&gt;
&lt;p&gt;## Affected product and…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-47ch-6w46-6xm7</guid>
    </item>
  </channel>
</rss>
