针对 Jenkins 应用中报告的 Eclipse Jetty 安全漏洞(CVE-2025-1948),修复需分步骤完成。以下是完整解决方案:
第一步:确认漏洞真实性
- 验证 CVE 编号
例如:- 类似真实漏洞:CVE-2021-34429(Jetty 缓冲区溢出漏洞)、CVE-2022-2047(Jetty DoS 漏洞)等。
- 操作建议:
使用漏洞扫描工具(如 Trivy、Dependency-Check)或 Jenkins 安全公告重新确认漏洞编号。
第二步:定位 Jetty 版本
查看 Jenkins 内置 Jetty 版本
Jenkins 默认嵌入 Jetty 作为 Web 容器。通过以下方式查看版本:# 进入 Jenkins 安装目录的 libs 子目录 cd $JENKINS_HOME/war/WEB-INF/lib # 查找 jetty-server 相关 JAR 文件 ls jetty-server-*.jar # 示例输出:jetty-server-9.4.48.v20220622.jar
确认漏洞影响范围
根据漏洞编号查找受影响的 Jetty 版本范围。例如,若漏洞影响 Jetty < 9.4.50,需升级到 9.4.50+。
第三步:修复方案
方案 1:升级 Jenkins(推荐)
Jenkins 新版本会更新依赖的 Jetty 版本。升级步骤
# 备份 Jenkins 数据
sudo cp -r /var/lib/jenkins /var/lib/jenkins_backup
# 使用官方包管理器升级(以 Ubuntu 为例)
sudo apt update && sudo apt upgrade jenkins -y
# 或手动下载最新 WAR 包替换
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
sudo systemctl stop jenkins
sudo cp jenkins.war /usr/share/jenkins/
sudo systemctl start jenkins
方案 2:手动更新 Jetty 版本
若 Jenkins 未及时升级,可手动替换 Jetty 库文件:
- 从 Maven 仓库 下载修复漏洞的 Jetty 版本(如 9.4.50+)。
- 替换 Jenkins 的 Jetty 相关 JAR:
# 进入 Jenkins 的 lib 目录 cd /usr/share/jenkins/war/WEB-INF/lib # 删除旧版本 jetty-server、jetty-util 等组件 rm jetty-server-9.4.48.v20220622.jar # 复制新版本 JAR 文件 cp ~/Downloads/jetty-server-9.4.50.v20221201.jar ./
- 重启 Jenkins 服务:
sudo systemctl restart jenkins
第四步:验证修复
检查 Jetty 版本
访问http://jenkins-server:port/manager
(需启用管理功能)或查看启动日志:journalctl -u jenkins --since "5 minutes ago" | grep Jetty # 期望输出:Jenkins war exploded in XXXms (Jetty 9.4.50)
运行漏洞扫描
使用工具重新扫描,确认漏洞已修复:# 使用 Dependency-Check 扫描 dependency-check --project Jenkins --scan /usr/share/jenkins/war/WEB-INF/lib
第五步:附加防护措施
限制网络访问
在防火墙中仅允许必要 IP 访问 Jenkins 端口,降低漏洞被利用的可能性:sudo ufw allow from 192.168.1.0/24 to any port 8080
启用 Jenkins 安全配置
- 强制使用 HTTPS(在
Jenkins -> Manage Jenkins -> Security
中配置)。 - 禁用废弃的协议(如 JNLP1)。
- 定期清理插件(未使用的插件可能引入依赖漏洞)。
- 强制使用 HTTPS(在
总结
步骤 | 操作 | 命令/示例 |
---|---|---|
1 | 确认 CVE 编号真实性 | grep CVE /var/log/jenkins/security.log |
2 | 升级 Jenkins 到最新稳定版 | sudo apt upgrade jenkins |
3 | 手动替换 Jetty JAR(可选) | cp jetty-server-9.4.50.jar /path/to/jenkins/lib/ |
4 | 验证版本并扫描漏洞 | dependency-check --scan [PATH] |
注意:若漏洞为误报或测试型编号,建议联系漏洞扫描工具提供商确认误报规则,避免后续干扰。