CVE-2026-70489 Overview
CVE-2026-70489 is a resource exhaustion vulnerability [CWE-400] in Open WebUI, an extensible self-hosted AI platform. The flaw affects automation recurrence parsing in backend/open_webui/utils/automations.py across versions 0.9.0 through 0.11.0. Minutely and hourly recurrence rules anchor at a fixed date of 2000-01-01 and walk forward one interval at a time to compute the next run. An authenticated user submitting a single FREQ=MINUTELY rule forces enumeration of roughly a quarter-century of occurrences synchronously. This blocks the event loop that serves scheduler, HTTP, and WebSocket traffic, degrading availability for every other user.
Critical Impact
A single crafted automation rule can stall the Open WebUI event loop, denying service to all concurrent users of the instance.
Affected Products
- Open WebUI 0.9.0 through 0.10.x
- Self-hosted AI platform deployments using automation features
- Instances exposing authenticated automation APIs
Discovery Timeline
- 2026-08-04 - CVE-2026-70489 published to NVD
- 2026-08-05 - Last updated in NVD database
Technical Details for CVE-2026-70489
Vulnerability Analysis
The vulnerability originates in the _parse_rule function within backend/open_webui/utils/automations.py. Open WebUI parses iCalendar RRULE recurrence strings to schedule automation jobs. For sub-daily frequencies, the parser anchors DTSTART at a fixed epoch of 2000-01-01 00:00. When a rule specifies FREQ=MINUTELY with a small INTERVAL, the scheduler walks forward from the epoch one interval at a time to compute the next occurrence. Iterating from year 2000 to present enumerates roughly 13 million minute-level occurrences per rule. The scheduler repeats this computation for every claimed row on each poll cycle. The work runs synchronously on the same asyncio event loop that handles HTTP requests and WebSocket connections. All concurrent traffic stalls while the parser completes.
Root Cause
The root cause is unbounded synchronous iteration over recurrence occurrences from a fixed historical anchor. The code lacked clock-aligned interval snapping, so dateutil.rrule had to enumerate every intervening occurrence rather than jumping directly to the next boundary near now.
Attack Vector
An authenticated user with permission to create automations submits an RRULE such as RRULE:FREQ=MINUTELY;INTERVAL=1. Each scheduler poll triggers the expensive enumeration, and repeated rules amplify the impact. The attack requires low privileges and no user interaction, and it is exploitable over the network.
def _parse_rule(s: str, now: Optional[datetime] = None):
"""Parse RRULE with clock-aligned DTSTART for sub-daily frequencies.
- MINUTELY/HOURLY rules use a fixed epoch DTSTART (2000-01-01 00:00)
+ SECONDLY/MINUTELY/HOURLY rules use a fixed epoch DTSTART (2000-01-01 00:00)
so intervals snap to clock boundaries (e.g. every 5min = :00, :05, :10).
"""
- raw = s.replace('RRULE:', '')
- parts = dict(p.split('=', 1) for p in raw.split(';') if '=' in p)
+ rrule_line = next((line for line in s.splitlines() if line.upper().startswith('RRULE:')), s)
+ raw = rrule_line.split(':', 1)[1] if rrule_line.upper().startswith('RRULE:') else rrule_line
+ parts = {k.upper(): v for k, v in (p.split('=', 1) for p in raw.split(';') if '=' in p)}
freq = parts.get('FREQ', '')
- if freq in ('MINUTELY', 'HOURLY'):
+ if freq in ('SECONDLY', 'MINUTELY', 'HOURLY'):
epoch = datetime(2000, 1, 1, 0, 0, 0)
Source: GitHub Commit c4ae8c8. The patch snaps DTSTART to the nearest interval boundary relative to now, avoiding the multi-decade enumeration.
Detection Methods for CVE-2026-70489
Indicators of Compromise
- Automation rules containing FREQ=MINUTELY or FREQ=HOURLY with small INTERVAL values submitted shortly before availability degradation.
- Sustained high CPU consumption by the Open WebUI backend process without corresponding user traffic volume.
- HTTP and WebSocket clients reporting timeouts or dropped connections while the scheduler poll runs.
Detection Strategies
- Audit the automations database table for recurrence rules with sub-daily frequencies created by non-administrative accounts.
- Instrument the scheduler poll loop with timing metrics and alert when a single poll exceeds an expected duration.
- Log and review calls to _parse_rule with the input RRULE string to identify anomalous inputs.
Monitoring Recommendations
- Track event loop lag using an asyncio watchdog and alert when latency spikes correlate with scheduler activity.
- Monitor request success rates and WebSocket disconnects per Open WebUI instance to detect service degradation.
- Retain application logs centrally so scheduler stalls can be correlated with the responsible automation rule and user.
How to Mitigate CVE-2026-70489
Immediate Actions Required
- Upgrade Open WebUI to version 0.11.0 or later, which contains the fix in _parse_rule.
- Inventory existing automation rules and remove any FREQ=MINUTELY or FREQ=SECONDLY entries that were not authorized.
- Restrict automation creation privileges to trusted accounts until the upgrade is deployed.
Patch Information
The fix is delivered in Open WebUI 0.11.0 via commit c4ae8c8. The patched _parse_rule computes DTSTART as epoch + ((now - epoch) // step) * step, snapping the anchor to the current interval boundary rather than iterating from year 2000. See the GitHub Security Advisory GHSA-73cq-mcgh-379c and the GitHub Release v0.11.0 for full details.
Workarounds
- Disable the automations feature or block access to the automation API endpoints until the upgrade is applied.
- Implement a reverse-proxy rule that rejects requests carrying RRULE payloads with FREQ=MINUTELY or FREQ=SECONDLY.
- Enforce role-based access so only administrators can create or edit recurrence rules.
# Upgrade Open WebUI container to the patched release
docker pull ghcr.io/open-webui/open-webui:0.11.0
docker stop open-webui && docker rm open-webui
docker run -d --name open-webui -p 3000:8080 \
-v open-webui:/app/backend/data \
ghcr.io/open-webui/open-webui:0.11.0
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

