luigi是一个帮助您构建复杂批处理作业管道的包。它处理依赖解析、工作流管理、可视化、故障处理、命令行集成等众多功能。
由于在_extract_packages_archive函数中对目标文件路径验证不当,该包受影响版本存在通过存档提取(Zip Slip)实现任意文件写入的漏洞。
攻击利用特制的zip存档,其中包含路径遍历文件名。当被利用时,恶意存档中的文件名与目标提取目录拼接,导致最终路径位于目标文件夹之外。例如,一个zip可能会包含一个位置为'../../file.exe'的文件,从而突破目标文件夹。如果可执行文件或配置文件被包含恶意代码的文件覆盖,问题很容易演变为任意代码执行问题。
以下是一个包含一个良性文件和一个恶意文件的zip存档示例。提取恶意文件将导致遍历目标文件夹,最终到达/root/.ssh/并覆盖authorized_keys文件:
+2018-04-15 22:04:29 ..... 19 19 good.txt
+2018-04-15 22:04:42 ..... 20 20 ../../../../../../root/.ssh/authorized_keys
创建恶意的packages.tar
python3 xpl.py
将其作为参数传递给luigi/contrib/lsf_runner.py
检查你的/tmp/fodac :)
https://security.snyk.io/vuln/SNYK-PYTHON-LUIGI-7830489
https://github.com/spotify/luigi/commit/b5d1b965ead7d9f777a3216369b5baf23ec08999
https://github.com/spotify/luigi/issues/3301