Skip to content
LowVulnerability

GHSA-3wp3-xxj9-5jqq: Open WebUI: Cross-user model-list exposure via static cache key in get_all_models (aiocache key= vs key_builder= misuse)

Published
Record updated
View JSON
Affected
  • open-webui >= 0.6.27, < 0.10.0
Fixed in
0.10.0
  • released June 29, 2026, 25 days before disclosure
Known exploitation
Not listed in the CISA Known Exploited Vulnerabilities catalog at the last check.
EPSS
0.4%

Summary

The `get_all_models` handlers in `routers/openai.py` and `routers/ollama.py` in Open WebUI wrap their permission-filtered model lists in `@cached`, but pass `key=` instead of `key_builder=`. In aiocache 0.12.3, this makes every caller share one static cache entry within `MODELS_CACHE_TTL` (default 1 second), so one user can receive another user's model list, including models they are not permitted to see. The attacker cannot choose the victim or force a target's list into the cache.

Mitigation

Replace `key=` with `key_builder=` at both call sites and make the lambda take the function as its first argument, keying the cache on `user.id`, as in: @cached(ttl=MODELS_CACHE_TTL, key_builder=lambda _func, request, user=None: (f'openai_all_models_{user.id}' if user else 'openai_all_models'))