CVE-2025-59152CVE-2025-59152是Litestar ASGI框架中存在的一个高危安全漏洞,影响版本2.17.0。该漏洞存在于Litestar的RateLimitMiddleware(限速中间件)中,攻击者可以通过操纵HTTP请求头中的X-Forwarded-For字段来完全绕过基于IP的速率限制机制。
Litestar是一个高性能的异步服务器网关接口(ASGI)框架,广泛用于构建Python Web应用程序。其内置的RateLimitMiddleware组件通过`cache_key_from_request()`函数生成用于速率限制的缓存键。当请求中包含X-Forwarded-For头时,该中间件会无条件信任该头部的值,并将其作为客户端标识符的一部分。由于客户端可以任意设置X-Forwarded-For头的值,攻击者可以通过不断更换伪造的IP地址来创建不同的限速桶(rate limit bucket),从而避免触发任何单个桶的限制阈值。
此漏洞对所有使用默认设置RateLimitMiddleware的Litestar应用程序构成严重威胁,这可能涵盖了大多数实现了速率限制功能的应用程序。攻击者可以利用此漏洞对目标服务器发动暴力破解攻击、凭证填充攻击、API滥用或拒绝服务攻击,而不会受到任何速率限制的约束。该漏洞的CVSS评分为7.5分,属于高危级别,主要影响系统的可用性。该漏洞已在版本2.18.0中修复。
从技术层面分析,该漏洞的根本原因在于RateLimitMiddleware对X-Forwarded-For头部的无条件信任机制。
1. **漏洞触发点**:在`litestar/middleware/rate_limit.py`文件的第127行,`cache_key_from_request()`方法负责从请求中提取客户端标识信息。该方法在处理请求时,会检查X-Forwarded-For头部是否存在,如果存在则直接使用其值作为缓存键的一部分。
2. **攻击原理**:HTTP协议中的X-Forwarded-For(XFF)头是一个用于标识客户端原始IP地址的HTTP扩展头,通常由反向代理或负载均衡器设置。然而,Litestar的中间件没有验证该头部值的真实性,也没有检查请求是否确实经过可信代理。当攻击者直接向Litestar应用发送请求时,可以任意伪造X-Forwarded-For头部的值。
3. **利用方式**:攻击者只需在每次请求中使用不同的X-Forwarded-For IP地址,即可创建独立的限速桶。例如,攻击者可以依次使用`X-Forwarded-For: 1.2.3.4`、`X-Forwarded-For: 5.6.7.8`等不同的值发送请求。由于每个伪造IP对应一个独立的限速桶,攻击者永远不会触发任何单个桶的速率限制,从而实现完全绕过。
4. **影响范围**:该漏洞影响所有使用默认配置RateLimitMiddleware的Litestar 2.17.0应用程序。攻击者可以利用此漏洞进行暴力破解登录凭证、API密钥枚举、拒绝服务攻击等恶意活动,而不会受到任何速率限制。
5. **修复方案**:版本2.18.0中的修复方案(commit 42a89e043e50b515f8548a93954fe143f63cf9fb)修改了`cache_key_from_request()`方法,使其不再无条件信任X-Forwarded-For头部,而是采用更安全的客户端标识生成策略。