CVE-2025-68620Signal K Server是一款运行在船舶中央枢纽的服务器应用程序。该漏洞影响2.19.0之前的所有版本,允许攻击者链式利用两个功能来窃取JWT认证令牌,无需任何事先认证。攻击结合了基于WebSocket的请求枚举和未经身份验证的访问请求状态轮询。攻击者可以通过WebSocket连接获取所有缓存的服务器事件,包括包含待处理访问请求详情的ACCESS_REQUEST事件,然后通过未授权的REST端点轮询请求状态,当管理员批准请求后即可在响应中获取JWT令牌明文。这使得攻击者能够完全绕过认证机制,窃取合法设备的凭证。
漏洞涉及两个独立但可链式利用的安全缺陷。第一处位于startServerEvents函数,该函数在WebSocket客户端连接时使用serverevents=all查询参数,会遍历并向任何连接的客户端(包括未认证用户)发送app.lastServerEvents中的所有缓存事件,包括ACCESS_REQUEST事件,其中包含请求ID、客户端标识符、描述、请求的权限和IP地址。由于WebSocket连接允许readonly用户(包括allow_readonly为true时的未认证用户),攻击者可获取敏感信息。第二处位于queryRequest函数和对应的REST端点GET /signalk/v1/access/requests/:id,该端点返回完整访问请求状态但不要求认证,使用readonly认证即可访问。当管理员批准请求时,响应中包含以明文形式颁发的JWT令牌。攻击者可以主动创建请求后轮询等待批准,或被动监控WebSocket发现现有请求ID后等待令牌发放。