CVE-2026-44550Medium· 5.0▾ SunlitOpen WebUI's Mass Assignment via Pydantic extra='allow' Allows Creating Folders in Other Users' Accounts
▾ Sunlit zone — Low / medium · no exploitation signal
impact 27.5 · likelihood 0.1 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 13.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
0.3%
Folder creation endpoint and form model:
backend/open_webui/models/folders.py (lines 72-77, FolderForm with extra='allow')backend/open_webui/models/folders.py (lines 95-106, insert_new_folder dict construction)backend/open_webui/routers/folders.py (line 119, create_folder endpoint)Current main branch (commit 6fdd19bf1) and likely all versions since FolderForm adopted extra='allow'.
FolderForm uses model_config = ConfigDict(extra='allow'), which permits arbitrary fields to pass through Pydantic validation and be included in model_dump(exclude_unset=True). In insert_new_folder, the server-assigned user_id is placed at the start of the dict and then overwritten by the spread of form data:
# models/folders.py:95-106
folder = FolderModel(
**{
'id': id, # server
'user_id': user_id, # server — overwritten below
**(form_data.model_dump(exclude_unset=True) or {}), # user-controlled (extra='allow')
'parent_id': parent_id,
'created_at': int(time.time()),
'updated_at': int(time.time()),
}
)
Because FolderModel declares user_id: str as a real field (not just a form extra), any attacker-supplied user_id in the POST body is accepted by the model and persisted on the Folder row.
GET /api/v1/users/search, intentionally accessible to verified users for sharing UI), shared chat metadata, or channel member lists.POST /api/v1/folders/
{
"name": "Important: Click here",
"user_id": "<victim_user_id>",
"meta": {"icon": "warning"},
"data": {...}
}
user_id field (allowed by extra='allow').insert_new_folder spreads the form data over the server-set 'user_id': user_id, overwriting it with the attacker's value.Folder row is persisted with user_id = <victim_user_id>.GET /api/v1/folders/ filters by the viewer's own user_id.The attacker can repeat this to plant multiple folders, use crafted name values for phishing ("Click here to recover account" / "Security alert"), and abuse the meta and data fields to add visual elements that further mimic legitimate content.
name, meta, and data render in the victim's UI in a trusted contextuser_id — so confidentiality is preserved, but integrity and trust are compromisedfeatures.folders permission (default for all users)open-webui < 0.9.0Upgrade to a patched release:
open-webui 0.9.0Connected by shared product, vendor, weakness, or advisory.
CVE-2026-56400High· 8.3Open WebUI has a CORS misconfiguration and session validation issue
CVE-2026-56398High· 7.3Open WebUI vulnerable to stored XSS via OAuth picture claim stored as SVG data URI in profile_image_url
CVE-2026-45666Medium· 6.5Open WebUI has an Indirect Object Reference (IDOR) in user notes
CVE-2026-45385Medium· 4.3Open WebUI has an IDOR vulnerability in the update_message_by_id API endpoint
CVE-2026-29071Low· 3.1Open WebUI's Insecure Direct Object Reference (IDOR) allows access to other users' memories
CVE-2026-28786Medium· 4.3Open WebUI vulnerable to Path Traversal in `POST /api/v1/audio/transcriptions`