{"affected":[{"defaultStatus":"unaffected","ecosystem":"hex","packageName":"bandit","product":"bandit","source":"CNA: EEF","vendor":"mtrudel","versions":[{"lessThan":"1.14.0","status":"affected","version":"0.5.1","versionType":"semver"}]},{"defaultStatus":"unaffected","ecosystem":"github","packageName":"mtrudel/bandit","product":"bandit","source":"CNA: EEF","vendor":"mtrudel","versions":[{"lessThan":"220b9dfd27f9a21305be2afc75cbe585ddc24e7a","status":"affected","version":"bb407f2277dcb65a58dd8cc07913a0b58a80e266","versionType":"git"}]}],"cveId":"CVE-2026-110314","cwes":["CWE-602"],"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.\n\nWhen 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.\n\nThis issue affects bandit: from 0.5.1 before 1.14.0.","epss":{"date":"2026-11-02","percentile":0.32446,"score":0.00384},"exploits":[{"kind":"exploit","source":"ADP: CISA-ADP","url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-2v5v-8f9v-xh85"}],"kev":null,"metrics":[{"score":6.3,"severity":"medium","source":"CNA: EEF","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N","version":"4.0"},{"score":6.3,"severity":"medium","source":"NVD: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","version":"4.0"}],"modifiedAt":1793654243077,"publishedAt":1793021478257,"references":[{"source":"CNA: EEF","tags":["vendor-advisory","related"],"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-2v5v-8f9v-xh85"},{"source":"CNA: EEF","tags":["related"],"url":"https://cna.erlef.org/cves/CVE-2026-110314.html"},{"source":"CNA: EEF","tags":["related"],"url":"https://osv.dev/vulnerability/EEF-CVE-2026-110314"},{"source":"CNA: EEF","tags":["related"],"url":"https://github.com/mtrudel/bandit/commit/bb407f2277dcb65a58dd8cc07913a0b58a80e266"},{"source":"CNA: EEF","tags":["patch"],"url":"https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a"},{"source":"ADP: CISA-ADP","tags":["exploit"],"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-2v5v-8f9v-xh85"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://cna.erlef.org/cves/CVE-2026-110314.html"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://github.com/mtrudel/bandit/commit/bb407f2277dcb65a58dd8cc07913a0b58a80e266"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-2v5v-8f9v-xh85"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://osv.dev/vulnerability/EEF-CVE-2026-110314"},{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","tags":[],"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-2v5v-8f9v-xh85"}],"remediation":[{"kind":"workaround","source":"CNA: EEF","text":"Mark the WebSock state as stopped whenever a callback returns {:stop, ...}, and have handle_in/2 and handle_info/2 return {:ok, state} without acting while that mark is set."},{"kind":"fix","source":"CNA: EEF","text":"The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches.","url":"https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a"}],"revision":"6d70f6193c5316ecc8590143c55627650da717ae59f5ec3282a91d54f7884d7f","sources":[{"modifiedAt":1793653210938,"name":"CNA: EEF","retrievedAt":1793657309366,"url":"https://www.cve.org/CVERecord?id=CVE-2026-110314"},{"modifiedAt":1793654243077,"name":"NVD","retrievedAt":1793665340222,"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-110314"},{"modifiedAt":null,"name":"FIRST EPSS","retrievedAt":1793657319973,"url":"https://api.first.org/data/v1/epss?cve=CVE-2026-110314"}],"ssvc":{"assessedAt":1793653184175,"automatable":"no","exploitation":"poc","source":"ADP: CISA-ADP","technicalImpact":"partial"},"status":"published","title":"WebSocket frames keep reaching the WebSock after a server-initiated close in Bandit","updatedAt":1793665340222}