WebSocket frames keep reaching the WebSock after a server-initiated close in Bandit
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 1.14.0
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
Bandit, the Elixir HTTP and WebSocket server, is affected in versions before 1.14.0. A remote client can keep sending WebSocket data frames after the server has closed the connection, causing the application's handler code to keep running and potentially allowing actions that should have been blocked, such as an admin-only action after a failed authentication check.
Summarized by anthropic/claude-haiku-5.5. Verify details against the original sources.
Read the original description
Client-Side Enforcement of Server-Side Security vulnerability in the WebSocket connection handling of mtrudel bandit allows a remote client to keep running WebSock handler code after the server has stopped its connection, via data frames sent after ignoring the server's Close frame. When a WebSock callback returns {:stop, ...}, Bandit.WebSocket.Connection calls terminate/2, sends Close and shuts down the write side, but keeps the connection process running in a :closing state. handle_frame/3 and handle_info/3 never check that state, so later frames still reach handle_in/2 and later messages reach handle_info/2, with the state from the stop tuple, until the client sends Close, TCP drops or the idle timeout fires. A client refused in init/1 after a failed token check could still run an admin-only action. This issue affects bandit: from 0.5.1 before 1.14.0.
Timeline
- CVE published
- First seen by cve.now
Affected versions
- bandit
From 0.5.1 · fixed in 1.14.0
- mtrudel/bandit
From bb407f2277dcb65a58dd8cc07913a0b58a80e266 · fixed in 220b9dfd27f9a21305be2afc75cbe585ddc24e7a