修複問題描述
阿裡雲上的安全監測提示:
近日,Apache軟體基金會(ASF)向Apache Struts項目管理者釋出了關于CVE-2016-1000031漏洞的安全公告,其中披露一個Commons FileUpload庫的曆史高危漏洞CVE-2016-1000031,而2.3.x系列版本的Apache Struts2仍在使用低版本的Commons FileUpload庫,該庫作為Struts2的一部分,被用作檔案上傳的預設機制,遠端攻擊者利用該漏洞可直接獲得伺服器權限。2.5.12以上版本的Struts2暫不受影響。
注意:java類web應用的修複一般都需要重新開機應用
方案一:
更新至2.5.18及以上版本的Struts2,官方下載下傳連結:https://struts.apache.org/download.cgi
方案二:
更新Struts2依賴的Commons FileUpload庫版本至最新1.3.3,官方下載下傳位址:https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
我這裡是思路就是采用方案二。
怎麼修複
整體思路很簡單,下載下傳源代碼,修改需要更新的引用包版本,重新編譯建構釋出。
1、clone jenkins的源代碼到本地,修改引用包的版本。這裡直接用我的結果即可,檔案為jenkins/core/pom.xml
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
<!--<version>1.3.3-jenkins-2</version> -->
</dependency>
2、編譯。
cd "代碼路徑"
mvn clean package -pl war -am -DskipTests -Dfindbugs.skip -X
編譯過程如果不順利,或下載下傳不下來檔案,自己百度處理。
當然,也可以參考jenkins源碼編譯和打包(20180408更新) 中的部分步驟,像nodeys的沒有就不操作。自己搭建私有庫,我是現成的。不自己搭建的話,估計問題也不會太大。
3、踩過的坑。版本問題,編譯的版本一定要和目前的版本保持一緻,至少不能跳大版本,否則啟動不起來,甚至會有各種意想不到的問題。版本一緻就順風順水。
當然還有一種修複思路,直接替換.jenkins/war/WEB-INF/lib 下面的包,用新包ommons-fileupload-1.3.3.jar換舊包(commons-fileupload-1.3.1-jenkins-2.jar),新包用舊包命名,重新開機。(阿裡雲掃描不出來你修複了,大概是掃描它記錄的是檔案路徑吧,我是換過的,重起服務,掃不出來修複了,比較尴尬)。
當然,如果閣下運氣好和我用的是一個版本,2.176,那直接下載下傳就可以了。
最後
由于夠不着jenkins的維護的資格,是以去issue送出了個bug建議修複pom.xml(要牆)。
https://issues.jenkins-ci.org/browse/SECURITY-1463?filter=-2