Jenkins 任意文件读取漏洞

Jenkins通过stapler处理请求,所以从web.xml开始,从doDynamic 方法到serveLocalizedFile 方法到request.getLocale() ,Jetty 在获取 Locale 的时候直接从 HTTP Headers 里取出 Accept-Language 头,用 - 分割后返回了一个 Locale 对象。也就是我传入Accept-Language: ../../../aaaa-bbbbbb 时,那么我将会得到一个 Locale("../../../aaaa", "BBBBBB")对象。

Jenkins 任意文件读取漏洞_第1张图片

Jenkins 任意文件读取漏洞_第2张图片Stapler 首先将后缀名单独取出,接着将 Jenkins 目录和传入的 locale 的 language 以及后缀名拼接,然后打开这个路径。那么攻击者只需要构造出如下 HTTP 请求即可造成文件读取:

Jenkins 任意文件读取漏洞_第3张图片

在 Windows 下,不存在的目录可以通过 ../ 遍历过去的,而对于 Linux 则不行。那么这个漏洞在 Windows 下是可以任意文件读取的,而在 Linux 下则需要在 Jenkins plugins 目录下存在一个名字中存在 _ 的目录才可以。

你可能感兴趣的:(安全漏洞研究)