Jetty Ambiguous Paths 信息泄露漏洞 (CVE-2021-28164/CVE-2021-34429)
1.实验目的
1、能成功搭建漏洞测试与测试工具所需的运行环境
2、能成功利用漏洞原理测试复现漏洞
2覆盖知识点
Jetty作为Eclipse基金会的一部分,是一个纯粹的基于Java的网页服务器和Java Servlet容器,其支持最新的Java Servlet API,同时支持WebSocket,SPDY,HTTP/2协议。在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,简单看下RFC3986(替代RFC2396)的规定。
影响版本
Jetty9.4.37-9.4.42、10.0.1-10.0.5、11.0.1-11.0.5
漏洞原理
在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,简单看下RFC3986(替代RFC2396)的规定。
在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,在RFC3986中规定.和..称为点段,这是为了路径名层次结构中的相对引用定义的,它们在一些操作系统文件目录中分别代表当前目录和父目录,但是在Jetty中这些点段仅在URL路径中解释层次结构,在解析过程中通过解析去除一部分,所以我们在解析URL路径的时候首先需要处理.和..。
3实验环境与操作
实验环境
1、VMware Workstation 16
2、Ubuntu 20.4(靶场安装环境)
IP:192.168.32.135
3、Vulhub靶场
4、Burp Suite
漏洞复现
(CVE-2021-28164)复现
环境搭建
启动Ubuntu靶机进入相应镜像的目录下拉取镜像环境
cd/vulhub/jetty/CVE-2021-28164
docker-compose up -d
启动完成后可以在外面访问web应用,是一个example网站。http://your:8080/
如果直接访问http://your:8080/WEB-INF/web.xml,我们是无法直接访问到的因为代码对于web.xml文件进行了访问限制。
但由于jetty为了去符合RFC3986规范,选择性去支持存在歧义的URL这就给我们攻击提供了方式。
我们通过burpsuite进行对于数据包的抓取
当我们构建payload:/.%00/WEB-INF/web.xml时它能够完成对于URL安全检测的绕过完成对于隐私数据的访问。
(CVE-2021-34429)复现
环境搭建
进入相应镜像的目录中
Cd/vulhub/jetty/CVE-2021-34429
启动docker
Docker-compose up -d
(ps:当我们想要同时启动这两个镜像的容器的时候因为它们两个的容器开启的端口相同会出现调试问题,我们可以把其中一个端口改成8888,参考how-to-debug-in-jetty-source-code)
开启成功后我们访问web应用,开启成功后还是以一个example网页呈现。http://yourip:端口/
使用9.4.37版本构造的payload是不能够对于web.xml文件安全检测的绕过的,因为它在修复漏洞时对于URL的检测防范了已有的漏洞。
构建另类的payload
Payload1:/%u002e/WEB-INF/web.xml
Payload2:/.%00/WEB-INF/web.xml
Paylpoad3:/a/b/..%00/WEB-INF/web.xml
上述payload对于CVE-2021-28164都是可以用的,因为CVE-2021-34429的payload都是对于CVE-2021-28164的绕过利用。
漏洞分析
总体分析过程参考先知社区博客Eclipse Jetty WEB-INF敏感信息泄露漏洞分析,可以知道在9.4.40版本中以payload1为例对于url的解析过程是
而在9.4.43的版本它直接是将二三步骤进行互换,即先解码再进行规范化,这对于当前构造的所有payload将不再适用。所以对于jetty来说在9.4.37版本中它按照RFC3986规范的标准解析出现了针对于这一现象的解析绕过漏洞,但是RFC3986规范是考虑到了前后端数据传输过程中对于歧义数据的认识标准,因为在前后端如果不对这种情况加以规范则会出现/%2e/a/b的前后端认知不一致的错误出现。
针对在前端解析url编码的问题所在,我们可以选择在安全校验中可以选择将二次规范化的步骤提前至第四步来,又或者说进行多步规范化处理,虽然会耗费更多的资源但是用来根本上解决一个标准解析的问题出现也是可以接受的。
总体思路来自于上述介绍的博客,博主详细描述了整个过程的流程和原理。
参考资料链接