[CVE-2019-17638]Jenkins自带Jetty的缓冲区损坏

参考:

  • https://www.jenkins.io/security/advisory/2020-08-17/
  • https://github.com/advisories/GHSA-x3rh-m7vp-35f2
  • https://github.com/eclipse/jetty.project/issues/4936
  • https://nvd.nist.gov/vuln/detail/2019-17638

这样启动jenkins时使用的是Jenkins自带的jetty:

 java -jar jenkins.war

影响版本:

  • Jenkins 2.224<= version <= 2.242
  • Jenkins LTS 2.222.1 version <= 2.235.4

这些版本的自带Jetty是Jetty 9.4.27版本。存在漏洞。
具体的Jetty受影响版本:
Eclipse Jetty, versions 9.4.27.v20200227- 9.4.29.v20200521

漏洞详情:
未授权的攻击者可获取Jenkins给其他用户的HTTP响应头。

如果响应头太大,Jetty会引发异常以产生HTTP 431错误。 发生这种情况时,包含HTTP响应标头的ByteBuffer将被释放回ByteBufferPool两次。 由于具有这种双重发行版,因此两个线程可以从池中获取相同的ByteBuffer,而线程1将要使用ByteBuffer写入response1数据时,线程2会将response2数据填充到ByteBuffer中。 然后,线程1继续写入现在包含response2数据的缓冲区。 这导致client1发出了request1并期望响应,从而看到response2可能包含属于client2的敏感数据(HTTP会话ID,身份验证凭据等)。

漏洞复现过程:

我们设法通过创建一个端点来重现该问题,在该端点中,我们将显式发送一个大于配置的最大大小(8KB)的响应标头,此后应用程序将立即变得无响应,并且所有上述错误将开始出现。

你可能感兴趣的:(java,Web,安全)