Launch Week Day 1: Announcing Security Design Review
HIGH 8.7 PyPI

Open WebUI has stored XSS via attacker-controlled file extension in /api/v1/audio/transcriptions

GHSA-m8f9-9whg-f4xr · CVE-2026-45315

Published · Modified

Description

Summary

The audio transcription upload endpoint takes the file extension from the user-supplied filename and saves the file under CACHE_DIR/audio/transcriptions/.. The /cache/{path} route serves these files via FileResponse, which sets Content-Type from the on-disk extension and emits no Content-Disposition. A verified user with the default-on chat.stt permission can upload a polyglot WAV+HTML file named pwn.html and trick any other user into opening the resulting URL — the response comes back as text/html and any embedded