Jenkins插件存在安全漏洞,衍生密码外泄或跨站攻击风险

安全研究人员发现,100多只Jenkins插件程序存在安全漏洞,可能引发登录数据外泄或是跨网站攻击等安全风险。

Jenkins是一种支持开发、部署和自动化软件开发的开源工具,可以插件扩展以便提供Active Directory验证或执行静态程序分析、将汇编好的软件复制到CIFS网络文件系统等重复性作业。和Wordpress一样,Jenkins在第三方开发商的投入下,现有上百种插件。但NCC Group安全顾问Viktor Gazdag手动测试100多款Jenkins插件后发现二大类漏洞,包括验证数据以明码存储以及缺少权限检查的跨网站请求伪造(cross site request forgery,CSRF),后者可能导致数据窃取以及服务器端的请求伪造(Server-Side Request Forgery,SSRF)攻击。

其中又以第一类漏洞占最大宗。以明码存储的验证数据包括用户名、密码、API密钥或令牌,以及可用于Jenkins和插件中的凭证。虽然Jenkins将密码加密存储成credentials.xml档,但研究人员发现部分插件开发商是存储成插件自己的.xml档或是某项作业的config.xml档,这些大部分都没有加密。此外,部分用户输入验证数据的Web form也泄露了密码和令牌,也未使用正确的Jelly表格控制。但Jenkins的安全文件中并未提及这两种文件可能泄露信息,更别提workspace数据匣也可能暂时存储了敏感信息。

研究人员就发现,某个MQ插件将密码明码存储在插件的自有设置文件中,AWS Code Build插件则把加密密钥明码存储在config.xml。Publish Over Dropbox Plugin则在插件设置中,将令牌大喇喇显示于Web form中。

其次为欠缺权限检查的跨网站请求伪造(CSRF)漏洞。有些插件让用户连接服务器来测试验证数据,这原本可根据用户角色权限,强制执行POST调用,要求用户提供CSRF令牌(Crumb)来确保服务器安全性,但在本研究中却发现部分插件程序并未强制POST调用,使插件程序可能遭遇CSRF攻击。攻击者可能利用CSRF恶意程序变更主机名称,再诱骗管理员连上服务器,利用被攻击者接管的服务器窃取登录数据。如研究人员就发现OpenStack Cloud Plugin有缺少权限检查的CSRF漏洞问题。但这类漏洞还可能发展成服务器端的请求伪造(SSRF)攻击,借由测试连接和攻击者掌握的参数,进一步用来进行传输端口扫瞄、探查内部网络架构或暴力破解登录。

为避免用户信息通过插件泄露,研究人员呼吁插件程序开发人员必须强制执行POST调用,以Jenkins.getInstance().checkPermission(Jenkins.ADMINISTER)检查权限,并以Jenkins的Secret及Web form的密码字段来存储登录信息。