一、背景
國家信息安全漏洞庫(CNNVD)收到關於Apache Flink安全漏洞(CNNVD-202101-271、CVE-2020-17519)(CNNVD-202101-273、CVE-2020-17518)情況的報送。成功利用漏洞的攻擊者,可在未授權的情況下,構造惡意數據執行任意文件讀取或文件寫入攻擊,最終獲取服務器敏感性信息或權限。Apache Flink 1.5.1 - 1.11.2版本均受此漏洞影響。目前,Apache官方已經發布了版本更新修復了該漏洞,建議用戶及時確認產品版本,儘快採取修補措施。
Apache Flink安全漏洞(CNNVD-202101-271、CVE-2020-17519):
Apache Flink安全漏洞(CNNVD-202101-273、CVE-2020-17518):
上面一段話粘貼過來的,詳情:https://it.cztgi.edu.cn/2021/0113/c1751a49194/page.htm
二、修復方法
-
升級Flink版本至1.11.3及以上
-
就地修復漏洞
網上大多是描述有這個漏洞,只告訴你升級可以解決,很少告訴你就地解決的方法。但是某些情況下,升級的代碼可能有點多,在之前的版本上做了較多的定製開發,或者環境適配比較麻煩,或者擔心新版本帶來未知的問題,所以,這裏選擇就地修復漏洞的方法,此教程也適合小白。
三、詳細步驟
這裏以flink1.11.1版本爲例進行修復
1.準備flink源碼
flink1.11.1源碼:https://github.com/apache/flink/archive/release-1.11.1.zip
2.找到修復的commit
由於此次的修復比較簡單,就不去下載flink的全量倉庫代碼來查找對應修復漏洞的pull request了,這樣比較慢,對於代碼量比較大的修復,還是建議clone整個倉庫下來。
點開最上面的兩個郵件列表鏈接,裏面包含commit id
兩個漏洞對應的commit分別爲:
b561010b0ee741543c3953306037f00d7a9f0801
a5264a6f41524afe8ceadf1d8ddc8c80f323ebc4
找到對應的commit id再到github找到對應的代碼變更,根據commit id拼接得到url:
https://github.com/apache/flink/commit/b561010b0ee741543c3953306037f00d7a9f0801
https://github.com/apache/flink/commit/a5264a6f41524afe8ceadf1d8ddc8c80f323ebc4
實際有用的代碼改動就一行,其餘所有的test類可以不用管,把兩個url對應的commit改動到自己的flink1.11.1版本上
3.編譯打包
兩個漏洞對應的修復其實就2行代碼,都屬於flink-runtime模塊下的代碼,所以,只要把這個模塊重新打包後替換生產即可。這裏一定要注意!flink安裝包中,並沒有flink-runtime-xxxx.jar,flink把核心的一些包都打在了flink-dist_2.11-1.11.1.jar中,所以,這裏要編譯flink-dist模塊
4.替換jar包
把最後編譯生成的flink-dist_2.11-1.11.1.jar包替換到所有flink節點的$FLINK_HOME/lib目錄下
四、總結
這裏是給不太熟悉apache項目的同學一個簡單的漏洞修復教程。中間有兩個地方花了點時間,一是在找漏洞對應github倉庫pr的時候,在社區jira上面有一個沒搜到;二是打包的時候忙着打flink-runtime模塊而不是flink-dist模塊;對於這種小修改,能不升級版本就不升級,儘量最小化風險,希望能幫到你。