Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconSteal victim JWT from server logs or Referer headers via ?token= URL leakage
-
DeliveryEmbed stolen JWT in attacker-hosted JavaScript
-
ExploitLure authenticated victim to malicious webpage
-
InstallJavaScript submits API request with JWT in Authorization header
-
C2Grav API returns Access-Control-Allow-Origin: * wildcard
-
ExecuteBrowser permits cross-origin script to read full authenticated response
-
ImpactExfiltrate 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Cors Misconfiguration
View allCross-origin data theft in LightRAG server versions prior to 1.5.4 allows any malicious website to make authenticated, c
Casdoor is a UI-first Identity and Access Management (IAM) / Single-Sign-On (SSO) platform. Rated high severity (CVSS 8.
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
Unauthenticated cross-origin RCE in Windows ML CLI (winml-cli < 0.4.0) is reachable when a developer runs the `serve` co
Bruno is an open source IDE for exploring and testing APIs. Rated high severity (CVSS 8.7), this vulnerability is no aut
memos is a privacy-first, lightweight note-taking service. Rated high severity (CVSS 8.1), this vulnerability is remotel
Cross-origin read bypass in Electron's custom protocol handler exposes sensitive application data to remote pages via fe
Information disclosure in Progress MOVEit Transfer (all versions before 2025.1.5, and 2026.0.0 before 2026.0.3) stems fr
Sensitive-data exposure in Cohere North AI v1.1.5 stems from the server accepting cross-origin requests without validati
SCG Policy Manager, all versions, contains an overly permissive Cross-Origin Resource Policy (CORP) vulnerability. Rated
In Directus before 9.7.0, the default settings of CORS_ORIGIN and CORS_ENABLED are true. Rated critical severity (CVSS 9
A malicious website could have learned the size of a cross-origin resource that supported Range requests. Rated critical
EUVD-2026-62545
NVD
CVE.org
EPSS
GitHub
Exploit-DB