Waitress HTTP 流水线请求处理竞争条件漏洞CVE-2024-49768
Python有很多web框架,如jango、Flask、Tornado 、sanic等,如Odoo、Superset都基于Flask框架进行开发的开源平台,具有强大功能。
在Linux下,默认使用的WSGI Server一般为Gunicorn,常规Django和Flas 应用部署中都有大量站点使用 Gunicorn,但它不支持Windows。
Waitress 这个简单高效的 WSGI(Web Server Gateway Interface)服务器能可以解决上述问题,它专注于提供可靠的、高性能Web服务。
Web服务网关接口(Web Server Gateway Interface,简称“WSGI”)是一种在Web服务器 和Python Web应用程序或框架之间的标准接口。
一、基本情况
Waitress由Zope Corporation开发并维护,旨在提供可靠的、高性能的 Web 服务,可以在Windows、Linux、Unix等可以在多平台下运行。
Waitress的设计理念是简单、易用、可靠,其专注于处理 WSGI 请求,是具备生产级品质并有高性能的纯python编写独立的WSGI服务器。
Waitress 核心亮点在于其多线程模型和智能调度策略,支持异步I/O,通过工作线程池来处理请求,从而可以避免单个请求阻塞其他请求。
栋科技漏洞库关注到 Waitress 组件发布v3.0.1 版本更新,修复一个HTTP 流水线请求处理竞争条件漏洞,漏洞被追踪为CVE-2024-49768。
二、漏洞分析
CVE-2024-49768漏洞是Python的Waitress WSGI服务器中发现的竞态条件漏洞,其CVSS3.1评分为9.8,Waitress 3.0.1版本已修复该漏洞。
Waitress 是一个用于Python 2和 3 的Web服务器网关接口服务器,远程客户端可能发送一个长度恰好为 recv_bytes(默认8192)的请求。
然后,再通过使用 HTTP 管道发送第二个辅助请求。而当请求前瞻被禁用(这是默认设置)的时候,Waitress将不会再读取其他任何请求。
如果第一个请求由于解析错误而失败时,Waitress会简单地关闭连接。
然而,当启用请求前瞻时,Waitress可以处理和接收第一个请求,在读取下一个请求并将其排队的同时,开始将错误消息发送回客户端。
这将允许工作线程为次要请求提供服务,同时应关闭连接,因此就导致竞态条件问题,新发布的Waitress 3.0.1 版本已修复竞态条件问题。
作为一种解决方法,官方建议禁用 channel_request_lookahead(默认设置为 0,禁用此功能)。
三、影响范围
2.0.0 < = Waitress 组件 < 3.0.1
四、修复建议
Waitress 组件 >= 3.0.1
五、参考链接
https://access.redhat.com/security/cve/CVE-2024-49768
https://github.com/Pylons/waitress/security/advisories/GHSA-9298-4cf8-g4wj