漏洞复现参考如下文章
Apache Flink文件上传漏洞(CVE-2020-17518)漏洞复现分析_文件上传漏洞复现cve-CSDN博客
分析代码的话,首先找到漏洞修复的邮件
漏洞详情,可以看到漏洞概要,影响的版本,漏洞描述以及如何修复
然后根据代码修复ID:a5264a6f41524afe8ceadf1d8ddc8c80f323ebc4,去github上面找到对应的修复代码
代码修复地址
可以看到,最开始是直接使用fileUpload.getFilename()作为地址,修改后是改成了new File(fileUpload.getFilename()).getName()作为地址,也就是说最开始是直接使用请求中传入的filename去拼接上传路径,最终导致了跨目录上传的问题。
那么我们看一下修改之后的代码做了哪些处理,可以看到对../进行了过滤
看一下getName的源码,顺便打下断点,我们看到就是使用lastindexof方法找最后一个分隔符,如果没有找到那么就全部返回,如果找到了那么从分隔符开始进行分割
所以,该漏洞的最根本原因,还是在于对外部传入的文件名或者文件路径进行校验,从而导致了跨目录上传的问题,正常要进行归一化处理,只保留最后的文件名和后缀即可