{"id":"CVE-2026-115938","summary":"Low privilege condition filter escapes Twig sandbox, recovers \"securityKey\" and reaches RCE","details":"Craft CMS allows any authenticated control panel user to submit an element-search condition whose element selector is evaluated as a sandboxed Twig object template. Craft’s allowed column filter delegates property lookup to Yii ArrayHelper, outside Twig’s SecurityPolicy. Repeated single-segment lookups therefore bypass the sandbox’s empty property/method allowlists.\n\n\n\nThe vulnerable condition value is ultimately cast to an integer. That does not protect the secret: the template can return author ID 1 when a guessed key character is correct and an impossible ID otherwise. The JSON endpoint returns entries for the first case and an empty array for the second, forming a stable remote character oracle.\n\n\n\nAfter recovering GeneralConfig::securityKey, the same user can compute Craft’s generic HMAC wire format offline. Signed parameters such as redirect are then accepted and passed to unsandboxed View::renderObjectTemplate(), where Twig’s string-callable form can invoke native PHP callables. The regression proof uses the harmless substr() callback and observes abcdef becoming cdef; it does not execute an OS command.","aliases":["GHSA-v4q3-2g5g-wjj6"],"modified":"2026-11-04T02:30:49.267796139Z","published":"2026-10-23T21:58:51.816Z","database_specific":{"cna_assigner":"Hackrate","cwe_ids":["CWE-1336"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115938.json"},"references":[{"type":"WEB","url":"https://packagist.org"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115938.json"},{"type":"ADVISORY","url":"https://github.com/craftcms/cms/releases/tag/5.11.2"},{"type":"ADVISORY","url":"https://github.com/craftcms/cms/security/advisories/GHSA-v4q3-2g5g-wjj6"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115938"},{"type":"ADVISORY","url":"https://www.hckrt.com/hacktivity/HCKRT-DRNL9W"},{"type":"PACKAGE","url":"https://github.com/craftcms/cms"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/craftcms/cms","events":[{"introduced":"f6a8fb685d44e387435825e3a96809eeda4973a6"},{"fixed":"a29fe6f87bbba6453e9d488ab8a8145a8a9e4f96"},{"introduced":"982efcd14d7e93a1a54f0905b61f242de6b53d8a"},{"fixed":"2ad6097618e4e7913f7f242d112a6e6e67cf2e8b"}],"database_specific":{"extracted_events":[{"source":"AFFECTED_FIELD","strategy":"StandardRange","range":[{"introduced":"5.0.0"},{"fixed":"5.11.2"}]},{"range":[{"introduced":"4.0.0"},{"fixed":"4.18.9"}],"source":"AFFECTED_FIELD","strategy":"StandardRange"},{"range":[{"fixed":"a29fe6f87bbba6453e9d488ab8a8145a8a9e4f96"}],"source":"REFERENCES_TAG","original_tag":"5.11.2"}]}}],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-115938.json"}}],"schema_version":"1.9.2","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"}]}