JAVA.SV.LLM.VECTOR.NOFILTER

Vector retrieval without tenant-scoped filtering

The JAVA.SV.LLM.VECTOR.NOFILTER checker identifies vector or retrieval queries that do not apply tenant-scoped filtering.

Vulnerability and risk

Running a vector or retrieval query without tenant-scoped filtering can let one user access another user's data.

Mitigation and prevention

Apply filters derived from the current principal or tenant before running vector or retrieval queries.

Vulnerable code example

Copy
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;

public class Example {
    private final VectorStore vectorStore;

    public Example(VectorStore vectorStore) {
        this.vectorStore = vectorStore;
    }

    public void search(String query) {
        vectorStore.similaritySearch(
            SearchRequest.query(query)
                .topK(5)); // no tenant-scoped filter
    }
}

Fixed code example

Copy
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;

public class Example {
    private final VectorStore vectorStore;

    public Example(VectorStore vectorStore) {
        this.vectorStore = vectorStore;
    }

    public void search(String query, UserPrincipal principal) {
        vectorStore.similaritySearch(
            SearchRequest.query(query)
                .topK(5)
                .filterExpression("tenantId == '" + principal.getTenantId() + "'"));
    }
}

Security training

Application security training materials provided by Secure Code Warrior.