Jenkins任意文件读取CVE-2018-1999002漏洞的示例分析
这篇文章主要介绍了Jenkins任意文件读取CVE-2018-1999002漏洞的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一、 漏洞背景
Jenkins官方发布最新安全通告,披露多个安全漏洞。其中,SECURITY-914是由Orange发现的Jenkins未授权任意文件读取漏洞,存在高危风险。
利用该漏洞,攻击者可以读取Windows系统服务器中的任意文件,且在特定而条件下也可以读取Linux系统服务器中的文件。通过利用该文件读取漏洞,攻击者可以获取Jenkins系统的凭证信息,导致用户的敏感信息遭到泄露。同时,Jenkins的部分凭证可能与其用户的帐号密码相同,攻击者获取到凭证信息后甚至可以直接登录Jenkins系统进行命令执行操作等。
二、 漏洞概要
谁应该读这个 | 使用Jenkins的开发者和用户 |
---|---|
漏洞的影响 | 在Jenkins的Stapler Web框架中存在任意文件读取漏洞。恶意攻击者可以通过发送精心构造的HTTP请求在未经授权的情况下获取Jenkin主进程可以访问的Jenkins文件系统中的任意文件内容。 |
危害程度 | 高危 |
建议 | · 将您的Jenkins weekly升级至2.133版本。 · 将您的Jenkins LTS升级至2.121.2版本。 |
受影响的软件 | · Jenkins weekly 2.132 及此前所有版本 · Jenkins LTS 2.121.1 及此前所有版本 |
CVE 标识符 | CVE-2018-1999002 |
三、 搭建环境
安装漏洞影响范围内的Jenkins版本: Jenkins weekly 2.132及此前所有版本Jenkins LTS 2.121.1及此前所有版本,此处使用的是Jenkins LTS 2.121.1。
首先把jenkins的war包下载后放在tomcat webapps目录下,启动后自动解压war包或安装msi版本,或使用git从GitHub下载war包。
启动tomcat,访问http://localhost:8080,如果8080默认端口被占用,则可以在Jenkins安装路径下的Jenkins.xml文件中修改端口后访问。打开页面后需要解锁jenkins。在安装目录下找到initialAdminPassword文件复制密码输入到password输入框,点击continue即可进行下一步操作。
安装插件后使用管理员进行登录,环境搭建完成。
四、 触发条件
1. 进行全局安全配置,开启匿名具有可读权限。
五、 漏洞分析
doDynamic这里用来处理请求中的包含的路径,比如/plugin/xxxx。
跟入request.getLocale(),跳至Request.java
getLocale()处理Http中的Accept-Language,根据-分为language和country,language为zh,country为cn,然后return Locale(language,country),如果不存在-,language即可使用../遍历,这时返回的结果即为Locale(language,"")。
再看Stapler.java中的LocaleDrivenResourceSelector类的open方法,从注释来看,这段代码本身根据Accept-Language来返回不同文件,比如请求为/plugin/credentials/.ini,payload为_../../../../../../../../../../../windows/win,在linux下需要plugin下存在-名称目录可利用,但win下直接可以通过路径穿越绕过,达到任意文件读取效果。
六、 修复建议
1. 将您的Jenkins weekly升级至2.133版本,将您的Jenkins LTS升级至2.121.2版本。
2.如果您暂时不希望通过升级Jenkins版本解决该漏洞,建议您使用Web应用防火墙的精准访问控制功能对您的业务进行防护。
通过精准访问控制功能,针对Accept-Language这个HTTP请求头设置阻断规则过滤该请求头中包含 ../的请求,防止攻击者利用该漏洞通过目录穿越读取任意文件。
感谢你能够认真阅读完这篇文章,希望小编分享的"Jenkins任意文件读取CVE-2018-1999002漏洞的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!