安全研究 | 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 上被利用的可能性较小。以下为推荐的修复方案:
?针对此高危漏洞利用,腾讯云网站管家 WAF AI 引擎可检测并拦截,如果需要,可在腾讯云官网进一步了解
?在全局安全配置中将匿名用户的可读权限去掉
?升级到最新版本的 Jenkins(2.121.2)
?使用 Linux
问答
GitLab和Jenkins集成?
相关阅读
安全报告 | 2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫
安全报告 | SSH 暴力破解趋势:从云平台向物联网设备迁移
给你的CVM安装一个面板吧!
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1165414?fromSource=waitui
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!
转载请注明出处:http://www.hrtxgs.com/article/20230507/521282.html
随机推荐
-
【安全测试-fortify源码扫描】如何集成jenkins自动执行源码扫描
一,效果如下 点击选择文件,上传需要扫描的code压缩包 点击开始构建,开始源码扫描 二、如何取测试报告 工作空间 只保留最新一次的报告(同时,此处做了备份处理,在execute shell中将每次的报告都备份一份到工程目录下的rep...
-
安全脚本程序的编写 V1.0第1/3页
基本思路: 为每一个功能写一个独立的程序,程序页 尽可能少的让客户了解你的服务器端信息 不要用"客户应该这么写"这个思路想问题 尽可能多的想到不可能发生的事情 1.关于交互式动态网页可能存在的问题 1.1form类型的交互 1.1.1概念...
-
安全浏览网页 巧妙防范网页木马侵扰设置方法
教大家防木马的办法,只针对网页木马,有效率90%以上。可以防止90%以上木马在你的机器上被执行,甚至杀毒软件发现不了的木马都可以禁止执行,先说一下原理。 现在网页木马无非有以下几种方式中到你的机器里: 1、把木马文件改成BMP文件,然后配...
-
安全通信协议SSH应用与分析
实验步骤一: 搭建Telnet服务器 server上:打开运行,输入elntsvr/service,启动Telnet服务程序,再次打开运行,输入service.msc,打开服务管理程序。 找到Telnet服务,,然会更改启动类型为自动...
-
【安全测试】Owasp Dependency-check 集成jenkins
一、目的 本文主要记录我在搭建安全体系中第三方依赖检查的过程中,使用Owsap dependency-check的过程及问题 二、OWASP Dependency-check简介 dependency-check适用于对代码中使用到的第三...
-
php 应用程序安全防范技术研究
PHP安全防范程序模型 复制代码 代码如下: /* PHP防注入跨站V1.0 在您的页面顶部添加: require(“menzhi_injection.php”); 即可实现通用防止SQL注入,以及XSS跨站漏洞。 ###...
-
【安全测试】SQLmap的使用及jenkins集成
一、目的 本文主要介绍如何用sqlmap来测试某个接口是否有sql注入的风险,以及查看对应的注入的payload。 sqlmap支持-u指定接口的url信息,也支持-r 来解析文件中的请求信息。本文主要介绍-r的方式。 其他的sqlmap...
-
安全平台无法正常运行!微软新更新导致Windows Server系统出现严重故障
安全平台无法正常运行!微软新更新导致Windows Server系统出现严重故障,此前,微软为Windows Server 2022系统推送了编号为KB5007205的更新补丁,该补丁将修复此前出现在一些高分辨率屏幕上的缩放错误问题。但近...
-
安全技术—RSA公钥密码体制安全性分析
引言 RSA密码系统是较早提出的一种公开钥密码系统。1978年,美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出了基于数论的非对称(公开钥)密码体制,称为RSA...
-
安全清除你:C盘垃圾,让你多出近2G的空间!正文分析错误
$False$