<?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://cve.radiocsirt.org/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T04:57:24.595941+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" 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://cve.radiocsirt.org/vuln/euvd-2026-360017</id>
    <title>EUVD-2026-360017</title>
    <updated>2026-10-06T04:57:24.646305+00:00</updated>
    <content>EUVD-2026-360017</content>
    <link href="https://cve.radiocsirt.org/vuln/euvd-2026-360017"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/fkie_cve-2026-72701</id>
    <title>fkie_cve-2026-72701</title>
    <updated>2026-10-06T04:57:24.646355+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Grav CMS before 2.0.16 contains a timing vulnerability in Utils::verifyNonce() that uses non-constant-time string comparison with the === operator instead of hash_equals() for CSRF nonce validation. Attackers can measure response timing differences to recover valid nonce values byte-by-byte through multiple requests, weakening CSRF protection below its intended security margin.</p>
      </div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/fkie_cve-2026-72701"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-38p6-h87p-r4cg</id>
    <title>GHSA-38p6-h87p-r4cg — Grav: Non constant time nonce comparison in Utils::verifyNonce() used for CSRF protection</title>
    <updated>2026-10-06T04:57:24.646410+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>`Grav\Common\Utils::verifyNonce()`, the core function Grav and its plugins use to validate CSRF nonces, compares the submitted nonce to the expected value with PHP's `===` operator instead of `hash_equals()`. `===` on strings short circuits at the first differing byte, so the comparison time leaks how many leading bytes of a guess are correct. This is CWE-208, Observable Timing Discrepancy.</p>
<p>The codebase already knows to avoid this pattern. `hash_equals()` is used for the equivalent purpose in four other places I found: `system/src/Grav/Common/Session.php`, `system/src/Grav/Framework/Cache/Adapter/FileCache.php`, `system/src/Grav/Common/Scheduler/Scheduler.php` (the webhook token check), and `system/src/Grav/Common/Scheduler/JobQueue.php`. `Utils::verifyNonce()` is the one place I found that still uses a plain equality check for a secret comparison.</p>
<p>## Affected product and version</p>
<p>Product: Grav CMS, getgrav/grav
Confirmed present in: 2.0.15, commit c2b46866857a93a0aa7048e7ed707ed3ed45dbc3</p>
<p>## Affected code</p>
<p>`system/src/Grav/Common/Utils.php`, lines 1512 to 1521:
```php
public static function verifyNonce($nonce, $action)
{
    //Safety check for multiple nonces
    if (is_array($nonce)) {
        $nonce = array_shift($nonce);
    }</p>
<p>//Nonce generated 0-12 hours ago
    if ($nonce === self::getNonce($action)) {
        return true;
    }</p>
<p>//Nonce generated 12-24 hours ago
    return $nonce === self::getNonce($action, true);
}
```</p>
<p>The nonce itself is `md5…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-38p6-h87p-r4cg"/>
  </entry>
</feed>
