{"id":"CVE-2026-112779","kind":"vulnerability","aliases":["CVE-2026-112779"],"related":[],"title":"Grav API plugin: unauthenticated requests exhaust disk and bypass page rules","description":"Grav API plugin (grav-plugin-api) 1.0.40 before 1.0.42 caches a full translation dictionary for every well-formed language code sent to the unauthenticated GET /api/v1/translations/{lang} endpoint, and 1.0.16 before 1.0.42 fails to check target and destination page rules in the sync and batch copy endpoints. Unauthenticated attackers can send small requests that each store about 560 KB to exhaust disk or APCu, while accounts with api.pages.write can overwrite translations or create pages that page-level rules deny.","summary":"The Grav API plugin caches a full translation dictionary for every language code sent to an unauthenticated endpoint, so small requests can fill disk or APCu memory. Accounts with page-write permission can also copy or overwrite pages that page-level rules should deny.","severity":"medium","cvss":9.8,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"grav-plugin-api","fixed":["1.0.42"],"affected":">= 1.0.16, < 1.0.42","ecosystem":"composer"}],"ecosystems":[],"tags":["api-plugin","grav","grav-plugin-api","package","php","self-hosted"],"not_affected_if":["api-plugin-disabled","api-plugin-not-installed","plugin-version-outside-range"],"how_to_check":"Check whether the API plugin is installed and enabled: user/plugins/api/blueprints.yaml (version field), 'bin/gpm index' or Admin > Plugins. Affected: 1.0.40-1.0.41 (anonymous translations cache, GET /api/v1/translations/{lang}); 1.0.16-1.0.41 (sync and batch copy skip page rules, needs api.pages.write). Look for unusually large cache/ directory growth or many /api/v1/translations/<odd-code> requests in access logs.","fix":"Upgrade grav-plugin-api to 1.0.42 (e.g. bin/gpm update api). If you cannot update, disable the API plugin or block unauthenticated access to /api/v1/translations/ at the web server (inference, not stated by the vendor).","status":"resolved","published_at":"2026-10-19T20:17:55+00:00","first_seen_at":"2026-10-23T21:57:19+00:00","triaged_at":"2026-10-23T22:39:55+00:00","updated_at":"2026-10-23T23:24:23+00:00","category":"package","confidence":0.9,"triage":{"at":"2026-10-23T22:39:55Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade grav-plugin-api to 1.0.42 or later.","reach":"internet","title":"Grav API plugin: unauthenticated requests exhaust disk and bypass page rules","impact":"medium","summary":"The Grav API plugin caches a full translation dictionary for every language code sent to an unauthenticated endpoint, so small requests can fill disk or APCu memory. Accounts with page-write permission can also copy or overwrite pages that page-level rules should deny.","category":"package","who_cares":["grav","php","self-hosted"],"confidence":0.8,"needs_auth":"no","worst_case":"Anonymous visitors can exhaust server disk and memory; writers can overwrite restricted pages.","analyst_note":"","how_to_check":"Check the installed version of grav-plugin-api in the Grav plugins directory or the plugin list in the admin panel; versions 1.0.40 through 1.0.41 are affected by the cache flaw, and 1.0.16 through 1.0.41 by the copy flaw.","needs_analyst":false,"not_affected_if":["plugin-version-outside-range"],"user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"critical"},"cost_usd":0.000513,"input_tokens":3022,"output_tokens":422,"severity_before":"critical"},"analyst_status":"done","analyst_note":"Confirm which installs have the API plugin enabled and whether the sources list a plugin config or file path to check the installed version; NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-112779 is the only source.","search":"'-112779':14A,17A '-2026':13A,16A '/api/v1/translations':108C '1.0.16':112C '1.0.40':88C '1.0.42':90C,114C '560':140C 'account':62B,148C 'also':69B 'apcu':60B,146C 'api':2A,21A,23B,29B,37B,82C,87C 'api-plugin':22B 'api.pages.write':150C 'attack':131C 'batch':127C 'bypass':9A 'cach':39B,91C 'check':117C 'code':47B,102C 'copi':70B,128C 'creat':155C 'cve':12A,15A 'deni':80B,162C 'destin':120C 'dictionari':43B,95C 'disk':7A,58B,144C 'endpoint':52B,110C,129C 'everi':45B,97C 'exhaust':6A,143C 'fail':115C 'fill':57B 'form':100C 'full':41B,93C 'get':107C 'grav':1A,19A,25B,27B,36B,81C,85C 'grav-plugin-api':18A,26B,84C 'host':34B 'kb':141C 'lang':109C 'languag':46B,101C 'level':77B,160C 'memori':61B 'overwrit':72B,152C 'packag':30B 'page':10A,65B,73B,76B,121C,156C,159C 'page-level':75B,158C 'page-writ':64B 'permiss':67B 'php':31B 'plugin':3A,20A,24B,28B,38B,83C,86C 'request':5A,55B,135C 'rule':11A,78B,122C,161C 'self':33B 'self-host':32B 'send':133C 'sent':48B,103C 'small':54B,134C 'store':138C 'sync':125C 'target':118C 'translat':42B,94C,153C 'unauthent':4A,51B,106C,130C 'well':99C 'well-form':98C 'write':66B","nicknames":[],"mitigations":[],"who_affected":null,"tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-19T20:17:55+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112779","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112779","severity":null,"published_at":"2026-10-19T20:17:55+00:00","modified_at":"2026-10-20T15:17:14+00:00","first_seen_at":"2026-10-23T21:57:19+00:00","fetched_at":"2026-10-23T22:28:57+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-112779:435","url":null,"severity":null,"published_at":"2026-10-23T23:24:23+00:00","modified_at":"2026-10-23T23:24:23+00:00","first_seen_at":"2026-10-23T23:24:23+00:00","fetched_at":"2026-10-23T23:24:23+00:00","note":"Read vendor GHSA-8pcm-97fc-4xwh (published Oct 4, no CVE listed there): fixed in 1.0.42, reported by @ma4ter. Vendor rates Moderate; VulnCheck CNA scores CVSS 4.0 9.3 (availability/unauth DoS plus authenticated rule bypass), so I lowered severity from critical to medium per the vendor's rating; reasonable to treat as high if the site is public. No exploitation or PoC found, no X conversation (count 0)."}],"documents":[{"id":1938,"url":"https://github.com/getgrav/grav/security/advisories/GHSA-8pcm-97fc-4xwh","title":"GHSA-8pcm-97fc-4xwh: Grav API plugin translation cache and page rules","kind":"advisory","source":"analyst","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":null},{"id":1939,"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112779","title":"NVD CVE-2026-112779","kind":"other","source":"analyst","text":null,"published_at":null,"relation":"mentions","confidence":null,"note":null}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}