Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)
简介
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
https://blog.riskivy.com/nuxeo-rce-analysis-cve-2018-16341/
Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)的更多相关文章
- Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)
0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...
- Sunlogin RCE漏洞分析和使用
介绍 前两天网上曝出了关于向日葵远控工具(Sunlogin)Windows个人版的RCE漏洞POC.因为利用简单并且网上出现了公开的自动化扫描脚本,所以测试的人很多,也出现了一些真实攻击.漏洞的问 ...
- 向日葵远程RCE漏洞分析及漏洞利用脚本编写
0x00 漏洞概述 向日葵是一款免费的,集远程控制电脑.手机.远程桌面连接.远程开机.远程管理.支持内网穿透等功能的一体化远程控制管理软件.如果想要手机远控电脑,或者电脑远控手机可以利用向日葵:如果是 ...
- Joomla 3.0.0 - 3.4.6 RCE漏洞分析记录
0x00 前言 今天早上看到了国内几家安全媒体发了Joomla RCE漏洞的预警,漏洞利用的EXP也在Github公开了.我大致看了一眼描述,觉得是个挺有意思的漏洞,因此有了这篇分析的文章,其实这个 ...
- Spring Core rce漏洞分析(CVE-2022-22965)
漏洞描述: Springmvc框架参数绑定功能,绑定了请求里的参数造成变量注入,攻击者可以实现任意文件写入,漏洞点spring-beans包中. 漏洞编号: CVE-2022-22965 影响范围: ...
- Struts2-057/CVE-2018-11776两个版本RCE漏洞分析(含EXP)
0x01 前言 2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Sem ...
- Struts S2-048 RCE漏洞分析
应该是S2-048目前最详细的一篇了.. 漏洞影响 Struts 2.3.x系列中的Showcase应用 使用了struts1 插件,并在使用ActionMessages时将客户端可控的参数拼接传递给 ...
- CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析
0x01 Apache Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 0x02 漏洞简介 2021年2月1日,Apache Shiro官 ...
- Libssh认证绕过CVE-2018-10933漏洞复现
0x00 漏洞描述 libssh 0.6 及以上的版本,在服务端的代码实现中存在身份认证绕过漏洞.在向服务端认证的流程中,攻击者通过将 SSH2_MSG_USERAUTH_REQUEST 消息替换为 ...
随机推荐
- div中嵌套div水平居中,垂直居中
方法一: div(父):display:table; div(子):display:table_cell;margin:0 auto;vertical-align:middle; 方法二: div(父 ...
- Apache服务器的安装与配置
文档:http://httpd.apache.org/docs/2.4/ 指令:http://httpd.apache.org/docs/2.4/mod/core.html 一.配置文件 语法 * 主 ...
- redis cluster应用连接(password)
application.properties 集群配置 application.properties #各Redis节点信息spring.redis.cluster.nodes=47.96.*.*:6 ...
- python+requests实现接口测试 - cookies的使用 (转载)
出自:https://www.cnblogs.com/nizhihong/p/6699492.html 在很多时候,发送请求后,服务端会对发送请求方进行身份识别,如果请求中缺少识别信息或存在错误的识别 ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
- AI1.1-人工智能史
来自:http://zh.wikipedia.org/wiki/人工智能史#CITEREFBerlinski2000 这篇是来自维基百科上面的人工智能史,将其大部分保留(真的是大部分,所以差不多没有原 ...
- 【转】MySQL执行计划分析
原文:http://www.cnblogs.com/wangyanhong/archive/2013/09/18/3327919.html 一.语法explain <sql语句>例如: e ...
- gdb中信号
信号(Signals) 信号是一种软中断,是一种处理异步事件的方法.一般来说,操作系统都支持许多信号.尤其是UNIX,比较重要应用程序一般都会处理信号.UNIX定义了许 多信号,比如SIGINT表示中 ...
- 保存网格(mesh)到磁盘上
Unity提供了很方便的工具来保存mesh之类的,下面的代码挂在GameObject上后,按下F键能把mesh(该GameObject必须有mesh组件)保存到磁盘的Assets目录下.在磁盘上是.a ...
- go语言之行--golang核武器goroutine调度原理、channel详解
一.goroutine简介 goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心.goroutine使用方式非常的简单,只需使用go关键字 ...