Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain API key with api.webhooks.write
-
DeliveryRegister webhook URL with file/gopher/http scheme
-
ExploitServer dereferences target without protocol restriction
-
ExecutionRead local files or cloud metadata credentials
-
ImpactPivot to internal services and exfiltrate data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an authenticated Grav API key whose scope includes api.webhooks.write (per CVSS PR:L); an unscoped/unprivileged key or session cannot register webhooks. Beyond that, no non-default configuration is needed - the vulnerable FILTER_VALIDATE_URL-only validation and unrestricted cURL protocols are the default behavior in grav-plugin-api versions before 1.0.6. The attack is limited to what the server can reach on the network: file disclosure requires readable local paths, and metadata/internal-pivot impact requires that the Grav host actually has network access to 169.254.169.254 or internal services (a host with strict egress filtering and IMDSv2 substantially limits the payoff). No user interaction is required. |
| Impact | The vendor CVSS 4.0 score of 9.4 (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H) is aggressive: it treats the SSRF as yielding full confidentiality, integrity, and availability impact on both the vulnerable and subsequent systems, which is plausible for gopher-based writes to internal services and metadata-credential theft but is an upper-bound reading - the described primary impact (retrieving local files and response bodies, pivoting requests) is most reliably a confidentiality/pivot issue, with integrity/availability contingent on what internal services are reachable. The one genuine gating factor is PR:L: the attacker must already possess an API key carrying the api.webhooks.write scope, so this is not an unauthenticated internet-wide bug, and no EPSS score, KEV listing, or public PoC was provided to indicate active or automated exploitation. That said, the low attack complexity and the high value of the targets (cloud metadata credentials, internal-service pivot) mean any operator who issues scoped API keys to semi-trusted integrators or tenants should treat this as urgent and patch promptly rather than deferring on the assumption that the required privilege makes it low-risk. The realistic risk is high for multi-tenant or integration-heavy Grav deployments and lower for single-operator sites where the only key holders are fully trusted administrators. |
| Exploit ScenarioDerived | An attacker holding a Grav API key scoped for api.webhooks.write registers a webhook pointing at http://169.254.169.254/latest/meta-data/iam/security-credentials/ (or a file:// path). When the dispatcher fires, the Grav server fetches the target and returns the response body - including temporary cloud IAM credentials or local file contents - back to the attacker. No public PoC is identified at time of analysis, but the low attack complexity means exploitation requires only a valid crafted webhook registration request. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Server-Side Request Forgery in the Grav API plugin (grav-plugin-api) for Grav CMS before 1.0.6 lets a caller holding the api.webhooks.write permission register webhook URLs that the server dereferences with no protocol allow-listing. Because WebhookController.php validates the URL only with FILTER_VALIDATE_URL and WebhookDispatcher.php builds cURL without CURLOPT_PROTOCOLS/CURLOPT_REDIR_PROTOCOLS, an attacker can force the server to fetch file://, gopher://, dict://, and private/link-local targets, exfiltrating local files and internal HTTP responses including cloud metadata credentials. There is no public exploit identified at time of analysis and it is not in CISA KEV, but the root cause and fix are confirmed in the vendor advisory and commit.
RemediationAI
Vendor-released patch: upgrade the Grav API plugin to version 1.0.6, which replaces the bare FILTER_VALIDATE_URL check with a validateWebhookUrl() routine (see commit dfcc947f and release https://github.com/getgrav/grav-plugin-api/releases/tag/1.0.6). If you cannot upgrade immediately, the most effective compensating control is to revoke or withhold the api.webhooks.write scope from all API keys except fully trusted administrators, which disables the attack path at the cost of losing webhook registration for those integrators; additionally, restrict outbound egress from the Grav host so it cannot reach 169.254.169.254 and RFC1918/link-local ranges (blocks metadata and internal-pivot abuse but may break legitimate internal webhooks), and enforce IMDSv2 on cloud instances to blunt metadata-credential theft. Consult GHSA-58q8-f7v4-w2vf for vendor guidance. Note that the same 1.0.6 release also carries unrelated fixes (GHSA-x7hm scope-capping, GHSA-p97c-g455-q447 super-admin target guards), so upgrading closes several issues at once.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability is a classic CWE-918 SSRF in a PHP webhook dispatcher. Grav is a flat-file CMS (cpe:2.3:a:getgrav:grav) and the API plugin (cpe:2.3:a:getgrav:grav-plugin-api) exposes RESTful headless access, including a webhook registration feature. FILTER_VALIDATE_URL only checks syntactic well-formedness of a URL - it does not restrict scheme, so file:, gopher:, and dict: pass validation as readily as http:. cURL, when handed such a URL without CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS restrictions, will happily speak those protocols and follow redirects into them, turning the server into a request proxy. gopher:// is especially dangerous because it lets an attacker craft arbitrary line-based payloads to internal TCP services (e.g. Redis, SMTP), while file:// yields local file disclosure and 169.254.169.254 access yields cloud instance-metadata credentials.
Know when Grav 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Attacker needs an api.webhooks.write-scoped key (PR:L); SSRF crosses a trust boundary into internal/metadata systems (S:C) and primarily yields high confidentiality (file and credential disclosure) with limited integrity via internal pivots.
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.6, the Grav API plugin WebhookController.php accepts webhook URLs after only FILTER_VALIDATE_URL syntax validation, and WebhookDispatcher.php initializes cURL without CURLOPT_PROTOCOLS or CURLOPT_REDIR_PROTOCOLS restrictions. An account with api.webhooks.write can submit file, dict, gopher, private-network, or link-local targets, retrieve local files and delivery response bodies, and pivot requests to internal services or cloud metadata endpoints. This issue is fixed in version 1.0.6.
Executive ViewAI
Grav CMS API plugin versions before 1.0.6 contain a critical vulnerability allowing attackers with webhook administration permissions to steal sensitive data, including cloud credentials and local files, from affected servers. This poses immediate risk of credential compromise and unauthorized access to cloud infrastructure and internal systems. Immediate isolation of vulnerable systems and credential rotation is required to prevent security breach.
Disable grav-plugin-api on all affected systems immediately. No vendor-released patch identified at time of analysis. Implement network isolation by restricting outbound connections from Grav servers to standard protocols (HTTP/HTTPS only), blocking file://, gopher://, dict://, and other SSRF-prone protocol handlers. Restrict api.webhooks.write permission to essential administrators only. Rotate and revoke all cloud credentials and service keys accessible from affected systems. Enable continuous monitoring of server and cloud provider audit logs for exploitation attempts or unauthorized credential access.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Server-side template injection (SSTI) in Grav (getgrav/grav) prior to 1.8.0-beta.27 allows an authenticated attacker hol
Broken access control in Grav CMS (CWE-285) before 1.8.0-beta.27 lets an authenticated editor-level user escalate their
A Remote Code Execution (RCE) vulnerability in Grav CMS v1.7.48 allows an authenticated admin to upload a malicious plug
Grav is a file-based Web platform. Rated critical severity (CVSS 9.9), this vulnerability is remotely exploitable, low a
GravCMS 1.10.7 allows unauthenticated remote attackers to write arbitrary YAML configuration files, leading to full serv
Remote code execution in Grav CMS 2.0.4 (fixed in 2.0.7) lets an authenticated user holding the admin.pages or api.pages
Remote code execution in Grav CMS before 2.0.15 allows attackers holding page-edit or blueprint-config privileges to wri
Vertical privilege escalation in Grav CMS before 2.0.14 lets a delegated administrator holding only the admin.users perm
Stored cross-site scripting in Grav CMS before 2.0.15 lets authenticated editors smuggle JavaScript event handlers past
Server-side request forgery (SSRF) in Grav CMS versions prior to 1.7.49.5 allows remote authenticated attackers to make
Grav is a file-based Web platform. Prior to 1.8.0-beta.27, Grav CMS is vulnerable to a Server-Side Template Injection (S
Remote code execution in Grav CMS before 2.0.13 allows authenticated low-privilege users to plant and execute arbitrary
EUVD-2026-62538
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB