GHSA-265m-7826-wjqm: Craft CMS: Authenticated RCE via `condition.config` JSON cleanse bypass
Craft CMS has an authenticated remote code execution issue in the control panel element-search condition handling.
Craft cleans the outer request-controlled condition array with Component::cleanseConfig(), but Conditions::createCondition() later decodes and merges the JSON string in condition.config without re-running cleanseConfig() on the decoded/merged configuration.
Because condition.config is a JSON string during the first cleanse, Yii special config keys such as as … and on … can be hidden inside it. After JSON decoding, those keys reach FieldLayout object creation and are interpreted by Yii as behavior/event configuration.
The RCE is semi-blind: the trigger endpoint returns a normal JSON response, and the command output is verified via a server-side file-write side effect retrieved in a subsequent request.
References
- github.com/advisories/GHSA-265m-7826-wjqm
- github.com/craftcms/cms/commit/353b5d676c88a854c9f6409ad83b837ca0c0e8da
- github.com/craftcms/cms/commit/789789dc9e2a4e2f2562f51aaf879fb7757d8340
- github.com/craftcms/cms/releases/tag/4.18.2
- github.com/craftcms/cms/releases/tag/5.10.6
- github.com/craftcms/cms/security/advisories/GHSA-265m-7826-wjqm
Code Behaviors & Features
Detect and mitigate GHSA-265m-7826-wjqm with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →