highVulnerability

GHSA-r3hx-x5rh-p9vv

## Remote Code Execution via `eval()` in Elasticsearch Result Deserialization ### Summary The Elasticsearch backend in django-haystack calls `eval()` on raw field values returned from Elasticsearch when a `SearchField` is declared with an `index_fieldname` alias that differs from the logical field name. During result processing, the backend looks up fields by logical name but Elasticsearch stores them under the alias key; the lookup fails and the value falls through to `_to_python()` → `eval()`. An attacker who can control content that is indexed into Elasticsearch—and can trigger or wait for a search that returns it—achieves arbitrary code execution in the Django application process. CVSS 3.1 Base Score: **8.5 (High)**. ### Details **Sink — `haystack/backends/elasticsearch_backend.py:865`:** ```python converted_value = eval(value) ``` `_to_python()` (line ~850) attempts to parse a string value by calling `eval()` before performing any type-safety check. If the value is an attacker-controlled Python expression such as `__import__('os').system(...)`, the expression is executed unconditionally. **Root cause — `haystack/backends/elasticsearch_backend.py:727–737`:** ```python for key, value in source.items(): string_key = str(key) if string_key in index.fields and hasattr(index.fields[string_key], "convert"): additional_fields[string_key] = index.fields[string_key].convert(value) else: additional_fields[string_key] = self._to_python(value) ``` `index.fields` is keyed by the *logical* field name (e.g. `"name"`), but Elasticsearch stores the document under the `index_fieldname` alias (e.g. `"name_s"`). Because `"name_s" not in index.fields`, the branch falls through to `self._to_python(value)`. **Data flow (source → sink):** 1. `haystack/indexes.py:226` — `self.prepared_data[field.index_fieldname] = field.prepare(obj)` stores data under the alias. 2. `haystack/backends/elasticsearch_backend.py:218` — prepared data copied into `final

Properties

ghsa_id
GHSA-r3hx-x5rh-p9vv
summary
django-haystack: Remote Code Execution via `eval()` in Elasticsearch Result Deserialization
severity
high
cve_id
GHSA-r3hx-x5rh-p9vv
is_ghsa_only
true
ghsa_published
2026-07-15T22:42:28Z
source_url
https://github.com/advisories/GHSA-r3hx-x5rh-p9vv
ghsa_updated
2026-07-15T22:42:29Z

Related Entities (4)

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]pip/django-haystack

AFFECTS (1)

[Software]pip/django-haystack

HAS_WEAKNESS (1)

[Weakness]Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-r3hx-x5rh-p9vv — Ninja Signal Threat Intelligence | Ninja Signal