Jenkins Server 严重漏洞导致信息泄露
Jenkins Server 软件中的一个严重漏洞CVE-2019-17638可能导致内存损坏并导致机密信息泄露。
Jenkins是最受欢迎的开源自动化服务器,由CloudBees和Jenkins社区维护。自动化服务器支持开发人员构建,测试和部署其应用程序,它在全球有数十万安装,用户超过100万。
“ Jenkins捆绑了围绕Jetty的包装程序Winstone-Jetty,在使用java -jar jenkins.war开始时充当HTTP和servlet服务器。Jenkins在使用任何安装程序或包时都是这样运行的,但在使用Tomcat等servlet容器时则不是这样。”该公司发布的建议中写道。
“ Jenkins 2.224至2.242和LTS 2.222.1至2.235.4捆绑了带有安全漏洞CVE-2019-17638的Jetty9.4.27。此漏洞可能允许未经身份验证的攻击者获得HTTP响应报头,其中可能包含打算用于其他用户的敏感数据。”
该漏洞影响Jetty和Jenkins Core,该漏洞在Jetty版本9.4.27中引入,用于处理大型HTTP响应报头并防止缓冲区溢出。
“您是对的,这是#4541的更改。问题是在缓冲区溢出的情况下,我们释放了报头缓冲区,但没有null字段。然后我们在类上抛出一个异常和调用release的处理,这再次释放了缓冲区(因为它不是空的)。因此,将缓冲区放入池中两次,可以由两个线程同时取出并处理。服务器从那时起就不稳定了!Jetty的项目负责人 Greg Wilkins 解释说。
Jetty引发异常以产生HTTP 431错误,该错误导致HTTP响应报头向缓冲池的双重释放,从而导致内存损坏和信息泄露。
专家解释说,由于双重释放,两个线程可以同时访问同一个缓冲区,这意味着一个请求可以访问另一个线程编写的响应。此漏洞可能导致暴露敏感数据,包括会话标识符和登录凭据。
“如果响应头太大,Jetty会引发异常以产生HTTP 431错误。发生这种情况时,包含HTTP响应报头的ByteBuffer将被释放回ByteBufferPool两次。由于这种双重释放,因此两个线程可以从池中获取相同的ByteBuffer,而线程1即将使用ByteBuffer写入response1数据时,线程2将response2数据填充到ByteBuffer中。然后,线程1继续写入现在包含response2数据的缓冲区。这导致client1发出了request1并期望响应,从而看到response2可能包含属于client2的敏感数据(HTTP会话ID,身份验证凭据等)。” 读取bug描述。
Jetty 9.4.30.v20200611解决了该漏洞,而Jenkins软件已修复了Jenkins 2.243和Jenkins LTS 2.235.5中的漏洞。
建议Jenkins用户将其软件更新到最新版本以解决该问题。
