CVE-2026-44011 的 PoC:利用已认证用户实现 Craft CMS 远程代码执行。
仅限授权测试使用。
Craft CMS 安全公告 列出受影响版本为 >=4.0.0, <4.17.12 和 >=5.0.0, <5.9.18,并致谢发现者 precicom-vincent-tl。
python -m pip install -r requirements.txt
python cve-2026-44011.py -b 'https://example.com' -u '<username' -p '<password>' -c '<command>'
必需参数:
-b, --base-url:Craft URL,包含 http:// 或 https://。-u, --username:控制面板用户名。-p, --password:控制面板密码。-c, --command:要执行并捕获输出的命令。可选参数:
-P, --cp-path:控制面板路径(默认:/admin)。-s, --site-id:站点 ID(默认:1)。-e, --element-type:元素类型(默认:craft\elements\Category)。-f, --csrf-field:登录 CSRF 字段名(默认:CRAFT_CSRF_TOKEN)。-t, --timeout:请求和回调超时时间(秒)(默认:15)。-F, --force:当 Craft 版本不可用或不在公告范围内时继续执行。-H, --callback-host:目标可访问的地址(默认推断为本地地址;在通过跳板机时需覆盖)。--listen-port:监听端口(默认:由操作系统选择的空闲端口;设置固定端口以便转发)。在存在漏洞的搜索操作中,condition 从 POST 请求体传入对象创建过程,未经净化处理。
$conditionConfig = $this->request->getBodyParam('condition');
$condition = Craft::$app->getConditions()->createCondition($conditionConfig);
ElementCondition::setFieldLayouts() 根据每个提供的数组构造布局。
if (is_array($fieldLayout)) {
$fieldLayout['type'] = $this->elementType;
return $fieldsService->createLayout($fieldLayout);
}
公告中的 payload 附加了 Yii 的 AttributeTypecastBehavior,带有 as 键,并通过 on * 绑定事件。该行为通过 Yii 的可调用类型转换 到达 Psy\Readline\Hoa\ConsoleProcessus::execute。
condition.fieldLayouts[]
-> FieldLayout behavior + event
-> AttributeTypecastBehavior::typecastValue()
-> call_user_func()
-> ConsoleProcessus::execute()
修复后的控制器 在对象创建前对条件应用 Component::cleanseConfig()。
ConsoleProcessus::execute() 默认会转义 shell 元字符。PoC 提供一个临时脚本来运行 -c,在内置 HTTP 监听器上接收其输出,随后关闭监听器。如果目标无法访问推断的地址,请使用 -H。sh、curl 和 mktemp。python -m unittest discover -s tests -v。