Skip to content
Heist/ feed
Back to feed
Medium

Grav before 2.0.4 Improper Session Invalidation JWT Access Tokens

Type: advisorySources: OSV

The Grav API plugin (getgrav/grav-plugin-api) before 2.0.4 contains an improper session invalidation vulnerability where JWT access tokens are issued without a jti (JWT ID) claim and therefore cannot be revoked server-side. Unlike refresh tokens, access tokens remain valid for their full lifetime (default 1 hour) regardless of logout, password change, new token issuance, or account disablement. An attacker who has stolen an access token retains full API access until the token naturally expires.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-61452
Confirmed fixed CVEs
Not specified
Updated in this feed
5 Nov 2026, 00:51 UTC · Revision 1

Source evidence

Grav before 2.0.4 Improper Session Invalidation JWT Access Tokens

core-osv · Original source

Published 15 Jul 2026, 11:25 UTC

The Grav API plugin (getgrav/grav-plugin-api) before 2.0.4 contains an improper session invalidation vulnerability where JWT access tokens are issued without a jti (JWT ID) claim and therefore cannot be revoked server-side. Unlike refresh tokens, access tokens remain valid for their full lifetime (default 1 hour) regardless of logout, password change, new token issuance, or account disablement. An attacker who has stolen an access token retains full API access until the token naturally expires.

osv:CVE-2026-61452
Complete source record
{
  "id": "30eaae680ae50f38a43e5e2fdfaab145dcac8cc85f00301e28a9c9a8c94dfe20",
  "url": "https://osv.dev/vulnerability/CVE-2026-61452",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Grav before 2.0.4 Improper Session Invalidation JWT Access Tokens",
    "summary": "The Grav API plugin (getgrav/grav-plugin-api) before 2.0.4 contains an improper session invalidation vulnerability where JWT access tokens are issued without a jti (JWT ID) claim and therefore cannot be revoked server-side. Unlike refresh tokens, access tokens remain valid for their full lifetime (default 1 hour) regardless of logout, password change, new token issuance, or account disablement. An attacker who has stolen an access token retains full API access until the token naturally expires.",
    "evidence": "osv:CVE-2026-61452",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-61452",
      "aliases": [
        "CVE-2026-61452",
        "GHSA-m8g9-wxhx-6f86"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/getgrav/grav",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "c22d77d2ec2a9202d9f005f4ceda9c1483921286"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.0.4"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "2.0.4"
                      }
                    ],
                    "source": "DESCRIPTION"
                  }
                ]
              }
            }
          ],
          "versions": [
            "2.0.3",
            "2.0.2",
            "2.0.1",
            "1.7.53",
            "1.7.52",
            "1.7.51",
            "1.7.39.1",
            "1.7.39",
            "1.7.38",
            "1.7.37.1",
            "1.7.37",
            "1.7.36",
            "1.7.35",
            "1.7.34",
            "1.7.33",
            "1.7.32",
            "1.7.31",
            "1.7.30",
            "1.7.29.1",
            "1.7.29",
            "1.7.28",
            "1.7.27.1",
            "1.7.27",
            "1.7.26.1",
            "1.7.26",
            "1.7.25",
            "1.7.24",
            "1.7.23",
            "1.7.22",
            "1.7.21",
            "1.7.20",
            "1.7.19",
            "1.7.18",
            "1.7.17",
            "1.7.16",
            "1.7.15",
            "1.7.14",
            "1.7.13",
            "1.7.12",
            "1.7.10",
            "1.7.9",
            "1.7.8",
            "1.7.7",
            "1.7.6",
            "1.7.5",
            "1.7.4",
            "1.7.3",
            "1.7.1",
            "1.7.0",
            "1.7.0-rc.20",
            "1.7.0-rc.19",
            "1.7.0-rc.18",
            "1.7.0-rc.17",
            "1.7.0-rc.15",
            "1.7.0-rc.14",
            "1.7.0-rc.13",
            "1.7.0-rc.12",
            "1.7.0-rc.10",
            "1.7.0-rc.9",
            "1.7.0-rc.8",
            "1.7.0-rc.7",
            "1.7.0-rc.6",
            "1.7.0-rc.5",
            "1.7.0-rc.4",
            "1.7.0-rc.3",
            "1.7.0-rc.2",
            "1.7.0-rc.1",
            "1.7.0-beta.10",
            "1.7.0-beta.9",
            "1.7.0-beta.8",
            "1.7.0-beta.7",
            "1.7.0-beta.6",
            "1.7.0-beta.5",
            "1.7.0-beta.4",
            "1.7.0-beta.3",
            "1.7.0-beta.2",
            "1.7.0-beta.1",
            "1.6.0-rc.4",
            "1.6.0-rc.3",
            "1.6.0-rc.2",
            "1.6.0-rc.1",
            "1.6.0-beta.8",
            "1.6.0-beta.7",
            "1.6.0-beta.6",
            "1.6.0-beta.5",
            "1.6.0-beta.2",
            "1.6.0-beta.1",
            "1.5.0-rc.1",
            "1.5.0-beta.2",
            "1.5.0-beta.1",
            "1.3.0-rc.5",
            "1.3.0-rc.4",
            "1.3.0-rc.3",
            "1.3.0-rc.1",
            "1.2.0-rc.3",
            "1.2.0-rc.2",
            "1.2.0-rc.1",
            "1.1.9-rc.3",
            "1.1.9-rc.2",
            "1.1.9-rc.1",
            "1.1.0-rc.3",
            "1.1.0-rc.2",
            "1.1.0-rc.1",
            "1.1.0-beta.5",
            "1.1.0-beta.4",
            "1.1.0-beta.3",
            "1.1.0-beta.2",
            "1.1.0-beta.1",
            "0.9.19",
            "0.9.18",
            "0.9.17",
            "0.9.16",
            "0.9.15",
            "0.9.14",
            "0.9.13",
            "0.9.12",
            "0.9.11",
            "0.9.10",
            "0.9.9",
            "0.9.8",
            "0.9.7",
            "0.9.6",
            "0.9.5",
            "0.9.4",
            "0.9.3",
            "0.9.2",
            "0.9.0",
            "0.8.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-61452.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:40.894464182Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/61xxx/CVE-2026-61452.json",
        "https://github.com/getgrav/grav/security/advisories/GHSA-m8g9-wxhx-6f86",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-61452",
        "https://www.vulncheck.com/advisories/grav-before-improper-session-invalidation-jwt-access-tokens"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-613"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/61xxx/CVE-2026-61452.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-61452",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 508694,
  "published_at": "2026-07-15T11:25:45.185+00:00"
}