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用戶將其軟件更新到最新版本以解決該問題。