漏洞

  • 漏洞名
    Cloudbees Jenkins 跨站脚本漏洞(CVE-2021-21610)
  • 问题描述
    Cloudbees Jenkins(Hudson Labs)是美国CloudBees(Cloudbees)公司的一套基于Java开发的持续集成工具。该产品主要用于监控持续的软件版本发布/测试项目和一些定时执行的任务。
    Jenkins 2.274版本及之前存在跨站脚本漏洞,该漏洞源于程序没有对URL呈现作为查询参数传递的标记的格式化预览实现任何限制,攻击者可利用该漏洞获取敏感信息。以下设备或型号存在漏洞:Jenkins 2.274版本及之前、LTS 2.263.1版本及之前。
  • 修复建议
    厂商补丁:目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
    https://www.jenkins.io/security/advisory/2021-01-13/#SECURITY-1452

解决方式

  • 由于镜像构建有一些特殊配置等,不像想新构建环境
  • 因此通过启动镜像,之后容器内部替换 jenkins.war(新版344地址:jenkins.war),重启,并且从容器内部把镜像导出,之后save镜像为tar文件。替换生产环境镜像。

解决过程

可以针对镜像,直接通过测试主机,或者虚拟机,只要具备docker环境即可。

  • 由于生产环境是在局域网,因此需要构建本地虚拟机环境,且需要测试,因此要具备 docker,harbor,gitlab,环境
    可参考:http://albagu.com/#/artme_go?articleId=304
  • 漏洞版本v2.7.4.5
registry.paas/dianzi/jenkins   v2.7.4.5    d6770122878f   5 years ago      515MB
  • 启动漏洞版本
docker run -d -p 8003:8080 -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/jenkins:/data/jenkins -v  --name test_jenkins registry.paas/dianzi/jenkins:v2.7.4.5
  • 备份容器内jenkins.war,到主机目录,20fbab6babb2是容器id
docker cp 20fbab6babb2:/usr/share/jenkins.war  /data_file/data_path/jkens_bbc/warFileBak/jenkins.war
  • 上传新jenkins.war到 容器里面
docker cp /data_file/data_path/jkens_bbc/warFile/jenkins.war 20fbab6babb2:/usr/share
  • 重启容器
docker restart 20fbab6babb2
  • 从容器内部导出镜像
# 从容器保存为新镜像
sudo docker commit 20fbab6babb2 registry.paas/dianzi/jenkins:v2.344
  • 保存新镜像
docker save -o /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/jenKinsImageNew_20220419/jenkins_v2.344.tar registry.paas/dianzi/jenkins:v2.344
  • 得到新镜像后,本地启动测试,根据界面提示,更新所有相关插件即可。
docker run -u root -d -p 8003:8080 -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/jenkins:/data/jenkins -v /var/run/docker.sock:/var/run/docker.sock -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/kube:/data/kube -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/maven:/data/maven -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/robot:/data/robot -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/sonar:/data/sonar -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/devops:/data/devops -v /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/maven/conf:/usr/local/share/maven/conf --name test_jenkins344 registry.paas/dianzi/jenkins:v2.344
  • 把得到的镜像,上传到生产环境,把本地/data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/jenkins/*,所有文件打包部署到生产对应目录
# 压缩
tar zcvf jenkins.tar /data_file/data_path/jkens_bbc/jenkins_rel_bak_20220418/jenkins
#解压
cd /data
tar zcvf jenkins.tar
  • 启动新版镜像,即可。

遇到问题

中文问题,下载相关插件即可

参考:

docker.withRegistry报错 $ docker login -u admin -p ******** http://harbor.cn Cannot connect to the Docker daemon. Is the docker daemon running on this host?

  • 新版的 plugins/docker*,相关文件无法自身 docker login -u -p harbor.cn成功。需要特殊处理,让容器也有docker能力。不然登录不上,可以参考:
  • 但是 jenkins.tar是更新后的(20220422日,最新版的),有问题,docker login不友好,不能用自身能力(旧版能力:Wrote authentication to /root/.dockercfg),此时做法是用 旧的 plugins/docker*替换新的 相关文件,这样就能继续使用。