Description
RedisChatMemoryRepository.findByMetadata() builds RediSearch tag and text queries from caller-supplied metadata values without applying RediSearchUtil.escape(), unlike get(), clear(), and findByTimeRange() in the same class which do escape their inputs. An application that passes user-controlled values to findByMetadata() on a tag-typed metadata field allows an attacker to inject RediSearch syntax (e.g. x} | *) that breaks out of the tag clause and matches all indexed chat messages across every conversation in the index.
Spring AI 2.0.0
Published: 2026-08-27
Score: 4.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Cross-Conversation Data Exposure
Action: Assess Impact
AI Analysis

Impact

The vulnerability occurs in RedisChatMemoryRepository.findByMetadata() where metadata values supplied by callers are incorporated into RediSearch tag and text queries without escaping. Because RediSearchUtil.escape() is not applied, an attacker can inject RediSearch syntax such as x} | * to break out of the tag clause. This allows a crafted input to match all indexed chat messages across every conversation, effectively leaking data that should be restricted to a single conversation. The flaw results in an information‑disclosure compromise; it does not provide execution or denial‑of‑service capabilities.

Affected Systems

Spring AI version 2.0.0 is affected. The issue is present in the Spring AI library that implements the RedisChatMemoryRepository class. Applications that use this library and invoke findByMetadata() with user‑controlled metadata values are vulnerable.

Risk and Exploitability

The CVSS score of 4.3 places this flaw in the low‑severity range, indicating that the impact is limited to confidentiality rather than integrity or availability. The EPSS score is 0.00215, signifying a very low probability of exploitation, and the flaw is not listed in the CISA KEV catalog, suggesting no known widespread exploitation. Nevertheless, an attacker who can control metadata keys or values can directly inject RediSearch syntax, bypassing conversation boundaries. The primary attack vector is through any user‑controlled input passed to findByMetadata(); no elevated privileges or special network access are required beyond the normal application context. Given the low CVSS, very low EPSS, and absence from KEV, the risk can be considered moderate but still warrants mitigation to prevent cross‑conversation data leaks.

Generated by OpenCVE AI on August 29, 2026 at 02:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Spring AI to a version that applies RediSearchUtil.escape() in findByMetadata() or apply an official patch if available
  • Validate or whitelist characters allowed in metadata values before passing them to findByMetadata(), ensuring no RediSearch syntax can be injected
  • Use the safer get(), clear(), or findByTimeRange() methods in RedisChatMemoryRepository, which properly escape inputs, instead of findByMetadata() when possible

Generated by OpenCVE AI on August 29, 2026 at 02:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

References
History

Mon, 31 Aug 2026 17:30:00 +0000

Type Values Removed Values Added
First Time appeared Vmware
Vmware spring Ai
CPEs cpe:2.3:a:vmware:spring_ai:*:*:*:*:*:*:*:*
Vendors & Products Vmware
Vmware spring Ai

Sat, 29 Aug 2026 01:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-20

Fri, 28 Aug 2026 23:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-943
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 28 Aug 2026 08:45:00 +0000

Type Values Removed Values Added
First Time appeared Spring
Spring spring Ai
Vendors & Products Spring
Spring spring Ai

Fri, 28 Aug 2026 07:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-20

Thu, 27 Aug 2026 18:00:00 +0000

Type Values Removed Values Added
Description RedisChatMemoryRepository.findByMetadata() builds RediSearch tag and text queries from caller-supplied metadata values without applying RediSearchUtil.escape(), unlike get(), clear(), and findByTimeRange() in the same class which do escape their inputs. An application that passes user-controlled values to findByMetadata() on a tag-typed metadata field allows an attacker to inject RediSearch syntax (e.g. x} | *) that breaks out of the tag clause and matches all indexed chat messages across every conversation in the index. Spring AI 2.0.0
Title RediSearch Tag Injection in RedisChatMemoryRepository Allows Cross-Conversation Data Exposure
References
Metrics cvssV3_1

{'score': 4.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N'}


Subscriptions

Spring Spring Ai
Vmware Spring Ai
cve-icon MITRE

Status: PUBLISHED

Assigner: vmware

Published:

Updated: 2026-08-28T22:47:00.784Z

Reserved: 2026-07-04T18:14:10.167Z

Link: CVE-2026-59319

cve-icon Vulnrichment

Updated: 2026-08-28T19:01:25.377Z

cve-icon NVD

Status : Analyzed

Published: 2026-08-27T20:17:57.913

Modified: 2026-08-31T17:18:49.620

Link: CVE-2026-59319

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-29T02:30:17Z

Weaknesses
  • CWE-943

    Improper Neutralization of Special Elements in Data Query Logic