Grav CMS before 2.0.16 Symlink Following via createLockFile
Grav CMS before 2.0.16 contains a symlink following vulnerability in Scheduler Job::createLockFile() that allows local attackers to overwrite arbitrary files by pre-creating symlinks at predictable lock file paths in the world-writable temp directory. Attackers can place a symlink at the predictable lock path pointing to any file the web server process can write to, and the next scheduled job run will follow the symlink and overwrite the target file's content with the job ID string.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-72696
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 4 Nov 2026, 19:32 UTC · Revision 1
Source evidence
Grav CMS before 2.0.16 Symlink Following via createLockFile
core-osv · Original sourcePublished 25 Aug 2026, 01:30 UTC
Grav CMS before 2.0.16 contains a symlink following vulnerability in Scheduler Job::createLockFile() that allows local attackers to overwrite arbitrary files by pre-creating symlinks at predictable lock file paths in the world-writable temp directory. Attackers can place a symlink at the predictable lock path pointing to any file the web server process can write to, and the next scheduled job run will follow the symlink and overwrite the target file's content with the job ID string.
osv:CVE-2026-72696
Complete source record
{
"id": "3915a175aaf289d5c38b5a3508b27c08bc762b84701a045ac8de9f710ea549e3",
"url": "https://osv.dev/vulnerability/CVE-2026-72696",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Grav CMS before 2.0.16 Symlink Following via createLockFile",
"summary": "Grav CMS before 2.0.16 contains a symlink following vulnerability in Scheduler Job::createLockFile() that allows local attackers to overwrite arbitrary files by pre-creating symlinks at predictable lock file paths in the world-writable temp directory. Attackers can place a symlink at the predictable lock path pointing to any file the web server process can write to, and the next scheduled job run will follow the symlink and overwrite the target file's content with the job ID string.",
"evidence": "osv:CVE-2026-72696",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-72696",
"aliases": [
"CVE-2026-72696",
"GHSA-q8w8-6cq5-j4h2"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/getgrav/grav",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "804731d7becab374a49dfb784435aa8cd6480547"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "2.0.16"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"introduced": "0"
},
{
"fixed": "2.0.16"
}
],
"source": "DESCRIPTION"
}
]
}
}
],
"versions": [
"2.0.15",
"2.0.14",
"2.0.13",
"2.0.12",
"2.0.11",
"2.0.10",
"2.0.9",
"2.0.8",
"2.0.7",
"2.0.6",
"2.0.5",
"2.0.4",
"2.0.3",
"2.0.2",
"2.0.1",
"1.7.53",
"1.7.52",
"1.7.51",
"1.7.39.1",
"1.7.39",
"1.7.38",
"1.7.37.1",
"1.7.37",
"1.7.36",
"1.7.35",
"1.7.34",
"1.7.33",
"1.7.32",
"1.7.31",
"1.7.30",
"1.7.29.1",
"1.7.29",
"1.7.28",
"1.7.27.1",
"1.7.27",
"1.7.26.1",
"1.7.26",
"1.7.25",
"1.7.24",
"1.7.23",
"1.7.22",
"1.7.21",
"1.7.20",
"1.7.19",
"1.7.18",
"1.7.17",
"1.7.16",
"1.7.15",
"1.7.14",
"1.7.13",
"1.7.12",
"1.7.10",
"1.7.9",
"1.7.8",
"1.7.7",
"1.7.6",
"1.7.5",
"1.7.4",
"1.7.3",
"1.7.1",
"1.7.0",
"1.7.0-rc.20",
"1.7.0-rc.19",
"1.7.0-rc.18",
"1.7.0-rc.17",
"1.7.0-rc.15",
"1.7.0-rc.14",
"1.7.0-rc.13",
"1.7.0-rc.12",
"1.7.0-rc.10",
"1.7.0-rc.9",
"1.7.0-rc.8",
"1.7.0-rc.7",
"1.7.0-rc.6",
"1.7.0-rc.5",
"1.7.0-rc.4",
"1.7.0-rc.3",
"1.7.0-rc.2",
"1.7.0-rc.1",
"1.7.0-beta.10",
"1.7.0-beta.9",
"1.7.0-beta.8",
"1.7.0-beta.7",
"1.7.0-beta.6",
"1.7.0-beta.5",
"1.7.0-beta.4",
"1.7.0-beta.3",
"1.7.0-beta.2",
"1.7.0-beta.1",
"1.6.0-rc.4",
"1.6.0-rc.3",
"1.6.0-rc.2",
"1.6.0-rc.1",
"1.6.0-beta.8",
"1.6.0-beta.7",
"1.6.0-beta.6",
"1.6.0-beta.5",
"1.6.0-beta.2",
"1.6.0-beta.1",
"1.5.0-rc.1",
"1.5.0-beta.2",
"1.5.0-beta.1",
"1.3.0-rc.5",
"1.3.0-rc.4",
"1.3.0-rc.3",
"1.3.0-rc.1",
"1.2.0-rc.3",
"1.2.0-rc.2",
"1.2.0-rc.1",
"1.1.9-rc.3",
"1.1.9-rc.2",
"1.1.9-rc.1",
"1.1.0-rc.3",
"1.1.0-rc.2",
"1.1.0-rc.1",
"1.1.0-beta.5",
"1.1.0-beta.4",
"1.1.0-beta.3",
"1.1.0-beta.2",
"1.1.0-beta.1",
"0.9.19",
"0.9.18",
"0.9.17",
"0.9.16",
"0.9.15",
"0.9.14",
"0.9.13",
"0.9.12",
"0.9.11",
"0.9.10",
"0.9.9",
"0.9.8",
"0.9.7",
"0.9.6",
"0.9.5",
"0.9.4",
"0.9.3",
"0.9.2",
"0.9.0",
"0.8.0"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72696.json"
}
}
],
"modified": "2026-10-28T02:30:38.954421841Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72696.json",
"https://github.com/getgrav/grav/security/advisories/GHSA-q8w8-6cq5-j4h2",
"https://nvd.nist.gov/vuln/detail/CVE-2026-72696",
"https://www.vulncheck.com/advisories/grav-cms-before-symlink-following-via-createlockfile"
],
"provider_metadata": {
"cwe_ids": [
"CWE-59"
],
"cna_assigner": "VulnCheck",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72696.json"
}
},
"related_cves": [
{
"value": "CVE-2026-72696",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 506208,
"published_at": "2026-08-25T01:30:14.848+00:00"
}