craftcms/cms: Control panel only API response emulation replaces "securityKey" and reaches server RCE
What fixes it
- 4.18.9craftcms/cms, composerGitHub
composer require "craftcms/cms:^4.18.9" - 5.11.2craftcms/cms, composerGitHub
composer require "craftcms/cms:^5.11.2"
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
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.
Impact
A low-privileged control panel account can execute arbitrary operating system commands as the PHP worker.
Report ID: 1899
Text from GitHub Advisory Database
Affected versions 2
- craftcms/cms, composer>= 4.0.0, < 4.18.9GitHub
- craftcms/cms, composer>= 5.0.0, < 5.11.2GitHub