Skip to main content

Grav API Plugin CVE-2026-63408

| EUVDEUVD-2026-62547 HIGH
Use of GET Request Method With Sensitive Query Strings (CWE-598)
2026-08-19 GitHub_M
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify target Grav site running API plugin
  2. Delivery
    Obtain read access to server/proxy/CDN logs
  3. Exploit
    Extract JWT from ?token= query string in log entries
  4. Execution
    Replay token in Authorization header
  5. Impact
    Access or modify content via API as token owner

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service Sensitive data in POST not GET
Exploitation Conditions

Exploitation requires two conditions to align: (1) the Grav API Plugin version prior to 1.0.0-rc.16 must be installed and active, and (2) the attacker must have read access to at least one of the following secondary sources that capture full request URLs - Apache/web server access logs, reverse proxy or load-balancer logs, CDN access logs, browser history on a shared machine, or Referer headers transmitted to third-party resources embedded in pages returned by the API. A valid JWT must have been issued to at least one legitimate user and used in a request that included ?token= in the URL. Exploitation is limited by the need for this log-access prerequisite - the attacker cannot directly intercept the token from the network without also being in a position to perform a man-in-the-middle attack (which HTTPS mitigates). The companion CORS wildcard issue (also fixed in rc.16) additionally requires a victim to visit a malicious cross-origin web page while authenticated, which is a separate social-engineering dependency.

Impact

The CVSS 7.5 High score (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) captures the network-reachable nature and high confidentiality impact, but the PR:N metric deserves scrutiny: exploitation requires a legitimate token that was already issued to an authenticated user, so the attacker's effort is not zero - they must first obtain access to a log source. That said, log access is realistic in shared-hosting environments, compromised infrastructure, or misconfigured CDN log exports. Impact is scoped to confidentiality (token reuse for read/write API operations), with no direct availability impact. No EPSS data was provided in the intelligence feed, and the vulnerability is not listed in CISA KEV, indicating no confirmed active exploitation. The CORS wildcard default (also fixed in rc.16) is a compounding factor: prior to the patch, a wildcard Access-Control-Allow-Origin on authenticated responses allowed any cross-origin website to read API responses for any token it could supply - a cross-site account-takeover primitive that elevates the practical severity beyond raw token-in-log risk. Overall, this is a real, exploitable information-disclosure issue that warrants prompt patching wherever the API plugin is deployed, particularly in environments where logs are shared across tenants or forwarded to third-party SIEM/CDN services.

Exploit ScenarioDerived

An attacker with read access to Apache access logs - for example, a malicious insider, a compromised log aggregation pipeline, or a co-tenant on shared hosting - scans log entries for /api/v1 requests containing ?token= query parameters. They extract a valid JWT, then replay it directly in an Authorization header against any Grav API endpoint, gaining full API access as the token's owner. No public exploit code has been identified, but the technique requires only basic HTTP tooling.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 19, 2026

JWT bearer token leakage in the Grav API Plugin for Grav CMS (prior to 1.0.0-rc.16) exposes valid access tokens to any party with access to server logs, proxy logs, CDN logs, browser history, or Referer headers. The JwtAuthenticator::extractBearerToken() method accepted tokens supplied via the ?token= URL query parameter on every /api/v1 route - including state-changing endpoints - rather than restricting token-in-URL to the file-download routes where it is technically necessary. An attacker who obtains a token from those secondary log sources can replay it with the full API privileges of the original token owner. No active exploitation (CISA KEV) or public exploit code has been identified at time of analysis.

RemediationAI

Upgrade the Grav API Plugin to version 1.0.0-rc.16, which is the vendor-released patch addressing this issue. The fix is confirmed at https://github.com/getgrav/grav-plugin-api/releases/tag/1.0.0-rc.16 and the underlying commit is https://github.com/getgrav/grav-plugin-api/commit/56ae2ca3bf36c8299a4b3d376c6a20e8c0ed5ba9. If immediate upgrade is not possible, restrict access to API server logs and proxy logs so that only authorized personnel can read them, reducing the attack surface for token harvesting from log sources. Additionally, review and tighten CORS configuration: the patched version changes the default CORS origins from '*' to an empty list (same-origin only); manually set cors.origins to an explicit allowlist of trusted origins rather than a wildcard. Invalidating all existing JWT tokens issued before the patch and requiring re-authentication removes any tokens that may already have leaked into logs.

Affected VersionsENISA

grav-plugin-api < 1.0.0-rc.16

Affected Packages

euvd grav_plugin_api fix: 1.0.0-rc.16

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The Grav API Plugin (CPE: cpe:2.3:a:getgrav:grav-plugin-api:*:*:*:*:*:*:*:*) is a RESTful API layer for the Grav flat-file CMS, providing headless content access. The root cause is CWE-598 (Use of GET Request Method with Sensitive Query Strings): bearer tokens placed in URL query parameters are inherently insecure because HTTP servers (Apache per the tags), reverse proxies, CDNs, and browsers all log or transmit the full URL - including query strings - through access logs, browser history, and the Referer HTTP header sent to third-party resources. The vulnerable code path is JwtAuthenticator::extractBearerToken(), which unconditionally extracted the ?token= parameter on all routes. The commit (56ae2ca3) introduces isTokenQueryAllowed(), which restricts ?token= acceptance to GET/HEAD requests on two specific file-streaming path suffixes (/download, /thumbnails) - the only routes where a browser element genuinely cannot attach an Authorization header. A companion fix changes the CORS default from a wildcard '*' to an empty (same-origin-only) list, eliminating a related cross-origin token theft primitive.

Know when Grav Plugin Api gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 5.9 MEDIUM

AC:H reflects the prerequisite of attacker log-source access; confidentiality-only impact, no integrity or availability consequences.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Aug 19, 2026 - 17:02 EUVD
CVE Published
Aug 19, 2026 - 15:53 cve.org
HIGH 7.5

DescriptionCVE.org

Grav API Plugin is a RESTful API for Grav CMS that provides full headless access to your site's content. Prior to 1.0.0-rc.16, the Grav API plugin JwtAuthenticator::extractBearerToken() accepts a JWT from the token URL query parameter on every /api/v1 route, including state-changing endpoints. Request URLs consequently expose valid access tokens through Apache, proxy, and CDN logs, browser history, and Referer headers, allowing a party with access to those records to reuse the token with the owner's API privileges. This issue is fixed in version 1.0.0-rc.16.

Executive ViewAI

Why It Matters

The Grav API Plugin for Grav CMS (versions prior to 1.0.0-rc.16) leaks JWT authentication tokens through server logs, proxy logs, CDN logs, and browser history, creating significant risk of credential theft and token replay attacks. Although no public exploit identified at time of analysis, any user with access to these logs can obtain valid API credentials and compromise the entire API surface. Organizations must immediately implement interim protections while awaiting vendor patches.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Implement interim mitigations: restrict token authentication to HTTP Authorization headers only (disable URL parameter support); deploy automated log redaction to remove JWT patterns from all server, proxy, CDN, and browser logs; establish role-based access controls limiting log visibility to authorized personnel with audit trails; implement continuous monitoring for token replay attempts and anomalous API access patterns; establish 24-hour token rotation schedules; maintain alert rules for authentication failures indicating potential replay attacks.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche flat-file CMS plugin with limited enterprise footprint
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-86196 HIGH POC
8.7 Sep 05

Host header injection in the Grav API plugin's forgot-password endpoint allows unauthenticated remote attackers to redir

CVE-2026-62668 CRITICAL
9.4 Aug 19

Server-Side Request Forgery in the Grav API plugin (grav-plugin-api) for Grav CMS before 1.0.6 lets a caller holding the

CVE-2026-112779 CRITICAL
9.3 Oct 19

Unauthenticated resource exhaustion in the Grav API plugin (grav-plugin-api) before 1.0.42 allows any remote attacker wh

CVE-2026-62666 HIGH
8.8 Aug 19

Privilege escalation in Grav API Plugin (all versions before 1.0.6) allows any authenticated user holding the api.users.

CVE-2026-86195 HIGH
8.7 Sep 05

Privilege escalation in grav-plugin-api before 1.0.20 allows a low-privileged API manager to self-create a super-admin a

CVE-2026-86193 HIGH
8.7 Sep 05

Privilege escalation in grav-plugin-api before 1.0.20 allows authenticated API users holding api.access and api.users.wr

CVE-2026-109317 HIGH
8.6 Oct 12

Privilege escalation in the Grav API plugin (grav-plugin-api) before 1.0.36 allows an account that already holds the api

CVE-2026-63407 HIGH
8.2 Aug 19

Permissive CORS misconfiguration in the Grav API Plugin (all versions prior to 1.0.0-rc.16) allows cross-origin JavaScri

CVE-2026-62667 HIGH
8.1 Aug 19

Scope enforcement is entirely absent in the Grav API Plugin prior to 1.0.6, meaning any scoped API key silently exercise

CVE-2026-109320 MEDIUM
5.3 Oct 12

Disabled accounts in Grav API plugin versions before 1.0.36 can continue to access API endpoints because SessionAuthenti

CVE-2026-11982 MEDIUM
5.1 Jun 18

Stored XSS in Grav CMS's grav-plugin-api (Admin2) allows a low-privileged editor to persist malicious JavaScript in page

CVE-2026-61607 MEDIUM
4.6 Aug 19

Stored cross-site scripting in the Grav API Plugin (all versions prior to 1.0.2) allows an authenticated attacker holdin

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy