<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-01T16:41:41.255097+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/fkie_cve-2026-61453</id>
    <title>fkie_cve-2026-61453</title>
    <updated>2026-10-01T16:41:41.258785+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Grav v2.0.0 contains a cross-site scripting vulnerability (fixed in 2.0.1). The XSS blueprint validator (Security::detectXss()) runs on raw page content before Twig processing. When Twig content processing is enabled (twig_content.process_enabled: true), an attacker with page-write API permission can use Twig's string concatenation operator (~) to dynamically construct event handler names, dangerous tag names, or dangerous protocols at render time (e.g. {% set x = "on" ~ "error" %}). The validator sees only the harmless Twig expression and allows the content, but after Twig rendering the output (rendered via {{ page.content|raw }}) contains an active payload such as &lt;img src=1 onerror=alert(1)&gt;, executing arbitrary JavaScript in visitors' browsers.</p>
      </div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/fkie_cve-2026-61453"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-2c4f-86xc-cr74</id>
    <title>GHSA-2c4f-86xc-cr74 — Grav: XSS Blueprint Validation Bypass via Twig String Concatenation</title>
    <updated>2026-10-01T16:41:41.258879+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Packagist: getgrav/grav</p>
<p>## Summary</p>
<p>The XSS blueprint validator (`Security::detectXss()`) runs on the **raw page content before Twig processing**. An attacker can use Twig's string concatenation operator (`~`) to dynamically construct an event handler name at render time. The validator sees `{{ "on" ~ "error" }}` - a harmless Twig expression - and allows the content. After Twig processes the template, the output contains `&lt;img src=1 onerror=alert(1)&gt;` which is rendered via `{{ content|raw }}` and executes in the victim's browser.</p>
<p>---</p>
<p>## Details</p>
<p>**The two-stage attack** exploits the separation between validation and rendering:</p>
<p>**Stage 1 - what the XSS validator sees** (raw page content):</p>
<p>```twig
{% set x = "on" ~ "error" %}
&lt;img src=1 {{ x }}=alert(document.domain)&gt;
```</p>
<p>The `detectXss()` function scans this string. The `on_events` regex looks for `&lt;[^&gt;]*?[\s\x00-\x20\"\'\/](on\s*[a-z]+|xmlns)\s*=` inside HTML tags. In `{{ x }}`, the `{` character is not in the boundary set `[\s\x00-\x20\"\'\/]`, and `x` is not `on`. **No match - passes validation.**</p>
<p>**Stage 2 - what Twig produces** (after rendering):</p>
<p>```html
&lt;img src=1 onerror=alert(document.domain)&gt;
```</p>
<p>The validator never re-inspects Twig output. The theme template renders this via `{{ page.content|raw }}` (confirmed in `quark2/templates/default.html.twig:5`), so no auto-escaping occurs.</p>
<p>**Why `{% set %}` and `~` are allowed** - `system/config/security.yaml:125-145`:</p>
<p>```yaml
allowed_tags:
  - set          # ← allows variable assignment…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-2c4f-86xc-cr74"/>
  </entry>
</feed>
