欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Jenkins插件漏洞:明文保存的凭证泄露

来源:本站整理 作者:佚名 时间:2019-09-03 TAG: 我要投稿

Jenkins是一个广泛应用的开源自动化服务器,允许DevOps开发者来高效、可靠地构建、测试和部署软件。为了利用Jenkins模块化的架构,开发者可以通过插件来扩展其核心特征,允许其扩展脚本能力。研究人员统计发现一共有1600个Jenkins插件。其中一些插件保存了未加密的明文凭证。如果发生数据泄露事件,攻击者就可以访问这些信息。
今年7月11日和8月7日,Jenkins发布了与明文保存凭证相关的一些安全通告。本文将讨论该漏洞和受影响的一些插件:

表1. Jenkins插件中的信息泄露漏洞
需要注意的是Port Allocator Testlink Caliper CI插件的漏洞截止目前仍然没有修复。当前eggPlant插件在使用时仍然是不安全的。
访问保存的凭证
影响Jenkins插件的漏洞可以被利用来窃取敏感的用户凭证。一旦有读或访问master文件系统的凭证泄露,攻击者就可以访问相关的服务。
插件配置数据一旦保存在位于 $JENKINS_HOME root中的xml文件的形式保存,该文件定义了每个插件的结构和设置。其他情况下,插件的配置上以job配置文件的形式保存,比如$JENKINS_HOME/jobs/new-job/config.xml。如果凭证是插件配置的一部分,那么就应该以加密的形式保存,但是在Gogs Port Allocator Caliper CI Testlink和eggPlant插件中并不是加密保存的。
凭证以未加密的明文形式保存:

 图1. 明文保存的API token
保存凭证的适当方式是在 Credentials插件中授权给第三方凭证提供商,这是在配置文件中的credentialsId 引用的。
如果用户要读取配置文件,只有credentialsId 引用时可查看的。其实凭证是保存在引用中。

 图2. credentialsID 引用
包含在默认建议插件列表中的Credentials插件是用来保存加密的凭证的。下面是凭证保存的详情:

 图3.使用Jenkins凭证引用来保存凭证
插件在 $JENKINS_HOME/credentials.xml中保存加密的凭证。

 图4. 加密的凭证保存示例
在上面的例子中,密码保存以base64编码的方式保存在波形括号中,这是二进制数据编码、保存和转移到一种编码方案。通过使用base64解码器可以看到特定的非打印的字符。
事实上,加密的秘密和加密元数据都是base64编码的。

用于解密的密钥硬编码在每个Jenkins实例中。不同的Jenkins安装中使用的key不同,key加密保存在$JENKINS_HOME/secrets/hudson.util.Secret 文件中。没有一个单个master key可以打开所有的实例。
hudson.util.Secret 文件是用来自master key的密钥进行AES加密的,在每个安装中都是不同的。
保护$JENKINS_HOME/secrets 目录免受以外的访问对预防保存的凭证泄露是非常重要的。执行作业会影响所有的Jenkins安全,比如安装插件、创建作业、读取或提取凭证和其他私有数据。
安全建议
明文保存密码对企业来说是一个非常大的威胁。但管理员要注意有$JENKINS_HOME/secrets 目录访问权限的用户都可以访问保存的凭证。$JENKINS_HOME/hudson.util.Secret 和 $JENKINS_HOME/secrets/master.key 是用来加密保存的密码的文件,允许解密保存的凭证。
在Jenkins的默认设置中,Jenkins并不会执行安全检查。因此,Jenkins建议用户执行最佳安全实践,包括认证用户、执行访问控制。如果作业必须在master节点运行,Jenkins建议使用 Job Restrictions插件,来限制作业执行或基于用户权限的节点配置。
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载