Apache Flink CVE-2020-17518:远程文件写入漏洞分析

需积分: 0 0 下载量 141 浏览量 更新于2024-08-03 收藏 422KB PDF 举报
"Apache Flink的CVE-2020-17518是一个严重的安全漏洞,它允许远程攻击者通过REST API进行目录遍历,从而实现任意文件写入。此漏洞影响Apache Flink的1.5.1至1.11.2版本。攻击者可以通过构造特殊的HTTP请求头来将文件写入到服务器的任意位置。复现此漏洞的实验环境可以使用Vulhub搭建,通过发送特定的POST请求来触发漏洞。虽然服务器会返回400错误,但文件实际上已经成功上传。此外,此漏洞还可以与CVE-2020-17519结合,利用文件读取漏洞来验证文件是否已写入。" Apache Flink是一款流行的大数据流处理框架,其在2020年被发现存在一个严重的安全问题,即CVE-2020-17518。这个漏洞是由于在Flink 1.5.1版本中引入的REST API设计缺陷导致的。攻击者能够通过构造带有恶意路径的HTTP请求头,执行目录遍历操作,从而在服务器的本地文件系统上任意位置写入文件。这种行为可能导致敏感信息泄露、系统权限提升甚至完全控制受影响的Flink实例。 漏洞分析指出,攻击者需要发送一个POST请求到/jars/upload端点,同时在Content-Disposition字段中包含一个恶意的文件名,如“../../../../..//tmp/test”。即使服务器返回了400 Bad Request错误,文件仍然会被写入到指定的路径。这表明Flink的输入验证机制未能有效地阻止此类攻击。 为了复现此漏洞,可以使用Vulhub提供的环境,通过`docker-compose build`和`docker-compose up -d`命令来启动实验环境。然后,使用类似MS08067的工具构造POC(Proof of Concept)请求,模拟攻击者的操作。 此外,CVE-2020-17518还可以与另一个名为CVE-2020-17519的漏洞结合利用。后者是针对Apache Flink 1.11.0、1.11.1和1.11.2版本的任意文件读取漏洞。攻击者可以使用这个漏洞来验证通过CVE-2020-17518写入的文件是否成功,例如,通过发送一个GET请求到/jobmanager/logs/路径,并使用URL编码的“../”来尝试读取刚刚写入的文件。 为了防止这类攻击,用户应该尽快更新Apache Flink到不受影响的版本,或者应用官方发布的安全补丁。同时,对所有接收用户输入的数据处理流程进行严格的安全审查,以确保没有类似的目录遍历漏洞存在。加强输入验证和限制文件系统的访问权限也是必要的防御措施。对于已经受到攻击的系统,需要检查是否有未经授权的文件写入或敏感信息泄露,并立即采取补救措施。

2023-07-13 09:15:56,872 WARN org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint [] - Unhandled exception java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_372] at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[?:1.8.0_372] at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379) ~[?:1.8.0_372] at org.apache.flink.shaded.netty4.io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [flink-dist-1.15.3.jar:1.15.3] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_372]

2023-07-14 上传
2023-06-02 上传

Caused by: java.lang.NoClassDefFoundError: org/apache/flink/shaded/guava18/com/google/common/util/concurrent/ThreadFactoryBuilder at com.ververica.cdc.debezium.DebeziumSourceFunction.open(DebeziumSourceFunction.java:217) at org.apache.flink.api.common.functions.util.FunctionUtils.openFunction(FunctionUtils.java:34) at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.open(AbstractUdfStreamOperator.java:101) at org.apache.flink.streaming.runtime.tasks.RegularOperatorChain.initializeStateAndOpenOperators(RegularOperatorChain.java:107) at org.apache.flink.streaming.runtime.tasks.StreamTask.restoreGates(StreamTask.java:734) at org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$SynchronizedStreamTaskActionExecutor.call(StreamTaskActionExecutor.java:100) at org.apache.flink.streaming.runtime.tasks.StreamTask.restoreInternal(StreamTask.java:709) at org.apache.flink.streaming.runtime.tasks.StreamTask.restore(StreamTask.java:675) at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:952) at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:921) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:745) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:562) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.ClassNotFoundException: org.apache.flink.shaded.guava18.com.google.common.util.concurrent.ThreadFactoryBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 13 more 这是什么报错信息

2023-06-02 上传

Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.flink.table.planner.plan.rules.FlinkStreamRuleSets$ at org.apache.flink.table.planner.plan.optimize.program.FlinkStreamProgram$.buildProgram(FlinkStreamProgram.scala:56) at org.apache.flink.table.planner.plan.optimize.StreamCommonSubGraphBasedOptimizer.$anonfun$optimizeTree$1(StreamCommonSubGraphBasedOptimizer.scala:158) at scala.Option.getOrElse(Option.scala:121) at org.apache.flink.table.planner.plan.optimize.StreamCommonSubGraphBasedOptimizer.optimizeTree(StreamCommonSubGraphBasedOptimizer.scala:158) at org.apache.flink.table.planner.plan.optimize.StreamCommonSubGraphBasedOptimizer.doOptimize(StreamCommonSubGraphBasedOptimizer.scala:83) at org.apache.flink.table.planner.plan.optimize.CommonSubGraphBasedOptimizer.optimize(CommonSubGraphBasedOptimizer.scala:77) at org.apache.flink.table.planner.delegation.PlannerBase.optimize(PlannerBase.scala:287) at org.apache.flink.table.planner.delegation.PlannerBase.translate(PlannerBase.scala:160) at org.apache.flink.table.api.internal.TableEnvironmentImpl.translate(TableEnvironmentImpl.java:1329) at org.apache.flink.table.api.internal.TableEnvironmentImpl.executeInternal(TableEnvironmentImpl.java:676) at org.apache.flink.table.api.internal.StatementSetImpl.execute(StatementSetImpl.java:98) at com.dtstack.chunjun.util.SqlTaskUtil.executeSql(SqlTaskUtil.java:117) at com.dtstack.chunjun.util.SqlTaskUtil.executeSqlJob(SqlTaskUtil.java:97) at com.dtstack.chunjun.Main.main(Main.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:366) at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:235) at org.apache.flink.client.program.PackagedProgramUtils.getPipelineFromProgram(PackagedProgramUtils.java:158) ... 14 more

2023-06-09 上传