Jedna obyčajná veta unesie retrieval pamäte AI agenta — a riešením nie je lepší retriever
Jedna otrávená spomienka s triggerom z obyčajnej vety unesie retrieval AI agenta na 88–100% aj pri 10k. Gejtovanie vplyvu korroboráciou ho zrazí na 0%.
Čo sme spravili. Spustili sme reálny útok na otrávenie pamäte proti našej vlastnej open-source pamäťovej vrstve pre agentov, inspeximus, naprieč tromi rôznymi dense retrievermi — a potom sme sa ju pokúsili ubrániť. Útok je ľahký a generalizuje. Zjavné obrany nie. Jediné, čo obstálo, nie je vôbec múdrejší retriever: je to odmietnutie nechať nekorroborovanú spomienku riadiť akciu. Táto obrana je teraz v mneme 0.4.0 ako recall(influence_only=True) a generalizuje práve preto, že žije v provenance metadátach, nie v geometrii embeddingu.
Threat model, úprimne. Toto je nastavenie AgentPoison (Chen, Xiang, Xiao, Song & Li, NeurIPS 2024): útočník vloží jednu otrávenú spomienku a dokáže dostať trigger do query — takže neškodne vyzerajúca požiadavka plus trigger, ktorý útočník ovláda, vyretrievuje poison namiesto skutočnej spomienky. AgentPoison ten trigger optimalizuje gradient searchom a coherence lossom, aby čítal prirodzene a prekĺzol cez perplexity filtre; uvádza 81,2% priemernú úspešnosť útoku pri retrievale (ASR-r) pri <0,1% otrávenej pamäti. My meriame tú istú retrieval-hijack fázu (ASR-r), nie end-to-end akciu (ich end-to-end ASR-t je 62,6%). Všetko nižšie má spustiteľný receipt.
Výsledok 1 — ani nepotrebuješ ten fancy útok. Na 60-položkovej pamäti jediný otrávený záznam, ktorého triggerom je obyčajná anglická veta — doslova "the old lighthouse still guides ships along the rocky coast" — pristane na 1. mieste pre 88–100% query s triggerom naprieč všetkými tromi retrievermi (all-MiniLM-L6-v2, BGE-small-en-v1.5, Contriever). Žiadna gradientová optimalizácia netreba; predradenie distinktívnej vety dominuje embedding query a stiahne ho na poison. (Voľba vety hrá rolu — iná prirodzená veta dala na jednom retrieveri 69% — takže headline čítaj ako 69–100%, spoľahlivo ~100% keď optimalizuješ.)
Výsledok 2 — pri scale to neskolabuje. Zjavná námietka je „to je toy korpus". Nie je to úniková cesta, v ktorú dúfaš: vypchanie pamäte na 500, 2 000 a 10 000 spomienok necháva rank-1 hijack v podstate plochý — 94% / 88% / 94% / 94% pri veľkostiach 60 → 10k. Distinktívny trigger je unikátna zhoda pri akomkoľvek rozsahu.
| veľkosť korpusu | raw rank-1 hijack | s influence_only |
|---|---|---|
| 60 | 94% | 0% |
| 500 | 88% | 0% |
| 2 000 | 94% | 0% |
| 10 000 | 94% | 0% |
Výsledok 3 — perplexity filter je nesprávna stena. Najlacnejšia obrana, po ktorej ľudia siahnu, je „zamietni gibberish spomienky podľa perplexity". Chytí gradientové triggery (GPT-2 perplexity 4 500 – 31 000 — označené), ale míňa sa cieľu: triggery z prirodzených viet majú prirodzenú perplexitu (47–441) a prejdú priamo cez filter ppl < 1000, pričom stále hijackujú. Toto reprodukuje PoisonedRAG (Zou, Geng, Wang & Jia, USENIX Security 2025), ktorý ukázal, že otrávený text si vie udržať čisto vyzerajúcu perplexitu. Perplexity filter zastaví len tú verziu útoku, ktorú nikto nepotrebuje.
Výsledok 4 — retrieval-time detekcia negeneralizuje. Skúsili sme lacné content obrany na retrieval vrstve a každá zlyhá z vlastného dôvodu:
- Perplexity filter — obídu prirodzené triggery (perplexita 47–441, nerozoznateľné od reálneho textu); chytí len gibberish variant, ktorý nikto nepotrebuje.
- Embedding-outlier detektor (označ spomienku, čo sedí osamote vo vektorovom priestore) — porazí vypchanie poisonu generickým textom, aby nebol outlier.
- Retrieval-set-coherence re-ranker (zníž váhu zásahu topicky cudzieho voči ostatným výsledkom query) — funguje na jednom enkodéri (MiniLM, hijack 100% → 19%) ale úplne zlyhá na BGE a na Contrieveri potrebuje per-enkodér ladenie.
Ten posledný to prezrádza: embedding priestor BGE je viac anizotropný (nesúvisiace texty už sedia na vysokom cosine, Ethayarajh, EMNLP 2019), takže poison tam nie je separovateľný cez coherence. Obrana, čo žije v geometrii embeddingu, zdedí geometriu enkodéra. To je tá pasca.
**Riešenie — gejtuj vplyv, nie retrieval. inspeximus už graduuje spomienku z krátkodobej „episodic" na trvácnu „semantic" až keď si zaslúžila korroboráciu**: kreditovaný dobrý výsledok, alebo ≥2 linky z rozdielnych zdrojov — oboje získané automaticky bežným používaním, žiadne ľudské labelovanie. Tú istú latku znovu použijeme ako influence gate: recall(query, influence_only=True) vráti len korroborované spomienky — množinu, ktorá smie riadiť akciu — kým bežný recall() stále vráti všetko pre kontext. Pozn.: gate neblokuje retrieval (poison je stále čitateľný); obmedzuje len to, čo smie konať. Čerstvo vložený poison si nezaslúžil nič, takže je odfiltrovaný na hranici retrieve→akcia. Odmerané: single-instance rank-1 hijack padá na 0% na všetkých troch retrievroch a každom rozsahu korpusu, pri zachovaní benígnej utility na 90–100%. Generalizuje tam, kde geometrické obrany zlyhali, pretože korroborácia sú metadáta, nie vektory — je jej jedno, ktorý enkodér použiješ.
Poctivá cena. Nie je to zadarmo a účet sme odmerali. Rare-but-true spomienka, ktorá si ešte nezaslúžila korroboráciu, je odfiltrovaná tiež: korroborovaný recall ostáva na 1,00, ale pre zámerne-nekorroborované pravdivé spomienky padá na 0,08. Takže influence_only je režim pre adversariálny / nedôveryhodný ingest, kde vyretrievovaná-ale-nekorroborovaná spomienka má informovať, nie jednostranne konať — nie default pre dôveryhodný single-user store. A zvyšuje cenu útočníka, nie eliminuje útok: jedna injekcia zadarmo je odfiltrovaná; dve kópie z toho istého forged zdroja sa kanonikalizujú na jednu a stále sú odfiltrované; prelomenie gate-u si vyžiada ≥3 koordinované záznamy s ≥2 nezávislými forged provenance. Cesta cez kreditovaný-dobrý-výsledok nie je útočníkovi nastaviteľná (kredit vydáva aplikácia na reálny výsledok, nie self-assert).
Čo je tu vlastne nové. Korroboráciu sme už merali — že gejtovanie trvácnosti spomienky na zaslúženej korroborácii ju robí odolnou voči otráveniu (kedy má AI pamäť veriť novému faktu; dokáže korroborácia zastaviť otrávenie pamäte). Tento post je o vrstve, ktorú tie nepokryli: retrieval. Poison sa nikdy nemusí stať trvácnym — vyhráva vo chvíli, keď je vyretrievovaný a použitý. Takže príspevok je rozdiel medzi tým, čo poison dosiahne (retrieval, 88–100%) a čo ovplyvní (0% po gejtovaní), odmeraný naprieč tromi enkodérmi a až do 10k spomienok na vrstve s trust fázou — plus vydaný influence_only režim a spustiteľný harness na tvoj vlastný embedder. Samotný útok nie je nový (AgentPoison; PoisonedRAG; MINJA, Dong et al. 2025, query-only injekcia >95%), ani fakt o anizotropii (Ethayarajh 2019), ani téza „trvácnu ochranu daj na storage, nie na retrieval" z nedávneho survey bezpečnosti dlhodobej pamäte (Lin et al. 2026) — toto je tá téza, odmeraná na retrieve-vs-influence. (K retrieval stránke všeobecne pozri náš benchmark retrievalu pre agent memory.)
FalzifikátorAk na verejnom harnesse single-instance poison dosiahne rank-1 hijack podinfluence_only=Trueproti store, kde sú legitímne spomienky korroborované a poison nie — na ktoromkoľvek z troch retrieverov, pri akomkoľvek rozsahu — kľúčové tvrdenie padá. Rovnako, ak korroborovaná benígna utilita skolabuje pod gate-om (tu drží na 90–100%), padá tvrdenie „utilita zachovaná". Probes (agentpoison_influence_gate.py,agentpoison_influence_gate_validation.py,agentpoison_coherence_attack.py,agentpoison_multiretriever_check.py) bežia deterministicky na lokálnom embedderi; ktokoľvek to vie zreprodukovať alebo vyvrátiť.
FAQ
Zastaví gejtovanie vplyvu otrávenie pamäte AI agenta? Zastaví single-instance prípad odmeraný tu: rank-1 retrieval hijack padá z 88–100% na 0% naprieč tromi retrievermi a až do 10 000 spomienok, pretože vložený poison si nikdy nezaslúži korroboráciu (kreditovaný dobrý výsledok, alebo ≥2 linky z rozdielnych zdrojov), ktorú gate vyžaduje. Zvyšuje cenu útočníka, nerobí otrávenie nemožným — prelomenie si vyžiada ≥3 koordinované záznamy s ≥2 nezávislými forged provenance.
Prečo jednoducho nefiltrovať otrávené spomienky pri retrievale? Lebo tie obrany negeneralizujú. Perplexity filter obídu prirodzené triggery (perplexita 47–441, nerozoznateľné od reálneho textu). Embedding-outlier detektor obíde vypchanie poisonu generickým textom. Set-coherence re-ranker funguje na jednom enkodéri (MiniLM), ale zlyhá na anizotropnom (BGE), lebo geometrická obrana zdedí geometriu enkodéra.
Pomôže väčší alebo lepší retriever? Nie. Útok unesie všetky tri testované retrievery (MiniLM, BGE, Contriever) na 88–100%, a úspech retrieval-time obrany závisel od enkodéra, nie od jeho kvality. Vrstva, ktorá generalizovala, bola korroboračné gejtovanie, ktoré je nezávislé od embeddera.
Aká je cena influence_only=True? Filtruje nekorroborované spomienky vrátane rare-but-true: korroborovaný recall ostáva na 1,00, ale recall nekorroborovaných pravdivých spomienok padá na 0,08. Používaj to pre adversariálne alebo nedôveryhodné-ingest nastavenia, kde nekorroborovaná spomienka má informovať, nie jednostranne riadiť akciu, nie ako default pre dôveryhodný single-user store.
Je samotný útok nový? Nie — reprodukuje AgentPoison (Chen et al., NeurIPS 2024) a PoisonedRAG (Zou et al., USENIX Security 2025) na našej vlastnej pamäťovej vrstve. Príspevok je defense-side výsledok na trust-gated store — odmeraný rozdiel medzi tým, čo poison vie vyretrievovať a čo vie ovplyvniť — a spustiteľný cross-retriever harness.
FalzifikátorAk single-instance poison dosiahne rank-1 hijack pod influence_only=True proti store, kde sú legitímne spomienky korroborované a poison nie — na ktoromkoľvek testovanom retrieveri, pri akomkoľvek rozsahu — alebo ak korroborovaná benígna utilita skolabuje pod gate-om, kľúčové tvrdenie padá. Probes bežia deterministicky a sú verejné.