转载

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

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

今年7月11日和8月7日,Jenkins发布了与明文保存凭证相关的一些安全通告。本文将讨论该漏洞和受影响的一些插件:

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插件中并不是加密保存的。

凭证以未加密的明文形式保存:

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

图1. 明文保存的API token

保存凭证的适当方式是在 Credentials 插件中授权给第三方凭证提供商,这是在配置文件中的credentialsId 引用的。

如果用户要读取配置文件,只有credentialsId 引用时可查看的。其实凭证是保存在引用中。

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

图2. credentialsID 引用

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

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

图3.使用Jenkins凭证引用来保存凭证

插件在 $JENKINS_HOME/credentials.xml中保存加密的凭证。

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

图4. 加密的凭证保存示例

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

事实上,加密的秘密和加密元数据都是base64编码的。

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

用于解密的密钥硬编码在每个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://4hou.win/wordpress/?p=35657
正文到此结束
Loading...