<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Signal K — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/vendors/signal-k/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 03 Jan 2024 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/vendors/signal-k/feed.xml" rel="self" type="application/rss+xml"/><item><title>Signal K Server WebSocket Login Brute-Force Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2024-01-signalk-brute-force/</link><pubDate>Wed, 03 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-signalk-brute-force/</guid><description>The Signal K server's WebSocket login endpoint lacks rate limiting, allowing attackers to bypass HTTP rate limiting by opening a WebSocket connection and attempting unlimited password guesses.</description><content:encoded><![CDATA[<p>Signal K server versions 2.24.0 and earlier are vulnerable to credential brute-forcing via the WebSocket protocol. The vulnerability stems from the lack of rate limiting on the WebSocket login endpoint (<code>/signalk/v1/stream</code>), which allows attackers to bypass the existing HTTP rate limiting mechanism. By establishing a WebSocket connection, an attacker can send an unlimited number of login attempts, effectively bypassing the intended rate limiting defense of 100 attempts per 10 minutes on the HTTP login endpoints. This makes it feasible to conduct dictionary attacks and potentially gain unauthorized access to Signal K servers. Signal K servers are commonly deployed on boat networks.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker identifies a vulnerable Signal K server.</li>
<li>Attacker establishes a WebSocket connection to <code>ws://server:3000/signalk/v1/stream?subscribe=none</code>.</li>
<li>The server sends a hello message, confirming the connection.</li>
<li>Attacker sends a series of login attempts via WebSocket messages using the following JSON format: <code>{&quot;requestId&quot;: &quot;1&quot;, &quot;login&quot;: {&quot;username&quot;: &quot;admin&quot;, &quot;password&quot;: &quot;guess1&quot;}}</code>.</li>
<li>The server processes each login attempt without rate limiting.</li>
<li>Attacker continues sending login attempts using different password guesses.</li>
<li>If successful, the attacker gains unauthorized access to the Signal K server.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows attackers to bypass HTTP rate limiting and brute-force credentials to gain unauthorized access to Signal K servers. An attacker can achieve a brute-forcing speed of approximately 20 attempts per second, limited by the bcrypt hashing algorithm. A dictionary attack with 10,000 words can be completed in approximately 8 minutes over a single connection. Since Signal K servers are commonly deployed on boat networks, successful exploitation can lead to unauthorized access to sensitive maritime data.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Monitor network connections to Signal K servers for unusually high rates of WebSocket login attempts. Create a detection rule that triggers when a single IP address sends more than 5 login attempts per second via the WebSocket protocol.</li>
<li>Deploy the Sigma rule <code>Detect High Volume SignalK WebSocket Login Attempts</code> to identify potential brute-force attacks against Signal K servers.</li>
<li>Upgrade Signal K servers to a patched version that includes rate limiting on the WebSocket login endpoint.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>credential-access</category><category>brute-force</category><category>websocket</category></item></channel></rss>