Control panel only API response emulation replaces "securityKey" and reaches server RCE
The app/process-api-response-headers action accepts fake Craft API response headers from any authenticated control panel user. A non-admin user with only accessCp can place newline characters in X-Craft-Plugin-Licenses. Craft passes this value to its .env writer without removing the newlines. This lets the user insert a new attacker-known CRAFT_SECURITY_KEY into .env. After Craft loads that key, the user can forge a signed login redirect containing a Twig system() callback. This is different from the previous report. That report reads the existing key through a Twig sandbox bypass. This report replaces the key through fake API headers and CRLF injection. Fixing either source does not fix the other.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-115935
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 00:48 UTC · Revision 1
Source evidence
Control panel only API response emulation replaces "securityKey" and reaches server RCE
core-osv · Original sourcePublished 23 Oct 2026, 21:40 UTC
The app/process-api-response-headers action accepts fake Craft API response headers from any authenticated control panel user. A non-admin user with only accessCp can place newline characters in X-Craft-Plugin-Licenses. Craft passes this value to its .env writer without removing the newlines. This lets the user insert a new attacker-known CRAFT_SECURITY_KEY into .env. After Craft loads that key, the user can forge a signed login redirect containing a Twig system() callback. This is different from the previous report. That report reads the existing key through a Twig sandbox bypass. This report replaces the key through fake API headers and CRLF injection. Fixing either source does not fix the other.
osv:CVE-2026-115935
Complete source record
{
"id": "e424991af44fe9872d4419b0bb65167052da5fdd947f2b508104a2a6f0da4821",
"url": "https://osv.dev/vulnerability/CVE-2026-115935",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Control panel only API response emulation replaces \"securityKey\" and reaches server RCE",
"summary": "The app/process-api-response-headers action accepts fake Craft API response headers from any authenticated control panel user. A non-admin user with only accessCp can place newline characters in X-Craft-Plugin-Licenses. Craft passes this value to its .env writer without removing the newlines. This lets the user insert a new attacker-known CRAFT_SECURITY_KEY into .env. After Craft loads that key, the user can forge a signed login redirect containing a Twig system() callback. This is different from the previous report. That report reads the existing key through a Twig sandbox bypass. This report replaces the key through fake API headers and CRLF injection. Fixing either source does not fix the other.",
"evidence": "osv:CVE-2026-115935",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-115935",
"aliases": [
"CVE-2026-115935",
"GHSA-9hp6-3565-gvh5"
],
"metrics": [
{
"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"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/craftcms/cms",
"type": "GIT",
"events": [
{
"introduced": "f6a8fb685d44e387435825e3a96809eeda4973a6"
},
{
"fixed": "a29fe6f87bbba6453e9d488ab8a8145a8a9e4f96"
},
{
"introduced": "982efcd14d7e93a1a54f0905b61f242de6b53d8a"
},
{
"fixed": "2ad6097618e4e7913f7f242d112a6e6e67cf2e8b"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "5.0.0"
},
{
"fixed": "5.11.2"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"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-115935.json"
}
}
],
"modified": "2026-10-28T02:30:48.508357520Z",
"provider": "osv",
"references": [
"https://packagist.org",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115935.json",
"https://github.com/craftcms/cms/releases/tag/5.11.2",
"https://github.com/craftcms/cms/security/advisories/GHSA-9hp6-3565-gvh5",
"https://nvd.nist.gov/vuln/detail/CVE-2026-115935",
"https://www.hckrt.com/hacktivity/HCKRT-WM3VSE",
"https://github.com/craftcms/cms"
],
"provider_metadata": {
"cwe_ids": [
"CWE-94"
],
"cna_assigner": "Hackrate",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/115xxx/CVE-2026-115935.json"
}
},
"related_cves": [
{
"value": "CVE-2026-115935",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 516739,
"published_at": "2026-10-23T21:40:57.592+00:00"
}