Jenkins任意文件读取 (CVE-2018-1999002)漏洞分析
字数 1435 2025-08-18 11:38:45
Jenkins任意文件读取漏洞(CVE-2018-1999002)分析与防护指南
一、漏洞背景
Jenkins官方发布的安全通告披露了多个安全漏洞,其中SECURITY-914是由Orange发现的Jenkins未授权任意文件读取漏洞,被评定为高危风险。该漏洞允许攻击者读取Windows系统服务器中的任意文件,在特定条件下也可读取Linux系统服务器中的文件。
二、漏洞影响
受影响对象
- 使用Jenkins的开发者和用户
漏洞影响范围
- Jenkins weekly: 2.132及此前所有版本
- Jenkins LTS: 2.121.1及此前所有版本
潜在危害
- 读取Jenkins文件系统中的任意文件内容
- 获取Jenkins系统的凭证信息
- 可能导致用户敏感信息泄露
- 攻击者可能利用获取的凭证直接登录Jenkins系统进行命令执行
三、漏洞技术分析
漏洞触发条件
- 全局安全配置中开启匿名用户可读权限
漏洞原理
-
请求处理机制:
doDynamic方法处理请求中包含的路径(如/plugin/xxxx)- 跟进
request.getLocale()跳转至Request.java
-
Locale处理:
- 处理HTTP头中的
Accept-Language - 根据"-"分为language和country(如zh-CN)
- 如果不存在"-",language可使用
../进行目录遍历
- 处理HTTP头中的
-
资源选择机制:
- Stapler.java中的
LocaleDrivenResourceSelector类的open方法 - 根据
Accept-Language返回不同文件 - Windows下可直接通过路径穿越绕过限制
- Linux下需要plugin目录存在"-"名称的目录才可利用
- Stapler.java中的
四、环境搭建与验证
搭建漏洞环境
-
下载受影响版本的Jenkins:
- Jenkins weekly 2.132或更早版本
- Jenkins LTS 2.121.1或更早版本
-
部署方式:
- 将jenkins.war放在tomcat的webapps目录下自动解压
- 或安装MSI版本
- 或从GitHub下载war包
-
启动步骤:
- 启动tomcat
- 访问http://localhost:8080(默认端口)
- 如需修改端口,编辑Jenkins安装路径下的Jenkins.xml
-
初始配置:
- 找到initialAdminPassword文件复制密码
- 输入密码解锁Jenkins
- 安装插件并使用管理员登录
五、漏洞修复方案
官方修复方案
- 升级Jenkins版本:
- Jenkins weekly升级至2.133或更高
- Jenkins LTS升级至2.121.2或更高
临时防护措施
- 使用WAF防护:
- 配置精准访问控制规则
- 针对
Accept-Language头设置阻断规则 - 过滤包含
../的请求头
六、参考资源
- Orange的漏洞分析: http://blog.orange.tw/
- 阿里云防护建议: https://help.aliyun.com/document_detail/86684.html
七、安全团队信息
Tide安全团队:
- 成立于2019年1月
- 专注于网络攻防、Web安全、移动终端安全等领域
- 官网: http://www.TideSec.net
注意: 本教学文档基于FreeBuf发布的漏洞分析文章整理,关键点已全部包含,无无关描述。如需更详细的技术细节,可参考原始链接中的完整内容。