Otrávili sme si vlastnú agent-memory, aby sme našli, kde obrana padá
MINJA-tvarovaný memory-injection probe proti našej vlastnej agent-memory knižnici, čestne: korroboračný gate zastaví útok na zaslúženej pamäti (0/10), ale čerstvý pravdivý fakt zablokuje deväť z desiatich, jeho koreň dôvery je self-gradovateľný (útok späť na 8/10), kým ho nezakotvíš na exogénny warrant, a holý warrant string len presúva kotvu (7/10 pod adaptívnym útokom). Žiaden živý agent, jeden encoder, otvorený benchmark.
Dáš agentovi pamäť. Útočník, ktorý s ním vie len hovoriť, bez akéhokoľvek prístupu do jeho databázy, ho donúti napísať si otrávenú poznámku sám sebe, a o týždeň neskôr bežná otázka tú poznámku vytiahne a navedie odpoveď. To je tvar MINJA, a nepríjemné na tom nie je, že to funguje. Nepríjemné je, že zjavná obrana funguje len na pamäti, ktorú si sa už naučil dôverovať.
Pustili sme MINJA-tvarovaný útok proti našej vlastnej memory knižnici inspeximus, a namiesto titulku „my to zastavíme" sme zapísali presnú čiaru, kde obrana drží a kde padá. Vpredu sedia dva čestné nálezy. Po prvé, korroboračný gate, ktorý riadiť akciu púšťa len zaslúženú pamäť, základný útok naozaj zastaví, ale na čerstvom, prvý-raz-videnom fakte pritom zablokuje aj skutočnú odpoveď v deviatich z desiatich prípadov. Po druhé, koreň dôvery toho gate je self-gradovateľný: ak si agent vie okredituje vlastné uvažovanie, poison sa vráti, a zavrie to až ukotvenie dôvery na niečom, čo si útočník nevie vyrobiť.
Jednu vec treba povedať presne, lebo mení, ako čítať každé číslo nižšie: v tomto probe nie je žiaden živý LLM agent. Meria vrstvu admisie-a-vplyvu pamäte, ktorú MINJA napokon zneužíva, na reálnych all-MiniLM-L6-v2 embeddingoch, desať cieľových faktov, tri bridge záznamy na každý, jeden zdieľaný store. „Úspech útoku" tu znamená, že otrávený záznam je prvý výsledok v množine, ktorá smie riadiť odpoveď, nie že bol zmanipulovaný celý agent. Čítaj to ako benchmark admisie pamäte, nie ako kompromitáciu agenta.
Hranica v jednej tabuľke
Každé číslo je z 10 cieľových faktov, jeden encoder, neadaptívne, ak riadok nehovorí inak. Nič z toho sa samo o sebe nezovšeobecňuje za tento rámec.
| Vrstva | Útok | Legit utility | Čo to znamená |
|---|---|---|---|
| Naivný vector store (čistý cosine) | 8/10 (top-5: 10/10) | — | útok prejde |
| inspeximus gate, pamäť si už zaslúžila dôveru | 0/10 | 10/10 | zaslúžená pamäť preváži injekciu |
| inspeximus gate, čerstvý nevouchnutý fakt | 2/10 | 1/10 | gate zablokuje aj skutočnú odpoveď |
| + útočník si sám známkuje credit | 8/10 | — | gate padá |
| + guard na exogénny warrant | 0/10 | 10/10 | self-grading už neráta |
| + adaptívny útočník sfalšuje warrant string | 7/10 | — | holý warrant len presúva kotvu |
| + warrant naviazaný na deklarovaný kanál | 0/10 | 10/10 | sfalšovaný string nemenuje žiaden kanál |
Tretí riadok je ten, pri ktorom treba zastať. Čisté 0-útok / plná-utility z druhého riadku je reálne, ale je to warm prípad: tie fakty si už zaslúžili výsledky. Zober credit preč, a ten istý gate, čo filtruje poison, odfiltruje aj čerstvú pravdu hneď vedľa.
Čo MINJA je a čo tu nie je
MINJA (Dong et al., arXiv:2503.03704) je query-only memory-injection útok: útočník do store nikdy nezapisuje, posiela otázky, čo donútia agenta vygenerovať a uložiť reťaz „bridging steps" od nevinnej otázky k zlému záveru, a potom bridge skracuje, kým ho prirodzená otázka nevytiahne. Paper uvádza 98,2% injection success a 76,8% attack success proti EHR agentom. To sú end-to-end agentové čísla na konkrétnom nastavení; naše 8/10 je kontaminácia na retrieval vrstve na inom, tak ich ber ako dve rôzne merania, čo náhodou ukazujú tým istým smerom, nie ako jedno potvrdzujúce druhé.
Kredit aj na strane obrany: sprievodná štúdia (arXiv:2601.05504) už navrhuje trust-scoring a trust-aware retrieval, a uvádza, že realistická existujúca pamäť MINJA výrazne oreže. Korroboračný gate, čo testujeme, je z tej rodiny, nie odklon od nej.
Gate a cena, ktorú skrýva
inspeximus má retrieve-then-influence rozdelenie: recall voľne pre kontext, ale riadiť akciu smie len korroborovaná pamäť. Čerstvo injektovaný bridge si nič nezaslúžil, takže sa odfiltruje pri influence kroku. Ten gate sme prvýkrát zmerali proti single-shot AgentPoison triggeru; MINJA je ten ťažší, self-reinforcing prípad. Štrukturálne je to gating akcie cez provenienciu, čo je information-flow control a taint-tracking aplikované na pamäť, a tá isolate-then-aggregate polovica je RobustRAG (Xiang et al., arXiv:2405.15556). Nič z tej vrstvy nie je náš vynález.
Čestná cena je cold-start riadok. Čerstvý, single-source, pravdivý fakt je pre gate nerozoznateľný od čerstvej injekcie: ani jeden si nič nezaslúžil. Takže gate, čo zhodí útok na 2/10, zhodí aj legitímny recall nového faktu na 1/10. Nie je to tuning bug, je to podstata korroboračného gate, a inspeximus to už dokumentuje: filter je na adversariálnu alebo nedôveryhodnú ingesciu, nie voľná vrstva, čo necháš zapnutú na všetko. Únikový ventil je ten istý mechanizmus, o ktorom je zvyšok tohto postu: ak appka ručí za zdroj čerstvého faktu exogénnym creditom pri zápise, fakt prejde, a presne preto warm riadky ukazujú 10/10 utility. Cena padá len na fakty, za ktoré nikto neručil, čo je režim, kde je ich zablokovanie aj tak správne.
Koreň dôvery a prečo string nestačí
Teraz tá adaptívna časť, kde je skutočné ponaučenie. Ak aplikácia nechá agenta sám oznámkovať výsledok vlastného recalled uvažovania ako úspech, otrávený bridge získa credit a prejde gate. Úspech útoku vyskočí späť na 8/10. Nie je to hypotetické: self-reinforcing memory injection je pomenovaná trieda („Zombie Agents", arXiv:2602.15654).
Liek je z učebnice, a nič z neho si nenárokujeme ako nové: dôvera potrebuje koreň, ktorý si útočník nevie vydať sám sebe. To je TrustRank (Gyöngyi et al., VLDB 2004) so seedovaním dôvery z exogénnej množiny, a Douceurov Sybil výsledok (2002), že self-issued atestácie nenesú dôveru bez externej autority. Takže v inspeximus 1.9.1 credit ráta ku korroborácii len ak nesie exogénny warrant, výsledok, ktorý si záznam sám nevytvoril. Self-grading nezíska nič, a gate opäť drží na 0/10.
Potom ten strop, povedaný narovinu, lebo skryť ho by bolo celé zlyhanie. Warrant, ktorý je len string, je sfalšovateľný presne ako hociktorý bearer token. Namerali sme to: adaptívny útočník, čo si aj vyrobí vierohodný warrant, vráti úspech útoku na 7/10. Guard zvýšil cenu, voľný self-grade už nefunguje, ale dieru nezavrel, presunul kotvu. Zavrieť ju potrebuje warrant naviazaný na niečo nefalšovateľné: obmedziť warranty na deklarovaný dôveryhodný kanál a sfalšovaný token žiaden taký kanál nemenuje (späť na 0/10), čo je channel binding (RFC 5929) aplikované na outcome credit; pre reálneho protivníka vyžadovať, aby bol výsledok kryptograficky atestovaný, takže sfalšovať ho znamená sfalšovať kľúč, nie slovo.
Čo toto nie je
Toto je self-authored meranie a tak sa má aj čítať. Staviame inspeximus, napísali sme útok, vybrali scenár s desiatimi obeťami a jeden encoder, a v slučke nie je žiaden živý agent. Horšie pre čisté riadky: každú obranu sme tiež napísali tak, aby odpovedala na útok o riadok vyššie, takže tabuľka, čo končí na 0/10, tam končí preto, že sme prestali pridávať útoky, nie preto, že obrana je hotová. Je to tá istá disciplína, akú sme sa snažili držať, keď sme rozbili vlastný memory benchmark, kým nám prestal lichotiť. Peer-reviewed štúdia nedávno obišla dvanásť súčasných jailbreak a prompt-injection obrán, väčšinu pri viac než 90% úspechu útoku, keď útoky spravila adaptívnymi („The Attacker Moves Second", arXiv:2510.09023). Self-run 0/10 je presne ten tvar, pred ktorým tá štúdia varuje, a preto sme adaptívny prípad pustili sami a publikovali tých 7/10, čo vyprodukoval, nie tú 0, čo nie.
Takže ber to ako znovu-spustiteľný benchmark, nie ranking ani dôkaz. Zocelili sme inspeximus proti útokom, ktoré sme si vybrali; čestné použitie harnessu je namieriť ho na útoky, encodery a threat modely, ktoré sme si nevybrali, vrátane takých, proti ktorým inspeximus nikdy zoceľované nebolo.
Pusti to na svoj vlastný store
Harness je otvorený a znovu-spustiteľný, a je napísaný tak, aby sa dal namieriť na akúkoľvek korroboračne-gated memory vrstvu. Ak mem0, Zep alebo Letta vystavujú outcome-credit cestu, self-grade otázka platí aj pre ne, a radšej to vidíme zmerané než tvrdené, niekým iným než nami. Nástroj je príspevok; obrana je poznámka pod čiarou.
Časté otázky
Čo je memory injection útok na LLM agenta? Protivník, často len s query prístupom a bez write prístupu do memory store, donúti agenta uložiť otrávený záznam, ktorý neskoršia nevinná otázka vytiahne a nechá sa ním navigovať. MINJA (arXiv:2503.03704) je query-only verzia, s 98,2% injection a 76,8% attack success na EHR agentoch.
Zastaví korroboračný alebo trust gate memory poisoning? Zastaví základnú single-shot verziu na pamäti, ktorá si už získala postavenie (0/10 v našom neadaptívnom probe). Ale na čerstvom single-source pravdivom fakte zablokuje aj legitímnu odpoveď (utility 1/10), a nezastaví útočníka, čo si vie sám oznámkovať výsledok vlastného recalled uvažovania, čo vráti úspech útoku na 8/10. Je to filter na nedôveryhodnú ingesciu, nie voľná vrstva.
Ako sa brániť proti self-reinforcing memory injection? Vyžaduj, aby outcome-credit prišiel z exogénneho zdroja, ktorý si pamäť sama nevytvorila, takže agent si nevie self-certifikovať vlastné otrávené uvažovanie. Holý warrant string len zvyšuje cenu útoku (sfalšovaný vrátil náš útok na 7/10); zavrieť dieru potrebuje warrant naviazaný na deklarovaný dôveryhodný kanál alebo kryptograficky atestovaný.
Je čokoľvek z toho nová myšlienka? Nie. Retrieve-then-influence gate je information-flow control a RobustRAG-štýl korroborácie; exogénny koreň dôvery je TrustRank (VLDB 2004) a Sybil výsledok (2002); channel-bound warranty sú RFC 5929 aplikované na credit. Príspevkom je zmeraná hranica, vrátane cold-start ceny, toho, kde korroboračný gate drží a kde padá pod adaptívnym memory-injection útokom.
Harness je otvorený. Namier ho na svoju memory vrstvu, oznámkuj útok sám a pozri, kde na tej tabuľke sedí tvoja obrana.