Description
Grav is a flat-file CMS. In versions 2.0.19 through 2.0.24 — and in 2.0.0 through 2.0.18 and 1.7.x only where content Twig has been explicitly enabled — page content authored by a user holding only page-write permission is rendered through a Twig sandbox that allowlists get_cookie(), which returns any cookie sent with the current request, including the visitor's session cookie. Because the read occurs server-side via filter_input(INPUT_COOKIE, ...), the HttpOnly, Secure and SameSite attributes offer no protection. Grav then stores the finished post-Twig output in a page-content cache keyed only on page identity and the configuration checksum, with no session, user or request dimension and no bypass for authenticated visitors. A page published by a page-write user can therefore capture the session identifier of the next administrator who views it, after which the cached output serves that identifier to unauthenticated visitors, who can replay the cookie to authenticate as that administrator. Since 2.0.19, security.twig_content.process_enabled defaults to true and Security::applyTwigContentDefault() derives each page's process.twig flag from that gate, so content Twig runs on every page with no frontmatter or operator action. Fixed in 2.0.25; 1.7.x is outside the backport scope.
Published: 2026-09-26
Score: 8.6 High
EPSS: < 1% Very Low
KEV: No
Impact: Session Hijacking
Action: Immediate Patch
AI Analysis

Impact

Grav, a flat‑file CMS, renders user‑submitted page content through a Twig sandbox during page rendering. The sandbox mistakenly allows the get_cookie() function, which returns all cookies sent with the request without regard to the HttpOnly, Secure or SameSite flags. A user with only page‑write permission can publish Twig code that calls get_cookie() to capture the administrator's session cookie when the admin next visits the page. The output, stripped of any request or session information, is then cached and served to every visitor. An unauthenticated visitor can replay that captured cookie and authenticate as the administrator, resulting in full administrative access. The flaw thus enables remote session hijacking and compromised account takeover.

Affected Systems

Grav versions 2.0.19 through 2.0.24, as well as 2.0.0 through 2.0.18 when content Twig is enabled, and the 1.7.x series under the same condition, are affected. The vulnerability exists because the Security::applyTwigContentDefault() routine permits content Twig to run on every page without request or session context. The issue was fixed in Grav 2.0.25; the 1.7.x branch was not backported.

Risk and Exploitability

With a CVSS score of 8.6, the flaw is considered high severity. No EPSS score is available, and it is not listed in CISA’s KEV catalog. The attack requires the attacker to be a page‑write user who can publish Twig code; the vulnerability is not trivially exploitable by an unauthenticated attacker. However, once a malicious page is published, any administrator who views that page will have his or her session cookie exposed to attackers. Environments that allow broad write permissions or enable content Twig should treat this as a critical real‑world risk.

Generated by OpenCVE AI on September 26, 2026 at 15:33 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply Grav version 2.0.25 or later to eliminate the vulnerability.
  • If upgrading is delayed, disable Twig content processing for pages authored by users with only page‑write permission, or remove get_cookie() from the sandbox allowlist in Grav’s configuration.
  • Review user roles so that only trusted individuals can publish pages containing Twig code, and consider disabling caching of Twig‑generated content or invalidating the cache when a new admin session is established.

Generated by OpenCVE AI on September 26, 2026 at 15:33 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 28 Sep 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Sat, 26 Sep 2026 13:30:00 +0000

Type Values Removed Values Added
Description Grav is a flat-file CMS. In versions 2.0.19 through 2.0.24 — and in 2.0.0 through 2.0.18 and 1.7.x only where content Twig has been explicitly enabled — page content authored by a user holding only page-write permission is rendered through a Twig sandbox that allowlists get_cookie(), which returns any cookie sent with the current request, including the visitor's session cookie. Because the read occurs server-side via filter_input(INPUT_COOKIE, ...), the HttpOnly, Secure and SameSite attributes offer no protection. Grav then stores the finished post-Twig output in a page-content cache keyed only on page identity and the configuration checksum, with no session, user or request dimension and no bypass for authenticated visitors. A page published by a page-write user can therefore capture the session identifier of the next administrator who views it, after which the cached output serves that identifier to unauthenticated visitors, who can replay the cookie to authenticate as that administrator. Since 2.0.19, security.twig_content.process_enabled defaults to true and Security::applyTwigContentDefault() derives each page's process.twig flag from that gate, so content Twig runs on every page with no frontmatter or operator action. Fixed in 2.0.25; 1.7.x is outside the backport scope.
Title Grav before 2.0.25 Session Cookie Theft via Twig Sandbox
First Time appeared Getgrav
Getgrav grav
Weaknesses CWE-200
CPEs cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:*
Vendors & Products Getgrav
Getgrav grav
References
Metrics cvssV3_1

{'score': 8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H'}

cvssV4_0

{'score': 8.6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-28T18:12:07.848Z

Reserved: 2026-09-26T02:34:55.635Z

Link: CVE-2026-100671

cve-icon Vulnrichment

Updated: 2026-09-28T18:10:02.522Z

cve-icon NVD

Status : Deferred

Published: 2026-09-26T14:16:50.743

Modified: 2026-09-28T19:16:45.903

Link: CVE-2026-100671

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-26T20:15:17Z

Weaknesses
  • CWE-200

    Exposure of Sensitive Information to an Unauthorized Actor