Skip to content
Heist/ feed
Back to feed
High

Grav API Plugin : API Key 'scopes' Never Enforced - Delegated Least-Privilege Keys Carry Full User ACL

Type: advisorySources: OSV

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 ApiKeyManager::generateKey() stores a declared scopes array, but ApiKeyAuthenticator::authenticate() does not read keyData[scopes] and returns the owning user's complete identity. AbstractApiController::requirePermission() consequently evaluates the full user ACL, so a key issued for a read-only scope can perform every write, delete, and administrative operation available to the owner. This issue is fixed in version 1.0.6.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-62231, CVE-2026-62667
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 04:32 UTC · Revision 1

Source evidence

Grav API Plugin : API Key 'scopes' Never Enforced - Delegated Least-Privilege Keys Carry Full User ACL

core-osv · Original source

Published 19 Aug 2026, 15:43 UTC

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 ApiKeyManager::generateKey() stores a declared scopes array, but ApiKeyAuthenticator::authenticate() does not read keyData[scopes] and returns the owning user's complete identity. AbstractApiController::requirePermission() consequently evaluates the full user ACL, so a key issued for a read-only scope can perform every write, delete, and administrative operation available to the owner. This issue is fixed in version 1.0.6.

osv:CVE-2026-62667
Complete source record
{
  "id": "aaa06573cdff8572721826ba68f077cee6653cef9dba3ab500a7fdf3609cb9ed",
  "url": "https://osv.dev/vulnerability/CVE-2026-62667",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Grav API Plugin : API Key 'scopes' Never Enforced - Delegated Least-Privilege Keys Carry Full User ACL",
    "summary": "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 ApiKeyManager::generateKey() stores a declared scopes array, but ApiKeyAuthenticator::authenticate() does not read keyData[scopes] and returns the owning user's complete identity. AbstractApiController::requirePermission() consequently evaluates the full user ACL, so a key issued for a read-only scope can perform every write, delete, and administrative operation available to the owner. This issue is fixed in version 1.0.6.",
    "evidence": "osv:CVE-2026-62667",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-62667",
      "aliases": [
        "CVE-2026-62231",
        "CVE-2026-62667",
        "GHSA-x7hm-jc32-v39j"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/getgrav/grav-plugin-api",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "fe5146a3efeb39d1f405499188e5270bc002b0a6"
                },
                {
                  "fixed": "dfcc947f0d6758772caac290c68fe8d4c4a4874e"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "1.0.6"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "dfcc947f0d6758772caac290c68fe8d4c4a4874e"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "fe5146a3efeb39d1f405499188e5270bc002b0a6"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "1.0.6"
                  }
                ]
              }
            }
          ],
          "versions": [
            "1.0.5",
            "1.0.4",
            "1.0.3",
            "1.0.2",
            "1.0.1",
            "1.0.0",
            "1.0.0-rc.16",
            "1.0.0-rc.15",
            "1.0.0-rc.14",
            "1.0.0-rc.13",
            "1.0.0-rc.12",
            "1.0.0-rc.11",
            "1.0.0-rc.10",
            "1.0.0-rc.9",
            "1.0.0-rc.8",
            "1.0.0-rc.7",
            "1.0.0-rc.6",
            "1.0.0-rc.5",
            "1.0.0-rc.4",
            "1.0.0-rc.3",
            "1.0.0-rc.2",
            "1.0.0-rc.1",
            "1.0.0-beta.17",
            "1.0.0-beta.16",
            "1.0.0-beta.15",
            "1.0.0-beta.14",
            "1.0.0-beta.13",
            "1.0.0-beta.12",
            "1.0.0-beta.11",
            "1.0.0-beta.10",
            "1.0.0-beta.9",
            "1.0.0-beta.8",
            "1.0.0-beta.7",
            "1.0.0-beta.6",
            "1.0.0-beta.5",
            "1.0.0-beta.4",
            "1.0.0-beta.3",
            "1.0.0-beta.2",
            "1.0.0-beta.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-62667.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:25.895519205Z",
      "provider": "osv",
      "references": [
        "https://github.com/getgrav/grav-plugin-api/releases/tag/1.0.6",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62667.json",
        "https://github.com/getgrav/grav/security/advisories/GHSA-x7hm-jc32-v39j",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-62667",
        "https://github.com/getgrav/grav-plugin-api/commit/dfcc947f0d6758772caac290c68fe8d4c4a4874e"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-862"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/62xxx/CVE-2026-62667.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-62231",
        "evidence": "/aliases"
      },
      {
        "value": "CVE-2026-62667",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 492461,
  "published_at": "2026-08-19T15:43:19.382+00:00"
}