Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-75832

CVE-2026-75832: Grav API Plugin Auth Bypass Vulnerability

CVE-2026-75832 is an authorization bypass flaw in Grav API plugin that lets attackers with limited API keys access unauthorized user scopes. This post covers the technical details, affected versions, security impact, and mitigation.

Updated:

CVE-2026-75832 Overview

The Grav API plugin (getgrav/grav-plugin-api, bundled with Grav 2.0) contains a missing authorization vulnerability in the BlueprintPathResolver::resolveUserScope() method. Versions before 1.0.14 gate the users/<name> scope on the account's raw super-admin ACL flag (access.api.super) rather than validating the API key's actual granted scope. An attacker holding an API key scoped only to api.media.write, but minted on a super-admin account, can bypass the check. The flaw is fixed in version 1.0.15. This is a Missing Authorization weakness [CWE-862].

Critical Impact

A restricted API key can write image files into other users' account scopes and enumerate their file listings, despite lacking api.users.write.

Affected Products

  • Grav CMS 2.0 (bundled deployments)
  • getgrav/grav-plugin-api versions prior to 1.0.14
  • Deployments using API keys minted on super-admin accounts with narrow scopes

Discovery Timeline

  • 2026-08-18 - CVE-2026-75832 published to NVD
  • 2026-08-19 - Last updated in NVD database

Technical Details for CVE-2026-75832

Vulnerability Analysis

The Grav API plugin implements scope-based authorization for API keys. Each key is issued specific permissions such as api.media.write or api.users.write. The BlueprintPathResolver::resolveUserScope() method is responsible for validating whether a request targeting the users/<name> blueprint scope should be permitted.

Instead of checking the presented API key's granted scope, the method inspects the underlying account's access.api.super ACL flag. Any API key minted on a super-admin account inherits authorization for the users scope, regardless of the key's declared permissions. This decouples the key's intended least-privilege boundary from the enforcement logic.

Root Cause

The root cause is a confusion between account-level ACL and key-level scope. The resolver treats the account's super-admin flag as sufficient authorization. It never consults the token's scope claim. This is a canonical Missing Authorization pattern where an authenticated principal is not re-authorized against the specific resource and action.

Attack Vector

An attacker with a valid API key scoped to api.media.write on a super-admin account can send a POST /blueprint-upload request targeting another user's scope. The assertSafeExtension() guard constrains uploaded files to image extensions and writes them into the shared user/accounts/ directory. The attacker can also issue GET /blueprint-files to enumerate the target scope's file listing. Both actions succeed without api.users.write, allowing lateral file placement and reconnaissance across user scopes.

No verified exploit code is public. Refer to the GitHub Security Advisory GHSA-435x-66r2-jwv2 and the VulnCheck Advisory for technical details.

Detection Methods for CVE-2026-75832

Indicators of Compromise

  • Requests to POST /blueprint-upload or GET /blueprint-files where the target path resolves under a different user's scope than the key owner.
  • Unexpected image files appearing in user/accounts/<other-user>/ directories that do not match legitimate administrative activity.
  • API keys scoped to api.media.write generating traffic against users/<name> blueprint endpoints.

Detection Strategies

  • Correlate API key identifiers with the scope claims presented in each request and flag mismatches between key scope and endpoint category.
  • Baseline normal blueprint endpoint usage per API key and alert on new keys accessing users/<name> scopes.
  • Review web server logs for blueprint-upload and blueprint-files calls issued by non-super-admin operational workflows.

Monitoring Recommendations

  • Enable verbose audit logging on the Grav API plugin and forward events to a centralized log platform.
  • Monitor filesystem changes under user/accounts/ for writes originating from API-initiated processes.
  • Track creation and modification times of image files in per-user account directories against expected administrative changes.

How to Mitigate CVE-2026-75832

Immediate Actions Required

  • Upgrade getgrav/grav-plugin-api to version 1.0.15 or later, which corrects the scope check in BlueprintPathResolver::resolveUserScope().
  • Rotate all API keys minted on super-admin accounts, especially keys with narrow scopes such as api.media.write.
  • Audit user/accounts/ directories for unexpected image files placed by API activity.

Patch Information

The vulnerability is fixed in getgrav/grav-plugin-api version 1.0.15. Version 1.0.14 and earlier remain vulnerable. Consult the GitHub Security Advisory GHSA-435x-66r2-jwv2 for the corrected authorization logic and upgrade guidance.

Workarounds

  • Avoid minting API keys on super-admin accounts; provision dedicated non-super-admin accounts for automation.
  • Restrict network exposure of the Grav API plugin endpoints behind an authenticated reverse proxy while upgrading.
  • Temporarily disable the blueprint-upload and blueprint-files routes if upgrade cannot be applied immediately.

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.