Nuxeo认证绕过和RCE漏洞(CVE-2018-16341)分析

2018 年 12 月 26 日 FreeBuf

简介

Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS)。

nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页面上,而错误页面会当成模板被解析,文件名包含表达式也会被输出同时被解析执行,从而导致远程代码执行漏洞。

在漏洞挖掘过程中发现nuxeo-jsf组件默认在10.2没有安装,历史版本是默认就安装的。可以通过nuxeoctl mp-install nuxeo-jsf-ui 命令安装。

本文介绍的两个漏洞由笔者发现并提交给官方,CVE编号为:CVE-2018-16341。

有趣的是在官方10.3版本的发布日志中并没有提及该漏洞(CVE-2018-16341),但实际已被修复。


影响范围

Nuxeo Server版本 < 10.3


漏洞复现

通过在官网下载Nuxeo 10.2的安装包在本地安装,使用默认密码登陆Administrator/Administrator。

在登陆状态下访问test${11*11}.xhtml,可以看到表达式被执行

执行系统命令

Nuxeo 是构建在Seam Framework之上的, Seam是由Jboss开发的Web应用程序框架,在前几年比较流行,但依然有很多应用程序使用了Seam。
当用EL来执行任意系统命令时,Seam内部对EL的解析有一定的防护,用下面的Payload可绕过。

${"".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc",null).toString()}


认证绕过

在不登陆的情况下,是无法访问facelet模板的,如果需要登陆才能命令执行,漏洞略显得有点鸡肋。发现可以通过
login.jsp/%24%7b%31%31%2a%31%31%7d.xhtml 绕过访问。

认证绕过分析

通过查看web.xml配置文件,开发者为*.xhtml资源注册了名为NuxeoAuthenticationFilter的过滤器和Faces Servlet。凭借经验认证工作应该在filter处理。
通过调试发现,在NuxeoAuthenticationFilter类中的bypassAuth方法中有相关逻辑

进入到该方法中,unAuthenticatedURLPrefix是一个列表,值为[“login.jsp”,”webservices/”] ,requestPag 只要以 unAuthenticatedURLPrefix 数组中的字符串开头就不会验证用户身份。

根据注册的Faces Servlet规则”*.html”, login.jsp/test.xhtml 肯定是匹配的,如果要对资源进行访问控制肯定要先进入到访问控制逻辑中的,但是访问控制逻辑中只是通过startsWith方法来比较的,肯定也是符合的,所以login.jsp/test.xhtml这个路径可以绕过NuxeoAuthenticationFilter认证控制进入到Faces Servlet(模版相关)中。

可能会问,那我使用/webservices/xx.xhtml是不是也可以绕过呢?答案是不可以。对/webservices/*资源注册了另一个Servlet,一个请求只能被一个Servlet处理,这个注册方式优先级更高。


RCE分析

先来一张案发现场的图,is变量含有用户可控的内容进入到了parse方法中。

src的handler为NuxeoNotFoundResourceHandler,看下实现

getInputStream中的错误信息中包含表达式,也会进入parse方法中执行, 即请求的路径不存在时将会把路径当成源内容返回给调用者,这里就会进入到模版的parse方法中,然后就被解析执行了。


补丁分析

https://github.com/nuxeo/nuxeo/commit/eb54a9145c6d8297eba9d7dafc74556e735fa388#diff-cf2094833ef0eea473d03bf6559f1798R97

这是通过过滤的方式修复的,在getInputStream中,只有当路径中不包含”#”和”$”时才会把路径输出到输入流中,这样就无法执行EL了。


参考链接

https://doc.nuxeo.com/nxdoc/nuxeo-jsf-ui/
http://blog.orange.tw/2018/08/how-i-chained-4-bugs-features-into-rce-on-amazon.html
https://github.com/nuxeo/nuxeo

作者:斗象能力中心 TCC – 星光

登录查看更多
0

相关内容

可扩展HTML(eXtensible HTML)
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【论文】欺骗学习(Learning by Cheating)
专知会员服务
26+阅读 · 2020年1月3日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
116+阅读 · 2019年12月31日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
ExBert — 可视化分析Transformer学到的表示
专知会员服务
30+阅读 · 2019年10月16日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
漏洞预警丨Xstream远程代码执行漏洞
FreeBuf
4+阅读 · 2019年7月25日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Tensor Flow、Caffe、Torch共同之处:敞开的漏洞!
【宁波站】网络爬虫与文本挖掘
数萃大数据
4+阅读 · 2017年7月19日
Arxiv
7+阅读 · 2018年11月27日
Arxiv
6+阅读 · 2018年3月19日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关资讯
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
漏洞预警丨Xstream远程代码执行漏洞
FreeBuf
4+阅读 · 2019年7月25日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Tensor Flow、Caffe、Torch共同之处:敞开的漏洞!
【宁波站】网络爬虫与文本挖掘
数萃大数据
4+阅读 · 2017年7月19日
Top
微信扫码咨询专知VIP会员