RAG-beveiliging: complete gids
Securing Retrieval-Augmented Generation systems against document poisoning, retrieval manipulation, and embedding attacks
Updated: August 2026 • Onderdeel van OWASP LLM08
Wat is RAG?
Retrieval-Augmented Generation (RAG) is an AI architecture that combines large language models with external knowledge retrieval. Enterprise LLM deployments now use RAG extensively, making its security critical.
1. Gebruikersquery
Gebruiker dient een vraag of prompt in op het systeem
2. Insluiten
Query wordt geconverteerd naar vector-inbedding
3. Ophalen
Vergelijkbare documenten opgehaald uit vector-DB
4. Augmentatie
Opgehaalde context toegevoegd aan prompt
5. Generatie
LLM genereert een antwoord met behulp van context
De Trust Paradox
RAG systems have a fundamental security flaw: user queries are treated as untrusted input, but retrieved context is implicitly trusted - even though both enter the same prompt. This creates a significant attack surface that traditional security doesn't address.
Aanvalsvectoren
1. Documentvergiftiging
Het injecteren van schadelijke inhoud in documenten opgeslagen in de kennisbank.
Hoe het werkt
- Aanvaller uploadt of injecteert schadelijke documenten
- Documenten worden ingebed en opgeslagen in vector-DB
- Als een relevante zoekopdracht wordt gedaan, wordt een vergiftigd document opgehaald
- LLM neemt kwaadaardige context op in reactie
Impact
- 90% success met slechts 5 vergiftigde documenten
- Werkt zelfs in databases met miljoenen documenten
- Kan schadelijke, bevooroordeelde of onjuiste resultaten veroorzaken
- Moeilijk te detecteren na implementatie
2. Ophaalmanipulatie
Manipuleren welke documenten worden opgehaald om de uitvoer te beïnvloeden.
Hoe het werkt
- De aanvaller stelt zoekopdrachten in om specifiek ophalen te activeren
- Maakt misbruik van zwakke punten in het rangschikkingsalgoritme
- Gebruikt semantische gelijkenis om het ophalen te kapen
- Manipulatie tussen gebruikers in gedeelde systemen
Impact
- Forceert het ophalen van door aanvallers gecontroleerde inhoud
- Kan legitieme inhoud onderdrukken
- Maakt gerichte manipulatie mogelijk
- Breekt het vertrouwen in de ophaalkwaliteit
3. Inversie insluiten
Originele gegevens herstellen van vector inbedding.
Hoe het werkt
- Aanvaller krijgt toegang tot vectordatabase
- Maakt gebruik van inversietechnieken bij insluitingen
- Reconstrueert originele tekst van vectoren
- Herstelt gevoelige ingebedde gegevens
Impact
- Recover 50-70% of input words
- Gevoelige gegevens blootleggen in insluitingen
- Privacyschendingen
- Nalevingsproblemen (AVG, etc.)
4. Cross-Tenant-aanvallen
Het exploiteren van gedeelde RAG-infrastructuur in systemen met meerdere tenants.
Hoe het werkt
- Aanvaller is één tenant van een gedeeld systeem
- Injecteert inhoud die van invloed is op andere huurders
- Exploiteert gedeelde vectordatabase
- Haalt gegevens op van andere tenants
Impact
- Gegevenslekken tussen tenants
- Ongeoorloofde toegang tot gegevens van concurrenten
- Overtredingen van de naleving
- Reputatieschade
Real-World CVE's
Gedocumenteerde kwetsbaarheden in RAG-systemen.
| CVE ID | Product | Beschrijving | Ernst | CVSS |
|---|---|---|---|---|
CVE-2025-68700 |
RAGFlow | RCE via Canvas CodeExec component - untrusted data parsed with eval() | Critical | 9.1 |
CVE-2025-69286 |
RAGFlow | Insecure API key generation allows mutual token derivation (authentication bypass) | Critical | 8.9 |
CVE-2025-25282 |
RAGFlow | IDOR vulnerability allowing cross-tenant access and unauthorized user addition | High | 8.1 |
CVE-2025-69286 |
RAGFlow | Token generation using same URLSafeTimedSerializer for API keys | High | 8.9 |
GHSA-8xw3-v6c2-j84j |
RAGFlow | RCE via stdout parsing in CodeExec component | High | 8.5 |
Verdedigingsstrategieën
1. Beveiliging van de opnamefase
Documentvalidatie
- Alle documenten scannen op malware
- Valideer documentformaat en -structuur
- Controleer op verdachte inhoudspatronen
- Toegestane documenttypen
Inhoudsfiltering
- Verwijder PII vóór insluiting
- Filter gevoelige gegevenspatronen
- Bekende kwaadaardige patronen blokkeren
- Toegestane/blokkeerlijsten implementeren
Toegangscontroles
- Valideren van de bron van documenten
- RBAC implementeren voor opname
- Audittraject voor alle uploads
- Nieuwe documenten in quarantaine plaatsen
2. Beveiliging van de ophaalfase
Opschoning van query's
- Valideren en opschonen van gebruikersquery's
- Detecteer injectiepogingen
- Beperk de complexiteit van zoekopdrachten
- Snelheidsbeperking
Ophaalfilters
- Reclassering van beveiliging implementeren
- Kruisverwijzing met vertrouwde bronnen
- Detecteer afwijkende ophaalpatronen
- Beperk het aantal documenten
Multi-Tenancy-isolatie
- Afzonderlijke vectornaamruimten
- Strikte tenantgrenzen
- Cross-tenant querypreventie
- Versleuteling per tenant
3. Beveiliging van de generatiefase
Uitvoervalidatie
- Valideren van LLM-uitvoer
- Controleer op geïnjecteerde inhoud
- Factcheck aan de hand van bronnen
- Inhoudsfiltering
Contextverificatie
- Verifieer de authenticiteit van opgehaalde inhoud
- Detecteer manipulatiepogingen
- Ongewone contextpatronen markeren
- Log al het contextgebruik
Human-in-the-Loop
- Bekijk gevoelige outputs
- Acties met een hoog risico goedkeuren
- Mogelijkheid voor handmatige overschrijving
- Escalatiepaden
4. Gegevensbeveiliging
Encryptie
- vectoren in rust versleutelen
- TLS voor gegevens in transit
- Best practices voor sleutelbeheer
- Overweeg homomorfe encryptie
Vector DB-beveiliging
- Sterke authenticatie
- Netwerkisolatie
- Regelmatige beveiligingsaudits
- Patchbeheer
Privacybescherming
- Gegevensminimalisatie
- PII-detectie en -verwijdering
- Retentiebeleid
- Ondersteuning voor het recht op verwijdering
Testmethodologie
RAG-beveiligingstestchecklist
- Documentinjectietests
- Ophaalmanipulatietests
- Inversiepogingen insluiten
- Isolatietests voor meerdere tenants
- PII-lektests
- Context-overflow-tests
- Manipulatietests rangschikken
- Authenticatie-bypass-tests
- API-injectietests
- Denial of service-tests
- Data-exfiltratietests
- Compliance-audit
Testtools
Codevoorbeelden
Voorbeeld van documentvalidatie
```python
import re
from typing import List
class RAGDocumentValidator:
SUSPICIOUS_PATTERNS = [
r"ignore previous instructions",
r"system prompt:",
r"{{.*}}",
r"you are now dan",
]
PII_PATTERNS = [
r"\b\d{3}-\d{2}-\d{4}\b", # SSN
r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", # Email
r"\b\d{16}\b", # Credit card
]
def validate_document(self, content: str) -> dict:
"""Validate document before embedding."""
warnings = []
blocked = False
# Check for suspicious patterns
for pattern in self.SUSPICIOUS_PATTERNS:
if re.search(pattern, content, re.IGNORECASE):
warnings.append(f"Suspicious pattern: {pattern}")
blocked = True
# Check for PII
for pattern in self.PII_PATTERNS:
if re.search(pattern, content):
warnings.append(f"PII detected: {pattern}")
return {
"valid": not blocked,
"warnings": warnings,
"pii_detected": len([w for w in warnings if "PII" in w]) > 0
}
```