专栏首页云鼎实验室的专栏安全研究 | Jenkins 任意文件读取漏洞分析

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

一、漏洞背景

漏洞编号:CVE-2018-1999002

漏洞等级:高危

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

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

二、漏洞分析

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

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

可以发现,Jenkins 在

 serve /plugin/SHORTNAME 这个 URL 的时候,

调用的是 StaplerResponse 的 serveLocalizedFile 方法处理静态文件的,继续跟入这个方法:

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

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

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

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

最后 URL 拼接的现场为:

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

三、利用方式

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

如果我们想获取 Jenkins 的凭证信息的话,需要以下几个文件:

· credentials.xml

· secrets/hudson.util.Secret

· secrets/master.key

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

当然,获取到的帐号密码是不能直接登录的,但是稍微修改一下用户名就可以成功的登录进去了:

四、修复方案

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

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

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

➢使用 Linux

针对此高危漏洞利用,腾讯云网站管家 WAF AI 引擎可检测并拦截,如果需要,请点击左下方【阅读原文】接入使用 ☟

本文分享自微信公众号 - 云鼎实验室(YunDingLab)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【黑客解析】黑客是如何实现数据库勒索的 ?

    前言 每一次重要通用漏洞的爆发总是会带来一片腥风血雨,任何微小的漏洞,基于43亿IPv4地址这个大基数,总是可以被放大! 从MongoDB开始到MySQL,黑客...

    云鼎实验室
  • Drupal SA-CORE-2019-003 远程命令执行分析

    2 月 20 日 Drupal 官方披露了一个 Drupal 的远程命令执行漏洞:

    云鼎实验室
  • 腾讯云上攻防战事(一)| 云上听风,不战而屈人之兵

    对于一场战争而言,情报战早在双方短兵相接之前就已经打响,谁能掌握更多、更精准的情报,往往就掌控了战场的主动权,有更大的把握赢得胜利,甚至能取得以弱胜强、以少胜...

    云鼎实验室
  • 3016: [Usaco2012 Nov]Clumsy Cows

    3016: [Usaco2012 Nov]Clumsy Cows Time Limit: 1 Sec  Memory Limit: 128 MB Submit:...

    HansBug
  • 微风2005一、主翼主要规格二、主要数据打造一台适合初学者使用的练习机「微风2005」锥形翼製作过程

    孙亖
  • 流量攻击已形成黑色产业链 江苏四人被提起公诉

    利用黑客软件扫描他人电脑,盗取最高管理权限后,非法控制85台计算机,利用这些计算机攻击他人网站,非法获利2万余元。近日,江苏省淮安市洪泽区检察院依法对涉嫌非法控...

    周俊辉
  • 邮件发送功能开发

    作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为“消息推送”的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下...

    郑小超.
  • Python开源项目介绍:用zmail简单地发邮件

    转载自:Python中文社区 ID:python-china 发送邮件是个很简单的需求,但是在实际的使用中依然碰到了很多坑,因此创建了zmail这个项目...

    小小科
  • 《一头扎进》系列之Python+Selenium框架实战篇8 - 年底升职加薪,年终奖就差最后这一步你知道不???

      到上一篇为止,测试报告已经完美的生成,但是你此时不要沾沾自喜,因为还差点意思,你才能升职加薪、拿年终奖。差点啥了???听宏哥给你慢慢道来。那就是把你生成的高...

    北京-宏哥
  • Python开源项目介绍:用zmail简单地发邮件

    发送邮件是个很简单的需求,但是在实际的使用中依然碰到了很多坑,因此创建了zmail这个项目,让你使用python发送邮件的过程尽可能简单。

    Python中文社区

扫码关注云+社区

领取腾讯云代金券