zoukankan      html  css  js  c++  java
  • 安全研究 | 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,最后会跟到 jenkinscoresrcmainjavahudsonPlugin.java 的 doDynamic 方法:

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

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

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

    最后到跟入 stapler-1.254-sources.jar!orgkohsukestaplerStapler.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 上被利用的可能性较小。以下为推荐的修复方案:

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

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

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

    ➢使用 Linux

    问答

    GitLab和Jenkins集成?

    相关阅读

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

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

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

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

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

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

  • 相关阅读:
    Leetcode 811. Subdomain Visit Count
    Leetcode 70. Climbing Stairs
    Leetcode 509. Fibonacci Number
    Leetcode 771. Jewels and Stones
    Leetcode 217. Contains Duplicate
    MYSQL安装第三步报错
    .net 开发WEB程序
    JDK版本问题
    打开ECLIPSE 报failed to load the jni shared library
    ANSI_NULLS SQL语句
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/9395045.html
Copyright © 2011-2022 走看看