Rejected: com.sun.jndi.rmi.EvilClass Refusing to unmarshal com.sun.jndi.rmi.EvilClass for security reasons Refusing to marshal com.sun.jndi.rmi.EvilClass for security reasons
每个部分涵盖了从之前的LTS版本升级,2.19.1的部分涵盖了从2.7.4升级。
安全修补程序的主要部分是用于远程处理(Jenkins CLI和主/从代理通信)和XStream(XML配置和数据文件)的序列化黑名单的扩展。
黑名单软件包中类的合法使用将不再有效。 日志中的异常消息中会显示以下任何信息:
Rejected: com.sun.jndi.rmi.EvilClass Refusing to unmarshal com.sun.jndi.rmi.EvilClass for security reasons Refusing to marshal com.sun.jndi.rmi.EvilClass for security reasons
在这些示例中, com.sun.jndi.rmi.EvilClass
是一个真正的类名的占位符。
通过为 Jenkins 主机 java`调用设置 `hudson.remoting.ClassFilter.DEFAULTS_OVERRIDE_LOCATION
系统属性,可以自定义使用的黑名单 。 预计将设置为包含完整的自定义黑名单的文件的路径,覆盖默认的黑名单。
在 ClassFilter.java
in the remoting component中定义了默认的黑名单。 在用于`hudson.remoting.ClassFilter.DEFAULTS_OVERRIDE_LOCATION`的配置文件中, 默认的黑名单将如下所示:
^bsh[.].* ^com[.]google[.]inject[.].* ^com[.]mchange[.]v2[.]c3p0[.].* ^com[.]sun[.]jndi[.].* ^com[.]sun[.]corba[.].* ^com[.]sun[.]javafx[.].* ^com[.]sun[.]org[.]apache[.]regex[.]internal[.].* ^java[.]awt[.].* ^java[.]rmi[.].* ^javax[.]management[.].* ^javax[.]naming[.].* ^javax[.]script[.].* ^javax[.]swing[.].* ^org[.]apache[.]commons[.]beanutils[.].* ^org[.]apache[.]commons[.]collections[.]functors[.].* ^org[.]apache[.]myfaces[.].* ^org[.]apache[.]wicket[.].* .*org[.]apache[.]xalan.* ^org[.]codehaus[.]groovy[.]runtime[.].* ^org[.]hibernate[.].* ^org[.]python[.].* ^org[.]springframework[.](?!(\p{Alnum}+[.])*\p{Alnum}*Exception$).* ^sun[.]rmi[.].*
要检查是否有任何给定的类名被列入黑名单,请在 _Manage Jenkins » Script Console_中运行以下命令,用要检查的类名替换 com.sun.jndi.rmi.EvilClass
:
hudson.remoting.ClassFilter.DEFAULT.isBlacklisted('com.sun.jndi.rmi.EvilClass')
删除或放宽黑名单上的条目必须小心谨慎,以免让自己暴露于已知的漏洞攻击。 可能的替代方案可能是通过HTTP和JNLP代理端口禁用CLI(请参见下文)以防止未经身份验证的使用。
Jenkins 2.19.3中的另一个变化是通过将系统属性`jenkins.CLI.disabled` 设置为 `true`来禁用通过HTTP的CLI和JNLP的新功能。这是一个更方便的选择来运行 Groovy script provided as a workaround to SECURITY-218 and SECURITY-360 ,对于那些不希望允许对Jenkins CLI进行未经身份验证访问的用户,即使是安全修补程序也是如此。 虽然CLI也可以使用Jenkins集成的SSH守护进程来使用,但这需要身份验证,所以它不是未经身份验证的攻击的载体。 要禁用此功能,请在 _Manage Jenkins » Configure Jenkins » SSH Server_中禁用SSH服务器端口。
以前的版本允许Jenkins以无效的插件配置运行。 例如,即使这些依赖关系过时或禁用,依赖于其他插件的插件也会被加载。 这可能会导致在运行时很难调试错误。
现在,Jenkins将拒绝加载依赖性不足的插件。 解释此问题的诊断信息将在启动过程中写入Jenkins日志,我们强烈建议在升级后监控该日志。
使用JavaScript的配置表单长期存在的问题是提交表单,然后使用Web浏览器“返回”按钮返回表单,导致表单内容错误。 再次提交表单会导致意外损坏的配置。
要解决此问题,我们禁用了几乎所有表单字段的自动完成功能。