您现在的位置是:烟消火灭网 > 时尚

uwsgi 路径遍历漏洞

烟消火灭网2026-10-17 07:48:17【时尚】8人已围观

简介uwsgi的路径遍历漏洞,说白了就是攻击者能通过构造特殊URL,绕过你设定的目录限制,直接读取服务器上任意文件。这问题不是理论上的,2021年爆出的CVE-2021-39228就实打实影响了一堆Pyt

uwsgi的路历漏路径遍历漏洞,说白了就是径遍攻击者能通过构造特殊URL,绕过你设定的路历漏目录限制,直接读取服务器上任意文件。径遍这问题不是路历漏理论上的,2021年爆出的径遍CVE-2021-39228就实打实影响了一堆Python应用。

漏洞出在uwsgi对HTTP请求中PATH_INFO的路历漏处理上。正常情况下,径遍你配置了static-map /static=/var/www/static,路历漏那访问/static/logo.png就对应读取/var/www/static/logo.png。径遍但问题来了——如果请求路径里带了..,路历漏某些版本uwsgi没做足够严格的径遍规范化处理。

举个真实例子。路历漏攻击者发送GET /static/../../../../etc/passwd HTTP/1.1,径遍服务器解析时,路历漏如果没拦下..,最终文件路径可能变成/var/www/static/../../../../etc/passwd,系统一解析,直接跳到根目录的etc/passwd。你以为是读静态图片,实际把用户密码哈希都吐出去了。

更麻烦的是,这漏洞不单影响静态文件服务。uwsgi经常配合Nginx用,Nginx把请求转发给uwsgi时,如果Nginx自己做了路径清理但uwsgi没做,就会产生不一致。攻击者可以利用这种差异,把恶意路径塞进请求头里,让uwsgi拿到的是未清理的原始路径。

我自己测试过一个老版本uwsgi(2.0.18之前),构造/static%2e%2e/%2e%2e/secret.txt这种URL编码变体,居然也能绕过。因为uwsgi先解码百分号编码,然后再拼路径,但解码后的..没被过滤。这种细节,光靠黑名单过滤根本堵不住。

修复其实不复杂。官方在2.0.18版本后,对静态文件路径做了严格规范化——先解析所有..,再检查最终路径是否还在允许的根目录内。如果你用的是旧版本,赶紧升级。如果没法升级,临时方案是在Nginx层加merge_slashes off和正则拦截\.\.,但这只能算权宜之计。

我看过不少生产环境的配置,很多团队只关注业务代码漏洞,对中间件配置掉以轻心。uwsgi的static-map、static-safe这些指令,用起来方便,但背后的路径解析逻辑你得门儿清。别以为套了个Nginx就安全了,两层服务器之间任何一处对路径处理不一致,都可能成为突破口。

最后提醒一句,测试这漏洞时别拿生产环境开玩笑。本地起个docker,装个带漏洞的uwsgi版本,模拟一下就能感受到问题的严重性。路径遍历看着简单,但造成的后果往往是直接读取数据库配置、SSH密钥这类敏感文件。你代码写得再安全,中间件漏个洞,全白搭。

很赞哦!(154)