安全研究 | Jenkins 任意文件读取漏洞分析

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~java

本文由云鼎实验室 发表于云+社区专栏web

1、漏洞背景安全

漏洞编号:CVE-2018-1999002服务器

漏洞等级:高危微信

Jenkins 7 月 18 日的安全通告修复了多个漏洞,其中 SECURITY-914 是由 Orange (博客连接:blog.orange.tw/)挖出的 Jenkins 未受权任意文件读取漏洞。框架

**腾讯安全云鼎实验室安全研究人员对该漏洞进行分析发现,**利用这个漏洞,攻击者能够读取 Windows 服务器上的任意文件,对于 Linux,在特定条件下也能够进行文件读取。利用文件读取漏洞,攻击者能够获取到 Jenkins 的凭证信息,从而形成敏感信息泄露。另外,在不少时候,Jenkins 的部分凭证和其内用户的账号密码相同,获取到凭证信息后也能够直接登陆 Jenkins 进行命令执行操做等。eclipse

2、漏洞分析网站

Jenkins 在处理请求的时候是经过 Stapler 进行处理的,Stapler 是一个 Java Web 框架。查看 web.xml 可知,Stapler 拦截了全部请求:ui

img

单步跟入 hudson.util.PluginServletFilter,最后会跟到 jenkins\core\src\main\java\hudson\Plugin.java 的 doDynamic 方法:3d

img

能够发现,Jenkins 在 serve /plugin/SHORTNAME 这个 URL 的时候,调用的是 StaplerResponse 的 serveLocalizedFile 方法处理静态文件的,继续跟入这个方法:

img

其中 request.getLocale() 是 jetty-server-9.4.5.v20170502-sources.jar!\org\eclipse\jetty\server\Request.java 内的,其实现为:

img

很是明显,Jetty 在获取 Locale 的时候直接从 HTTP Headers 里取出 Accept-Language 头,用 - 分割后返回了一个 Locale 对象。也就是我传入Accept-Language: ../../../aaaa-bbbbbb 时,那么我将会获得一个 Locale("../../../aaaa", "BBBBBB")对象。

最后到跟入 stapler-1.254-sources.jar!\org\kohsuke\stapler\Stapler.java:

img

咱们能够发现,Stapler 首先将后缀名单独取出,接着将 Jenkins 目录和传入的 locale 的 language 以及后缀名拼接,而后打开这个路径。那么攻击者只须要构造出以下 HTTP 请求便可形成文件读取:

img

最后 URL 拼接的现场为:

img

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

img

3、利用方式

通常来讲,文件读取漏洞很难转化为命令执行,对于 Jenkins 也是如此。不过 Jenkins 有一个 Credentials 模块,这个模块储存了 Jenkins 的一些凭证信息,不少时候,其凭证的账号密码是和 Jenkins 的账号密码相同的。不管如何,在成功利用文件读取漏洞后,都要将凭证信息读取并解密,以收集更多的信息。

若是咱们想获取 Jenkins 的凭证信息的话,须要如下几个文件:

· credentials.xml

· secrets/hudson.util.Secret

· secrets/master.key

很幸运的是这几个文件咱们均可以利用文件读取漏洞读取出来。在 Shodan 上尝试获取国外 real world 的 Jenkins 的账号密码:

img

固然,获取到的账号密码是不能直接登陆的,可是稍微修改一下用户名就能够成功的登陆进去了:

img

4、修复方案

虽然这个漏洞危害较大,可是没必要太过担忧,由于默认安装 Jenkins 的时候匿名用户是没有可读权限的。而且此漏洞在 Linux 上被利用的可能性较小。如下为推荐的修复方案:

➢针对此高危漏洞利用,腾讯云网站管家 WAF AI 引擎可检测并拦截,若是须要,可在腾讯云官网进一步了解

➢在全局安全配置中将匿名用户的可读权限去掉

img

➢升级到最新版本的 Jenkins(2.121.2)

➢使用 Linux

问答

GitLab和Jenkins集成?

相关阅读

安全报告 | 2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫

安全报告 | SSH 暴力破解趋势:从云平台向物联网设备迁移

给你的CVM安装一个面板吧!

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1165414?fromSource=waitui

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区

相关文章
相关标签/搜索