JETTY简介:
Jetty作为Eclipse基金会的一部分,是一个纯粹的基于Java的网页服务器和Java Servlet容器,其支持最新的Java Servlet API,同时支持WebSocket,SPDY,HTTP/2协议。
一、CVE-2021-28164 [34429] 敏感信息泄露
1、漏洞简介:
在Jetty9.4.37版本中,为了符合RFC3986中的规范,选择性地支持可能有歧义解释的URI,默认模式允许URL编码,简单看下RFC3986(替代RFC2396)的规定
其大致意思是:.
和..
称为点段,都是为路径名层次结构中的相对引用而定义的,它们在一些操作系统文件目录结构中分别代表当前目录和父目录。但是与文件系统不同的是,这些点段仅在 URI 路径中解释层次结构,并作为解析过程的一部分被删除。也就是说在解析URI路径时,需要先处理.
和..
,Jetty为了符合这种处理方式,却导致了一系列的漏洞产生,首先是在9.4.39版本中修复了CVE-2021-28164,然后出现了新的绕过,其又在9.4.43版本中修复了CVE-2021-34429。
2、漏洞利用
1)CVE-2021-28164漏洞利用
- 访问docker搭建的漏洞环境(8080端口),是一个简单的初始化页面。直接访问/WEB-INF/web.xml 会响应一个404d 页面。
- 执行攻击payload读取web.xml。payload:
/%2e/WEB-INF/web.xml
2)CVE-2021-34429 修复绕过
基本绕过原理:
可以使用一些编码字符来制作URI,以访问WEB-INF目录的内容和/或绕过一些安全限制。默认合规模式允许带有包含 %u002e 段的 URI 的请求访问WEB-INF目录中的受保护资源。
例如,/%u002e/WEB-INF/web.xml可以检索 web.xml 文件的请求。这可能会泄露有关 Web 应用程序实现的敏感信息。同样,编码的空字符可能会阻止正确的规范化,因此/.%00/WEB-INF/web.xml也会检索 web.xml 文件。
复现过程:
- 照常访问/WEB-INF/web.xml,响应404.
- 使用%u002e绕过:
- 使用空字符绕过:
二、CVE-2021-28169
1、漏洞简介:
在9.4.40, 10.0.2, 11.0.2版本前,Jetty Servlets中的ConcatServlet
、WelcomeFilter
类存在多重解码问题,如果开发者主动使用了这两个类,攻击者可以利用其访问WEB-INF目录下的敏感文件,造成配置文件及代码泄露。
影响版本:
- jetty 9.4.40
- jetty 10.0.2
- jetty 11.0.2
2、漏洞复现
- 访问8080端口,是一个初始的example页面,尝该页面使用到了
ConcatServlet
来优化静态文件的加载,<link rel="stylesheet" href="/static?/css/base.css&/css/app.css">
- 正常通过
/static?/WEB-INF/web.xml
无法访问到敏感文件web.xml. - 对字母“W"进行双重URL编码,即可绕过限制进行访问: