OPEN-WEBUI · CVE-2026-109289 · AI agents & MCP
FIX → 0.11.4
Open WebUI checked a user's access to the terminal server only once, when the terminal connection opened, so an administrator deactivating the user did not close an already open terminal. The user can keep running commands and reading or writing files on the terminal server until the connection closes.
first public Sep 27, 2026 · 2 sources
Could this affect your app?
Free first check from your website. Connect your repo for the full answer.
Only deployments that have configured a terminal server and granted users access to it are exposed. The risk applies to a user who was deactivated while keeping a terminal tab open, so teams without a configured terminal server can skip it.
Not affected if managed-hosting-without-terminals, no-terminal-server-configured
Who cares open-webui, python, self-hosted, terminal
pip show open-webui and see whether it falls in >= 0.8.8, < 0.11.4.Upgrade to 0.11.4
0.11.4 (fixed version; the fix is commit e8bd0661d, which re-checks open terminal sessions every ten seconds).When an administrator deactivates a user by setting their role to pending, Open WebUI refuses that user's later HTTP requests and new WebSocket handshakes. A terminal WebSocket the user had already opened stayed connected and kept forwarding their commands to the terminal server. Nothing re-checked the user's access once the connection was established, so deactivation did not cut off an open terminal.
Deployments without a configured terminal server are not affected.
A deactivated user who kept a terminal open can keep running commands on the terminal server as before, including reading and writing files there, until the connection closes for some other reason. The access is the same the user held before deactivation, so exploitation needs no skill, only an open tab at the right moment. Deactivation therefore does not give an administrator an immediate way to cut off a terminal user. Accounts that never had terminal access gain nothing.
Fixed in commit e8bd0661d. Every open terminal session now re-checks the user's access every ten seconds: the token is still valid, the user still exists and holds an approved role, the terminal server is still configured and enabled, and the user still has access to it. The session is closed when any check fails. After upgrading, a revoked user loses an open terminal within about ten seconds.
Check it with your coding agent
It reads this page and tells you if your code is affected.
Are you affected?
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
/api/v1/terminals/{server_id}/api/terminals/{session_id}) in backend/open_webui/routers/terminals.py.The proxy authenticated the user and checked their access to the terminal server only once, on the first message of the connection, and then relayed every later frame in both directions. The role change handling that disconnects a user's live Socket.IO sessions does not reach this raw WebSocket, and no periodic check existed. So a connection opened while the user was allowed stayed usable after that permission was withdrawn.
Reproduced by the reporter on Open WebUI 0.11.3 with the official Open Terminal container:
whoami; hostname; date -u.pending.date -u; echo post_deactivation_write > /tmp/owui-proof; cat /tmp/owui-proof through the same terminal. It runs and prints post_deactivation_write after the recorded role change.Independently confirmed on real 0.11.3 and 0.11.4 backends, with a stand-in echo server in place of the terminal server. On 0.11.3, commands sent 1 and 12 seconds after the role change both reached the terminal server. On 0.11.4, the proxy closed the connection within the ten-second check interval and later commands were no longer forwarded.
@zyakir13 reported the issue with a live demonstration against a running instance.
This page as .md · .json · CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/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
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.