mirror of
https://github.com/searxng/searxng.git
synced 2026-06-07 10:27:54 +02:00
Fix XSS via unsafe rendering of untrusted external data in templates (#5826)
Remove |safe filter from 6 template locations where data from external
search engine APIs was rendered as raw HTML without sanitization. Jinja2
autoescape now properly escapes these fields.
The |safe filter was originally added in commit 213041adc (March 2021)
by copying the pattern from result.title|safe and result.content|safe.
However, title and content are pre-escaped via escape() in webapp.py
lines 704-706 before highlight_content() adds trusted <span> tags for
search term highlighting. The metadata, info.value, link.url_label,
repository, and filename fields never go through any escaping and flow
directly from external API responses to the template.
Affected templates and their untrusted data sources:
- macros.html: result.metadata from DuckDuckGo, Reuters, Presearch,
Podcast Index, Fyyd, bpb, moviepilot, mediawiki, and others
- paper.html: result.metadata from academic search engines
- map.html: info.value and link.url_label from OpenStreetMap
user-contributed extratags
- code.html: result.repository and result.filename from GitHub API
Example exploit: a search engine API returning
metadata='<img src=x onerror=alert(document.cookie)>' would execute
arbitrary JavaScript in every user's browser viewing that result.
This commit is contained in:
@@ -84,7 +84,7 @@
|
||||
{%- endif -%}
|
||||
|
||||
{%- if result.metadata %}
|
||||
<div class="highlight">{{ result.metadata|safe }}</div>
|
||||
<div class="highlight">{{ result.metadata }}</div>
|
||||
{% endif -%}
|
||||
|
||||
<p class="altlink">
|
||||
|
||||
Reference in New Issue
Block a user