CVE-2025-68272Signal K Server是一个开源的服务器应用程序,专为船舶环境设计,运行在船只的中央集线器上,用于整合和处理来自各种传感器、导航设备和其他系统的数据。该服务器提供RESTful API接口,允许客户端设备访问和管理船舶数据。
在2.19.0之前的版本中,Signal K Server存在一个严重的拒绝服务(DoS)漏洞。漏洞位于访问请求处理端点`/signalk/v1/access/requests`。该端点在处理访问请求时存在设计缺陷——服务器会将所有接收到的请求对象无限制地存储在内存中,而没有实施任何清理机制或存储上限控制。
攻击者可以无需任何认证,直接通过发送大量特制的请求到该端点。由于每个请求都会被保存在内存中且不会被释放,随着请求数量的增加,服务器内存消耗会持续增长,最终导致Node.js运行时触发"JavaScript heap out of memory"(JavaScript堆内存溢出)错误,使整个服务器进程崩溃。
这意味着任何能够访问服务器网络的用户都可以远程使Signal K Server服务不可用,对于依赖该系统进行导航和船舶监控的用户来说,可能造成严重的安全隐患和运营中断。
漏洞根源在于Signal K Server对`/signalk/v1/access/requests`端点的实现方式。该端点用于处理客户端应用的访问请求授权流程,但开发者在实现时未考虑到内存管理的重要性。
具体技术细节如下:
1. **内存管理缺陷**:当请求到达端点时,服务器创建一个请求对象并将其存储在内存中的某个数据结构(可能是数组或Map)中。每次新请求都会添加新的对象,而系统没有实现任何过期机制、自动清理或数量限制。
2. **请求对象结构**:每个请求对象包含客户端标识、请求参数、时间戳等元数据,这些数据在内存中持续累积。
3. **利用方式**:攻击者可以使用简单的HTTP工具(如curl)或编写脚本,持续向该端点发送大量POST请求。由于无需认证,攻击可以在任何网络可达的情况下执行。
4. **崩溃机制**:Node.js的V8引擎对内存使用有默认限制(约1.4-1.7GB),当内存消耗接近这个限制时,垃圾回收机制会频繁触发但无法有效释放内存,最终导致进程因内存分配失败而崩溃。
5. **版本修复**:2.19.0版本通过添加请求对象的大小限制、定期清理机制或持久化存储来解决此问题,避免在内存中无限累积请求数据。