最近看一个关于flask的send_file()函数滥用,导致任意文件读取的漏洞点。发现有研究者在2022年3月就发现微软官方项目OLive中存在这个利用点,并向官方提交了issue和pr。
此漏洞在4月合入主线并修复。但是在查看主线的过程中,发现由于官方操作失误,导致最新的主线代码中,已修复的漏洞又重新被引入。
当前已提issue,官方目前暂未修复此漏洞。
微软旗下的项目,用于加速训练模型。包括转换模块,优化模块和web控制台,本次漏洞点就在web控制台。
OLive的Web控制台后端使用flask开发,漏洞点在download路由处。
使用了os.path.join 函数将传入的filename拼接到项目root路径下,此函数不会过滤 ../ ,若传入的filename为
../../../../../../../etc/passwd
则join后得到的文件路径为
/etc/passwd
直接使用 send_file函数读取上述文件并返回给前端,从而读取出了 /etc/passwd ,造成了任意文件读取漏洞。
官方当时修复的方案是:使用flask自带的safe_join函数进行文件路径拼接,这个函数会过滤掉路径中的危险字符。
- 2022.3:安全研究者发现OLive中的任意文件读取漏洞,并提交pr
https://github.com/microsoft/OLive/pull/83/files
- 2022.4:修复代码合入主线
- 2022.5:官方维护者错误地将漏洞代码覆盖已修复的文件
https://github.com/microsoft/OLive/commit/e3bb70414e4df7ab81ed356959d438982368484e
- 2022.7:cckuailong发现问题并提交issue给官方
漏洞是个比较简单的漏洞,但是整个事件挺有意思的。之前没想到微软这种巨头也会犯如此有趣的错误。不过想想,之前windows好像也有过打补丁,把之前的漏洞引入回来的先例。
https://github.com/github/securitylab/issues/669
本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。