Medium severity4.3GHSA Advisory· Published May 15, 2026
CVE-2026-45347
CVE-2026-45347
Description
Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.5.11, there is a blind server side request forgery (SSRF) via the PDF generate function. In the PDF export, user inputs are interpreted as HTML and embedded into the PDF. According to tests, scripts and some potentially dangerous tags (iFrame, Object, etc.) are blocked, preventing server-side content from being read through this vulnerability. However, an image tag can be used to force a server-side request (SSRF), as shown in the following below. This vulnerability is fixed in 0.5.11.
Affected products
1- Range: < 0.5.11
Patches
1167c8bf00d16Prevent SSRF and HTML injection
1 file changed · +7 −6
backend/open_webui/utils/pdf_generator.py+7 −6 modified@@ -2,6 +2,7 @@ from io import BytesIO from pathlib import Path from typing import Dict, Any, List +from html import escape from markdown import markdown @@ -11,7 +12,6 @@ from open_webui.env import STATIC_DIR, FONTS_DIR from open_webui.models.chats import ChatTitleMessagesForm - class PDFGenerator: """ Description: @@ -41,13 +41,13 @@ def format_timestamp(self, timestamp: float) -> str: def _build_html_message(self, message: Dict[str, Any]) -> str: """Build HTML for a single message.""" - role = message.get("role", "user") - content = message.get("content", "") + role = escape(message.get("role", "user")) + content = escape(message.get("content", "")) timestamp = message.get("timestamp") - model = message.get("model") if role == "assistant" else "" + model = escape(message.get("model") if role == "assistant" else "") - date_str = self.format_timestamp(timestamp) if timestamp else "" + date_str = escape(self.format_timestamp(timestamp) if timestamp else "") # extends pymdownx extension to convert markdown to html. # - https://facelessuser.github.io/pymdown-extensions/usage_notes/ @@ -76,6 +76,7 @@ def _build_html_message(self, message: Dict[str, Any]) -> str: def _generate_html_body(self) -> str: """Generate the full HTML body for the PDF.""" + escaped_title = escape(self.form_data.title) return f""" <html> <head> @@ -84,7 +85,7 @@ def _generate_html_body(self) -> str: <body> <div> <div> - <h2>{self.form_data.title}</h2> + <h2>{escaped_title}</h2> {self.messages_html} </div> </div>
Vulnerability mechanics
AI mechanics synthesis has not run for this CVE yet.
References
4News mentions
0No linked articles in our index yet.