système : OPÉRATIONNEL
← retour à tous les hacks
DEFENSE MEDIUM NEW

La recherche hybride BM25 + vecteurs fait tomber l'empoisonnement RAG de 38 % à 0 %

Un préprint arXiv du 10 mars 2026 montre qu'ajouter du BM25 épars à la recherche dense bloque toute une classe d'empoisonnement de corpus RAG optimisé par gradient — sans toucher au LLM.

2026-06-04 // 7 min affects: rag-pipelines, dense-retrievers, vector-databases, gpt-5-3, claude-sonnet-4-6, llama-4

De quoi s’agit-il ?

Le 10 mars 2026, un chercheur indépendant a publié Semantic Chameleon: Corpus-Dependent Poisoning Attacks and Defenses in RAG Systems (arXiv:2603.18034). Le résultat principal est défensif : un récupérateur hybride simple qui combine la recherche par mots-clés BM25 classique et la recherche vectorielle dense fait tomber l’empoisonnement RAG optimisé par gradient de 38 % à 0 % de co-récupération sur une évaluation de n = 50, sans modifier le LLM, l’invite système ni la logique de classement.

L’empoisonnement RAG figure dans l’OWASP LLM Top 10 au titre des faiblesses des vecteurs et plongements. Un attaquant capable d’injecter des documents dans une base de connaissances — via du contenu généré par les utilisateurs, des soumissions par API ou un pipeline de données compromis — peut y placer un texte récupéré pour des requêtes ciblées précises et orienter la réponse du modèle, sans jamais toucher aux poids. La contribution de l’article est de montrer que l’architecture de récupération elle-même constitue un contrôle puissant, peu coûteux et immédiatement déployable contre la version optimisée par gradient de cette attaque.

Comment ça marche

L’attaque visée est un empoisonnement à deux documents (dormeur–déclencheur) optimisé par Greedy Coordinate Gradient (GCG) — la même famille de recherche par coordonnées qui produit les suffixes de jailbreak universels. L’optimisation maximise la similarité cosinus dans l’espace de plongement pour que la paire empoisonnée soit co-récupérée pour une requête choisie tout en restant dormante pour le reste. Sur un récupérateur purement vectoriel appliqué à Security Stack Exchange (67 941 documents), elle atteignait 38,0 % de co-récupération.

La défense consiste à cesser de se fier à la seule similarité de plongement :

Mode de recuperation                  Taux de succes de l'attaque par gradient
------------------------------------  ------------------------------------------
Dense pur (vecteurs seuls)            38,0%  de co-recuperation
Hybride BM25 + vecteurs (alpha 0.3-0.7)  0%  — classe d'attaque eliminee
Hybride, attaquant optimise aussi BM25   20-44% — partiellement contournee

Pourquoi cela fonctionne : un vecteur de plongement optimisé par GCG est réglé pour le canal dense. BM25 mesure le recouvrement lexical, que la charge optimisée ne contrôle pas ; le document empoisonné ne remonte donc plus une fois le signal épars fusionné. L’article recommande un poids de mélange alpha ≤ 0,5 (favorisant ou équilibrant le canal épars) comme valeur par défaut. Il est honnête sur la limite : lorsque l’attaquant optimise conjointement les deux canaux, la récupération hybride est partiellement contournée (20–44 % de succès). La recherche hybride relève fortement la barre ; elle n’est pas imprenable.

Deux autres constats comptent pour les défenseurs. D’abord, la sensibilité est dépendante du modèle : sur cinq LLM, l’attaque de bout en bout variait de 46,7 % (GPT-5.3) à 93,3 % (Llama 4), avec des taux de violation de sécurité de 6,7 % (Claude Sonnet 4.6) à 93,3 % (Llama 4) — l’alignement aide mais ne comble pas l’écart. Ensuite, l’attaque est dépendante du corpus : un corpus technique absorbe le vocabulaire d’attaque et permet la furtivité, tandis qu’un corpus généraliste (FEVER Wikipedia) expose les mêmes charges comme des anomalies de vocabulaire, la difficulté de détection variant d’un facteur 13 à 62 selon le corpus. La même charge ne se transfère pas d’une base à l’autre.

Pourquoi c’est important

La plupart des défenses RAG proposées à ce jour sont des couches de détection-filtrage greffées après la récupération, et les études antérieures montrent qu’elles laissent un risque résiduel. Ce résultat prend le chemin inverse : un changement dont vous possédez probablement déjà les composants — la fusion épars + dense est standard pour la qualité de récupération — fait aussi office de contrôle de sécurité contre la classe d’attaque par gradient. C’est la rare mitigation peu coûteuse et déployable aujourd’hui.

Il recadre aussi l’analyse du risque RAG. La sensibilité n’est pas un chiffre unique pour votre pile ; elle résulte de l’architecture de votre récupérateur, de l’alignement de votre modèle et de la composition de votre corpus. Une défense validée sur un corpus peut ne pas tenir sur un autre : « nous l’avons testée sur le benchmark X » ne prouve pas qu’elle tienne sur votre base de production. C’est la même leçon que la démonstration de SilentRetrieval, où des poisons fluides échappent aux filtres de perplexité : les menaces de la couche de récupération exigent une pensée au niveau de la récupération et du corpus.

Défenses

Les résultats se traduisent en une posture stratifiée et actionnable.

  1. Déployez la récupération hybride par défaut. Fusionnez BM25 avec votre récupérateur dense (par exemple via la fusion par rang réciproque) et privilégiez le canal épars — l’article recommande un poids alpha ≤ 0,5. Cela a éliminé entièrement l’attaque mono-canal par gradient lors des tests.

  2. Ne traitez pas la récupération hybride comme un périmètre. L’optimisation conjointe épars + dense atteignait encore 20–44 %. Ajoutez par-dessus une surveillance du corpus et une détection des motifs de requêtes ; supposez qu’un attaquant déterminé connaissant votre récupérateur puisse encore passer.

  3. Évaluez la sensibilité modèle par modèle. Un écart de 47 points entre familles de modèles signifie que le choix du modèle est une décision de sécurité pour le RAG, pas seulement de qualité. Mesurez le comportement de votre modèle sous contexte récupéré-mais-empoisonné avant la mise en production.

  4. Faites de l’ingestion une frontière de confiance. Filtrez le contenu généré par les utilisateurs, les soumissions par API et les flux tiers avant leur entrée dans le corpus. Un poison persistant qui ne s’active que sur des requêtes ciblées est précisément le cas que la revue manuelle laisse passer.

  5. Utilisez une détection adaptée au corpus. Comme la détectabilité varie d’un facteur 13 à 62 selon le corpus, ajustez la détection d’anomalies à votre domaine. Le scoring d’anomalie de vocabulaire fonctionne sur les corpus généralistes mais s’avère faible sur les corpus techniques, où la furtivité est plus élevée.

  6. Ajoutez provenance et traçabilité. Tracez les documents ayant produit une réponse pour localiser et purger un enregistrement empoisonné — en complément des défenses par graphe comme Argus.

Statut

ÉlémentRéférenceDateNotes
Préprint Semantic ChameleonarXiv:2603.180342026-03-10Attaques et défenses d’empoisonnement RAG dépendant du corpus
Résultat principal§6.22026-03-10Hybride BM25+vecteurs : 38 % → 0 % sur n=50 (Security Stack Exchange, 67 941 docs)
Contournement de la défense§6.2.22026-03-10Optimisation conjointe épars+dense : 20–44 % de succès
Évaluation multi-modèles de bout en bout§6.32026-03-1046,7 % (GPT-5.3) à 93,3 % (Llama 4) de succès
Artefacts (code de défense + scripts)GitHub2026scthornton/semantic-chameleon
Contexte OWASPLLM Top 10 (2025)2025Les faiblesses des vecteurs et plongements sont un risque du top 10

Le constat n’est pas que l’empoisonnement RAG est résolu — les attaques à canaux conjoints restent viables et la sensibilité au niveau modèle reste élevée. C’est qu’une technique standard de qualité de récupération est aussi une défense peu coûteuse et déployable dès aujourd’hui contre la classe d’empoisonnement par gradient, et que tout modèle de menace RAG honnête doit considérer ensemble l’architecture du récupérateur, le choix du modèle et la composition du corpus.

Sources