CVE-2026-44552: open-webui: Redis cache poisoning enables cross-instance tool hijack
GHSA-3x8w-4f7p-xxc2 HIGHOpen WebUI omits the instance-namespacing prefix (REDIS_KEY_PREFIX) on the Redis keys used to cache tool server and terminal server configurations, so any admin on one instance sharing a Redis backend can silently overwrite the tool server list read by all other instances. This matters at enterprise scale because shared Redis is an explicitly documented and supported topology for multi-region, blue-green, and hot-standby Open WebUI deployments — meaning the poisoned configuration hits every user session on the victim instance simultaneously. With 52 prior CVEs in the same package and a CVSS of 8.7 (S:C, C:H, I:H), the combination of broad deployment reach and silent failure mode (no errors raised, victim instance sees a valid cache entry) creates meaningful dwell-time risk. Upgrade to open-webui 0.9.0 immediately; if patching is blocked, isolate Redis instances per deployment unit and monitor for bare-key writes to 'tool_servers' or 'terminal_servers' in Redis.
What is the risk?
High. CVSS 8.7 with S:C (scoped impact crossing instance boundaries) accurately captures the blast radius. The PR:H precondition appears mitigating but is not: in shared-Redis topologies, an admin account on any one instance — whether legitimately provisioned, compromised, or escalated via companion vulnerabilities — becomes a lateral movement vector into every peer instance. The silent failure mode elevates real-world risk above what the CVSS score suggests, as defenders have no error signal and victim instances cannot distinguish legitimate from poisoned cache entries. No public exploit exists today, but the attack path is trivially reproducible by any admin who reads the advisory.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Open WebUI | pip | <= 0.8.12 | 0.9.0 |
Do you use Open WebUI? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
PATCH
Upgrade to open-webui 0.9.0 which applies REDIS_KEY_PREFIX to tool_servers and terminal_servers keys.
-
WORKAROUND (if patching is blocked): Assign each Open WebUI instance its own Redis database (SELECT db) or dedicated Redis instance to eliminate key collision surface entirely.
-
DETECTION
Enable Redis keyspace notifications and alert on writes to bare keys 'tool_servers' or 'terminal_servers' (i.e., keys without your expected prefix).
-
AUDIT
Review the tool server configuration on all instances for unauthorized or unexpected entries — particularly any server URLs not matching known-good infrastructure.
-
SCOPE REDUCTION
Enforce network-level controls so tool servers can only be reached from within your trusted perimeter, limiting the utility of a poisoned server entry for exfiltration.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-44552?
Open WebUI omits the instance-namespacing prefix (REDIS_KEY_PREFIX) on the Redis keys used to cache tool server and terminal server configurations, so any admin on one instance sharing a Redis backend can silently overwrite the tool server list read by all other instances. This matters at enterprise scale because shared Redis is an explicitly documented and supported topology for multi-region, blue-green, and hot-standby Open WebUI deployments — meaning the poisoned configuration hits every user session on the victim instance simultaneously. With 52 prior CVEs in the same package and a CVSS of 8.7 (S:C, C:H, I:H), the combination of broad deployment reach and silent failure mode (no errors raised, victim instance sees a valid cache entry) creates meaningful dwell-time risk. Upgrade to open-webui 0.9.0 immediately; if patching is blocked, isolate Redis instances per deployment unit and monitor for bare-key writes to 'tool_servers' or 'terminal_servers' in Redis.
Is CVE-2026-44552 actively exploited?
No confirmed active exploitation of CVE-2026-44552 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-44552?
1. PATCH: Upgrade to open-webui 0.9.0 which applies REDIS_KEY_PREFIX to tool_servers and terminal_servers keys. 2. WORKAROUND (if patching is blocked): Assign each Open WebUI instance its own Redis database (SELECT db) or dedicated Redis instance to eliminate key collision surface entirely. 3. DETECTION: Enable Redis keyspace notifications and alert on writes to bare keys 'tool_servers' or 'terminal_servers' (i.e., keys without your expected prefix). 4. AUDIT: Review the tool server configuration on all instances for unauthorized or unexpected entries — particularly any server URLs not matching known-good infrastructure. 5. SCOPE REDUCTION: Enforce network-level controls so tool servers can only be reached from within your trusted perimeter, limiting the utility of a poisoned server entry for exfiltration.
What systems are affected by CVE-2026-44552?
This vulnerability affects the following AI/ML architecture patterns: Multi-instance LLM chat platforms, Agent frameworks with external tool servers, Blue-green and multi-region AI deployments, Shared-cache LLM infrastructure, LLM-integrated plugin/tool ecosystems.
What is the CVSS score for CVE-2026-44552?
CVE-2026-44552 has a CVSS v3.1 base score of 8.7 (HIGH). The EPSS exploitation probability is 0.30%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.005 AI Agent Tool AML.T0051.001 Indirect AML.T0080 AI Agent Context Poisoning AML.T0081 Modify AI Agent Configuration AML.T0086 Exfiltration via AI Agent Tool Invocation AML.T0099 AI Agent Tool Data Poisoning Compliance Controls Affected
What are the technical details?
Original Advisory
# Redis Cache Keys tool_servers and terminal_servers Missing Instance Prefix Enable Cross-Instance Cache Poisoning ## Affected Component Tool server and terminal server Redis cache: - `backend/open_webui/utils/tools.py` (line 841, tool_servers SET) - `backend/open_webui/utils/tools.py` (line 850, tool_servers GET) - `backend/open_webui/utils/tools.py` (line 976, terminal_servers SET) - `backend/open_webui/utils/tools.py` (line 986, terminal_servers GET) ## Affected Versions Current main branch (commit `6fdd19bf1`) and likely all versions since the tool server / terminal server Redis cache was introduced. ## Description Open WebUI uses a `REDIS_KEY_PREFIX` (default `open-webui`) to namespace Redis keys, allowing multiple instances to safely share a single Redis backend. Every Redis key in the codebase uses this prefix — except the `tool_servers` and `terminal_servers` keys in `utils/tools.py`, which use bare key names. When two or more Open WebUI instances share a Redis database (a supported and documented deployment pattern, e.g., for multi-region deployments, blue-green setups, or cluster topologies), the unprefixed keys collide. An admin on Instance A writing to `tool_servers` overwrites the value read by Instance B — causing Instance B's users to receive Instance A's tool server configuration. ```python # utils/tools.py — unprefixed keys (problem) await request.app.state.redis.set('tool_servers', ...) # line 841 json.loads(await request.app.state.redis.get('tool_servers')) # line 850 await request.app.state.redis.set('terminal_servers', ...) # line 976 json.loads(await request.app.state.redis.get('terminal_servers')) # line 986 # Every other Redis key in the codebase — prefixed (correct pattern) f'{REDIS_KEY_PREFIX}:auth:token:{jti}:revoked' f'{REDIS_KEY_PREFIX}:ratelimit:{email}:{bucket}' f'{REDIS_KEY_PREFIX}:tasks:commands' ``` ## Attack Scenario Two Open WebUI instances (A and B) share a Redis backend — a supported deployment for multi-region setups, blue-green deployments, or hot-standby. Both instances have their own admin accounts; the shared Redis was chosen for coordinated session handling, rate limiting, and task management. 1. Attacker is an admin on Instance A (a legitimately provisioned admin, or one that escalated via any available path including the LDAP empty-password or stale-admin-role findings). 2. Attacker on Instance A configures a tool server pointing to `https://attacker-controlled.example.com/openapi.json`. This triggers `utils/tools.py:841` to write the new tool server list under the bare key `tool_servers`. 3. Instance B's users query tools. Instance B reads from `tool_servers` (line 850) — gets Instance A's poisoned list, which now includes the attacker's server alongside or instead of Instance B's legitimate tool servers. 4. Instance B's users invoke tools through the model's context. The attacker's server receives tool call payloads containing: chat content, user identity, OAuth tokens scoped to the tool server (if the user has bound their external account), and in-flight conversation context. 5. The attacker's server returns arbitrary tool responses, which are fed back into Instance B's LLM context as "trusted tool output" — enabling prompt injection, misinformation delivery, and further data exfiltration cascades. The same cross-instance poisoning applies to `terminal_servers`. ## Impact - Cross-instance cache poisoning: an admin on one instance affects all users of another instance sharing the Redis backend - Data exfiltration: tool call payloads contain chat content and user identity, delivered to the attacker's server - Prompt injection delivery: attacker-returned tool responses enter the victim instance's LLM context as trusted data - Undermines the multi-instance isolation guarantee that `REDIS_KEY_PREFIX` was introduced to provide - Silent failure mode: no error is raised; the victim instance sees a valid, signed cache entry and has no way to detect it came from a different instance ## Preconditions - Multiple Open WebUI instances share a single Redis backend (a supported and documented deployment) - Attacker has admin access on one of the instances (or escalates to admin via any available path)
Exploitation Scenario
An attacker holds admin credentials on Open WebUI Instance A in a multi-region deployment where Instances A and B share a Redis backend for session management and rate limiting. The attacker navigates to Instance A's admin settings and adds a tool server pointing to an attacker-controlled HTTPS endpoint serving a plausible OpenAPI schema. Open WebUI writes this list to the bare Redis key 'tool_servers'. When Instance B's users interact with the LLM and trigger tool calls, Instance B reads 'tool_servers' from Redis, gets Instance A's poisoned list, and routes tool invocations to the attacker's server. The attacker receives chat content, user identities, and any OAuth tokens scoped to connected tool integrations. The attacker's server returns crafted tool responses — for example, false search results or fabricated API responses — which Instance B's LLM treats as ground truth, enabling targeted disinformation or cascading prompt injection into ongoing user sessions. No alert fires on Instance B; it sees a well-formed cache entry.
Weaknesses (CWE)
CWE-668 — Exposure of Resource to Wrong Sphere: The product exposes a resource to the wrong control sphere, providing unintended actors with inappropriate access to the resource.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:N References
Timeline
Related Vulnerabilities
CVE-2026-44551 9.1 open-webui: LDAP auth bypass — full account takeover
Same package: open-webui CVE-2026-45672 8.8 open-webui: code exec gate bypass via API endpoint
Same package: open-webui CVE-2025-64495 8.7 Open WebUI: XSS-to-RCE via malicious prompt injection
Same package: open-webui CVE-2026-45315 8.7 open-webui: stored XSS → JWT theft and admin takeover
Same package: open-webui CVE-2026-54011 8.7 Open WebUI: Stored XSS via Mermaid loose mode in preview
Same package: open-webui