🔍 CVE-2025-68620

9.1
CVSS Score
CRITICAL
2026-01-01
2026-10-07 11:10
✅ 완료

🇰🇷 한글 설명

Signal K Server의 두 가지 취약점이 결합되어 인증 없이 JWT 토큰을 탈취할 수 있는 심각한 보안 결함이 발견되었습니다. 공격자는 WebSocket 이벤트 열거와 액세스 요청 상태 폴링을 통해 관리자가 승인한 토큰을 평문으로 획득하여 인증을 우회할 수 있습니다.

💡 쉬운 설명

해커가 아무런 로그인 없이도 서버의 비밀 통로를 통해 관리자의 승인된 접속 열쇠(토큰)를 훔쳐낼 수 있는 문제입니다. 이 열쇠를 얻으면 해커가 마치 정당한 관리자인 것처럼 서버를 마음대로 조종할 수 있습니다.

🇺🇸 원문 (English)

Signal K Server is a server application that runs on a central hub in a boat. Versions prior to 2.19.0 expose two features that can be chained together to steal JWT authentication tokens without any prior authentication. The attack combines WebSocket-based request enumeration with unauthenticated polling of access request status. The first is Unauthenticated WebSocket Request Enumeration: When a WebSocket client connects to the SignalK stream endpoint with the `serverevents=all` query parameter, the server sends all cached server events including `ACCESS_REQUEST` events that contain details about pending access requests. The `startServerEvents` function iterates over `app.lastServerEvents` and writes each cached event to any connected client without verifying authorization level. Since WebSocket connections are allowed for readonly users (which includes unauthenticated users when `allow_readonly` is true), attackers receive these events containing request IDs, client identifiers, descriptions, requested permissions, and IP addresses. The second is Unauthenticated Token Polling: The access request status endpoint at `/signalk/v1/access/requests/:id` returns the full state of an access request without requiring authentication. When an administrator approves a request, the response includes the issued JWT token in plaintext. The `queryRequest` function returns the complete request object including the token field, and the REST endpoint uses readonly authentication, allowing unauthenticated access. An attacker has two paths to exploit these vulnerabilities. Either the attacker creates their own access request (using the IP spoofing vulnerability to craft a convincing spoofed request), then polls their own request ID until an administrator approves it, receiving the JWT token; or the attacker passively monitors the WebSocket stream to discover request IDs from legitimate devices, then polls those IDs and steals the JWT tokens when administrators approve them, hijacking legitimate device credentials. Both paths require zero authentication and enable complete authentication bypass. Version 2.19.0 fixes the underlying issues.

📍 영향받는 시스템

Signal K Server 2.19.0 미만 버전

⚔️ 공격 벡터

WebSocket 이벤트 열거를 통한 요청 ID 확보 후, 인증 없이 REST API를 폴링하여 JWT 토큰 탈취

🛡️ 대응 방법

Signal K Server를 최신 버전인 2.19.0 이상으로 즉시 업데이트하십시오.

🔧 검증 코드

출력된 버전 정보가 2.19.0 미만이면 취약한 상태이며, 2.19.0 이상이면 안전합니다.

Shell / Script
curl -s http://<target_ip>:<port>/signalk/version | grep -E '2\.[0-9]{2}'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

💻 영향받는 소프트웨어

IBM Security Verify Access