Skip to main content

Grav API Plugin CVE-2026-63407

| EUVDEUVD-2026-62545 HIGH
Permissive Cross-domain Security Policy with Untrusted Domains (CWE-942)
2026-08-19 GitHub_M
8.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Recon
    Steal victim JWT from server logs or Referer headers via ?token= URL leakage
  2. Delivery
    Embed stolen JWT in attacker-hosted JavaScript
  3. Exploit
    Lure authenticated victim to malicious webpage
  4. Install
    JavaScript submits API request with JWT in Authorization header
  5. C2
    Grav API returns Access-Control-Allow-Origin: * wildcard
  6. Execute
    Browser permits cross-origin script to read full authenticated response
  7. Impact
    Exfiltrate site content or modify account data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A02:2025 - Security Misconfiguration
ASVS 5.0
V13 - Configuration CORS policy restriction
Exploitation Conditions

The attacker must separately possess a valid, non-expired JWT for the target Grav API Plugin instance - for example, by harvesting it from server access logs or HTTP Referer headers where it was leaked via the ?token= URL query parameter accepted on all API routes prior to the patch. The victim must visit an attacker-controlled webpage (UI:R per CVSS) during the window in which the stolen JWT remains valid. No special server-side configuration is required beyond default installation: the wildcard CORS response was the out-of-box default for all pre-1.0.0-rc.16 deployments. Exploitation is entirely browser-mediated - direct non-browser API clients such as curl or server-side code are unaffected by CORS policies. The write impact (I:L) is bounded by the privileges of the stolen token's associated account; full administrative account takeover requires having obtained an admin-level JWT.

Impact

The CVSS 8.2 score is driven by C:H (full read of authenticated API data), S:C (browser SOP bypass changes scope beyond the vulnerable component), and AV:N/AC:L, all of which are well-justified by the vulnerability class. The UI:R metric reflects that a victim must visit an attacker-controlled page; this is a meaningful real-world constraint that limits opportunistic mass exploitation. CVSS PR:N correctly reflects that the attacking party needs no account on the Grav instance, though the attacker must separately possess a valid victim JWT - a precondition the base score does not capture. EPSS score was not included in the intelligence feed and cannot be quantified. No CISA KEV listing is present and no public exploit code has been identified. Critically, the secondary URL token leakage vector fixed in the same patch (tokens accepted via ?token= on all API routes and therefore appearing in server access logs and Referer headers) provided a realistic, low-effort JWT theft mechanism chained with this CORS bypass - making the combined attack considerably more accessible than each vulnerability in isolation. Risk is highest in publicly accessible deployments with long-lived JWTs and server logs accessible to attackers.

Exploit ScenarioDerived

An attacker harvests a victim's JWT from server access logs or an HTTP Referer header, where it was leaked because the pre-patch plugin accepted tokens via the ?token= URL query parameter on all API routes. The attacker embeds the stolen token in JavaScript hosted on an attacker-controlled domain and lures the victim to visit that page; the JavaScript then submits a fetch() request to the Grav API with the JWT in the Authorization header, and because the API responds with Access-Control-Allow-Origin: *, the browser permits the cross-origin script to read the full authenticated JSON response. No proof-of-concept exploit has been publicly disclosed; the technique requires only standard browser fetch APIs and is straightforward for any web attacker who can obtain a valid JWT.

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

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

Alert me

AnalysisAIv1 – Aug 19, 2026

Permissive CORS misconfiguration in the Grav API Plugin (all versions prior to 1.0.0-rc.16) allows cross-origin JavaScript on any attacker-controlled website to submit a stolen JWT via Authorization or X-API-Token headers and read full authenticated API responses, enabling data exfiltration and account modification with the token owner's privileges. The wildcard Access-Control-Allow-Origin: * header was returned by default for all /api/v1 endpoints - including authenticated ones - bypassing browser Same-Origin Policy protections entirely. A secondary vector existed via URL query-string token acceptance (?token=) on general API routes, leaking JWTs into server logs and Referer headers where they could be harvested and then weaponized via the CORS bypass. No public exploit code has been identified at time of analysis, and no CISA KEV listing is present.

RemediationAI

Upgrade the Grav API Plugin to version 1.0.0-rc.16, available at https://github.com/getgrav/grav-plugin-api/releases/tag/1.0.0-rc.16 (fix commit 56ae2ca3bf36c8299a4b3d376c6a20e8c0ed5ba9). This release changes the default cors.origins from ['*'] to [] (same-origin only) and enforces that any configured wildcard is honored only for unauthenticated endpoints. If immediate upgrade is not possible, manually edit api.yaml to replace the wildcard origins list with an explicit allowlist of trusted origins (e.g., https://app.example.com) or set origins: [] to block all cross-origin browser access - note this will break legitimate cross-origin browser clients until they are explicitly allowlisted, so coordinate with API consumers before applying. As a secondary hardening measure, configure your reverse proxy or WAF to strip the ?token= query parameter from requests to any API path not ending in /download or /thumbnails; this prevents JWTs from appearing in server logs and Referer headers, removing the most practical token-theft vector, though it does not address the CORS misconfiguration itself and is not a substitute for patching.

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

CWE-942 (Permissive Cross-domain Policy with Untrusted Domains) describes the root cause: the CorsMiddleware class in classes/Api/Middleware/CorsMiddleware.php defaulted the plugins.api.cors.origins config to ['*'] and returned Access-Control-Allow-Origin: * unconditionally, even for authenticated API endpoints carrying user-specific data. Under the browser Same-Origin Policy, cross-origin JavaScript is normally blocked from reading responses from different origins; a wildcard CORS header instructs the browser to lift this restriction, allowing arbitrary cross-origin JavaScript to read authenticated REST API responses in full. The plugin provides headless CMS access to Grav (a flat-file PHP CMS) via JWT-authenticated endpoints under /api/v1. The CPE cpe:2.3:a:getgrav:grav-plugin-api:*:*:*:*:*:*:*:* covers all plugin versions prior to the fix. The patch at commit 56ae2ca3bf36c8299a4b3d376c6a20e8c0ed5ba9 changes the default to origins: [] (same-origin only), enforces that any configured wildcard is honored only for unauthenticated guest responses, and additionally restricts URL query-string token acceptance to file-streaming routes (/download, /thumbnails) only - eliminating the JWT leakage primitive that made token theft practical.

Know when Cors Misconfiguration 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 8.2 HIGH
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N
vuln.today AI 8.2 HIGH

AV:N for web-based attack; PR:N as attacker needs no account on the instance; UI:R because victim must visit attacker page; S:C for browser SOP scope change; I:L for write operations bounded by victim token's privileges.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:L/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
Required
Scope
Changed
Confidentiality
High
Integrity
Low
Availability
None

Lifecycle Timeline

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

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 CorsMiddleware returns Access-Control-Allow-Origin: * and permissive OPTIONS responses for authenticated /api/v1 endpoints. JavaScript from any origin can submit an attacker-obtained JWT through the Authorization or X-API-Token header, read the authenticated response, and perform write operations with the token owner's privileges, enabling data exfiltration and account modification. This issue is fixed in version 1.0.0-rc.16.

Executive ViewAI

Why It Matters

The Grav API Plugin (versions before 1.0.0-rc.16) contains a security flaw that allows attackers on compromised websites to intercept and reuse API authentication tokens from your employees' browsers, gaining unauthorized access to protected business data. Organizations using Grav for APIs face risk of data exfiltration and account takeover without immediate protective action. No vendor patch is currently available, requiring urgent interim mitigation measures.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Implement restrictive CORS headers (whitelist specific trusted origins only; eliminate wildcard Access-Control-Allow-Origin responses), disable token acceptance via URL query parameters on all API routes, restrict API access via network controls (VPN requirements or firewall-based internal-only access), deploy WAF rules to block cross-origin API requests, and enable comprehensive API access logging with alerts for unauthorized token usage patterns.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Low
niche flat-file CMS plugin, limited enterprise footprint
Data Quality
5 sources
Confidence: Medium

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.3%
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
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-61736 CRITICAL POC
9.3 Jul 15

Cross-origin data theft in LightRAG server versions prior to 1.5.4 allows any malicious website to make authenticated, c

CVE-2024-41657 HIGH POC
8.8 Aug 20

Casdoor is a UI-first Identity and Access Management (IAM) / Single-Sign-On (SSO) platform. Rated high severity (CVSS 8.

CVE-2021-34435 HIGH POC
8.8 Sep 01

In Eclipse Theia 0.3.9 to 1.8.1, the "mini-browser" extension allows a user to preview HTML files in an iframe inside th

CVE-2026-84452 HIGH POC
8.6 Sep 02

Unauthenticated cross-origin RCE in Windows ML CLI (winml-cli < 0.4.0) is reachable when a developer runs the `serve` co

CVE-2025-30354 HIGH POC
8.7 Apr 01

Bruno is an open source IDE for exploring and testing APIs. Rated high severity (CVSS 8.7), this vulnerability is no aut

CVE-2024-41659 HIGH POC
8.1 Aug 20

memos is a privacy-first, lightweight note-taking service. Rated high severity (CVSS 8.1), this vulnerability is remotel

CVE-2026-70604 HIGH POC
7.4 Aug 05

Cross-origin read bypass in Electron's custom protocol handler exposes sensitive application data to remote pages via fe

CVE-2026-15966 CRITICAL
9.8 Jul 23

Information disclosure in Progress MOVEit Transfer (all versions before 2025.1.5, and 2026.0.0 before 2026.0.3) stems fr

CVE-2025-61163 CRITICAL
9.8 Aug 26

Sensitive-data exposure in Cohere North AI v1.1.5 stems from the server accepting cross-origin requests without validati

CVE-2024-37131 CRITICAL
9.8 Jun 13

SCG Policy Manager, all versions, contains an overly permissive Cross-Origin Resource Policy (CORP) vulnerability. Rated

CVE-2022-26969 CRITICAL
9.8 Dec 26

In Directus before 9.7.0, the default settings of CORS_ORIGIN and CORS_ENABLED are true. Rated critical severity (CVSS 9

CVE-2022-31736 CRITICAL
9.8 Dec 22

A malicious website could have learned the size of a cross-origin resource that supported Range requests. Rated critical

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