Du delte opp arbeidet på tretten agenter. Paperclip delte ikke opp nøkkelen.
En gjennomgang av et agentrammeverk med 71 000 stjerner fant at tolv av de tretten agentene bar samme token i klartekst. Når du kjører en flåte med agenter, slutter «hemmeligheten ligger i konfigurasjonen» å være en snarvei og blir en multiplikator.
Du gjorde det moderne. I stedet for én stor agent satte du opp en flåte — én som triagerer saker, én som skriver tekst, én som kjører designpipelinen, et dusin av dem, hver med sin egen oppgave og sin egen konfigurasjon. Det føles tryggere på den måten. Mindre skadeomfang. Mer minste privilegium.
Så gikk en sikkerhetsskanning gjennom konfigurasjonene til et agentrammeverk med 71 000 stjerner som heter Paperclip, og fant at tolv av de tretten agentene bar de samme legitimasjonsopplysningene — et identisk token, limt inn i klartekst i hver agents konfigurasjon [1]. Én Anthropic API-nøkkel lå hardkodet i klartekst i en designagents konfigurasjon. Et bot-token ment for én agent var lesbart for agenter som ikke hadde noe med det å gjøre.
Tretten dører. Én nøkkel, kopiert inn i tolv av dem. Stjel den fra den svakeste agenten, så har du de andre elleve.
Hva som faktisk skjedde
Paperclip gir hver agent en MCP-serverkonfigurasjon — filen som forteller agenten hvilke verktøy og tjenester den kan nå, og hvordan den autentiserer seg til dem. Et sted på veien gikk hemmelighetene rett inn i disse filene som ren tekst: en n8n-JWT, et bearer-token, en Anthropic API-nøkkel. Ikke referert. Ikke injisert på kjøretid. Skrevet inn — og deretter, fordi det å starte opp den neste agenten er en kopi-og-lim, duplisert over hele flåten.
Skanningen flagget tre ting. De delte klartekst-tokenene på tolv agenter (vurdert som HIGH). Anthropic-nøkkelen som lå i klartekst i en designagents konfigurasjon (vurdert som CRITICAL). Og et bot-token med tilgang til agenter det aldri var ment for — en ren glipp på minste privilegium [1]. Til deres ære handlet Paperclip-teamet raskt: de migrerte til legitimasjonsreferanser, sladdet konfigurasjon ved lesing på tvers av agenter, og begynte å håndheve bindingssynk [2]. Riktig retning.
Dette er ikke at Paperclip slurver
Her er delen verdt å tenke over. Paperclip gjorde det nesten alle rammeverk gjør. Å legge en hemmelighet i en konfigurasjonsfil er slik programvare har autentisert i tretti år. Det fungerte fordi det var én app, én konfigurasjon, én operatør som visste hvor nøkkelen lå.
Tidene endret seg under den vanen. Et fleragentsystem er ikke én app med én konfigurasjon — det er et dusin prosesser, hver med en fil, hver en kopi av den forrige. Klartekst i konfigurasjonen var en tolerabel snarvei da det var ett sted å lekke. Ved tretten betyr den samme snarveien at ett lekkasje er tretten lekkasjer — og «hvilken agent gjorde det?» har ikke noe svar, fordi tokenet i loggen tilhørte dem alle.
Legitimasjonsreferanser — rettelsen Paperclip leverte — er faktisk bedre. Men legg merke til hva de endrer og ikke endrer. En referanse peker fortsatt på en ekte hemmelighet der agenten kjører; agenten, eller hva som kompromitterer den, kan fortsatt lese den oppløste verdien. Og rammeverkets egen feilsporer viser allerede neste sviktsmodus: at en referanse mister synk med bindingen sin, slik at konfigurasjonen ser utfylt ut mens valideringen feiler stille [3]. Hemmeligheten flyttet ett lag bakover. Den forlot ikke bygget.
Det er ikke bare Paperclip
Samme uke, samme rotårsak, ulike repoer. Et mye brukt kodingsagent ble innrapportert for å skrive rå .env-verdier — passord, token, API-nøkler — rett inn i chatutdataen. En annen agentkjører ble funnet å sende hele sitt overordnede miljø videre til underprosesser, slik at hver eneste leverandørnøkkel var synlig for en barneprosess [4]. En stemmekrok skrev transkripsjoner, legitimasjon og alt, til verdenslesbar /tmp [5]. Uavhengige team, uavhengige trusselmodeller, én delt antakelse: at det er greit at hemmeligheten bor der agenten kan se den. Hele argumentet en angriper trenger å føre, er at det ikke er det.
Bygget for dette, med vilje
Clavitor tar utgangspunkt i den motsatte antakelsen: agenten holder aldri legitimasjonen i det hele tatt. Den ber om en handling; forespørselen avskjæres, autentiseres mot en hemmelighet agenten ikke kan lese, og utføres. Det finnes ingen konfigurasjon å lime et token inn i, fordi det ikke er noe token i konfigurasjonen. Ingenting å kopiere over tretten agenter, fordi agentens miljø aldri holder tingen som er verdt å stjele.
Hver agent når bare det den er navngitt for — ikke hele lageret — slik at et bot-token ikke kan ende opp med å være lesbart for en agent som aldri ba om det. Og hver handling logges til den spesifikke aktøren som utførte den, aldri til et delt token som tolv agenter hadde til felles — så «hvilken gjorde det?» har et svar.
Den ærlige kanten: dette gjør ikke en agent uhackbar. En kompromittert agent kan fortsatt, der og da, gjøre tingene den var autorisert til å gjøre. Det den ikke kan gjøre, er å rusle av gårde med nøkkelen og bli de andre tolv — fordi det ikke er noen nøkkel i hendene dens å rusle av gårde med.
Lærdommen er ikke «roter tokenet»
Paperclip kommer til å rotere tokenene, fullføre migreringen og lukke sakene. Bra — det bør de. Men rotasjonen er ikke lærdommen. Lærdommen er at i det øyeblikket du har en flåte med agenter i stedet for én app, slutter «hemmeligheten ligger i konfigurasjonen» å være en snarvei og blir en multiplikator. Du fikser ikke en multiplikator ved å gjøre hemmeligheten litt vanskeligere å lese. Du fikser den ved å sørge for at hemmeligheten aldri var i agentens hender til å begynne med.
Vi har skrevet ned reglene vi mener et legitimasjonsverktøy bør holde i agenttiden — blant annet at hemmeligheten aldri bor der koden kjører, og at en agent bare når det den er navngitt for. Gå gjennom dine: clavitor.ai/rules.
Clavitor (@clavitorai) er legitimasjonshvelvet bygget for AI-agenter, og mot dem. clavitor.ai
Kilder
[1] Paperclip agentrammeverk — funn om legitimasjonshygiene (CFG-H1 delte klartekst-token, CFG-C1 hardkodet Anthropic-nøkkel, CFG-H2 bot-token med feil omfang): https://github.com/paperclipai/paperclip
[2] Paperclip — håndhev synk av hemmelighetsbindinger for agenter på tvers av livsløpsflyter (flettet): https://github.com/paperclipai/paperclip/pull/8307
[3] Paperclip — secret_ref-miljøoppføringer kan miste synk med secret_bindings-rader, konfigurasjonen ser utfylt ut mens valideringen feiler stille (#8309): https://github.com/paperclipai/paperclip/issues/8309
[4] Chetter — runBatchAgent arver hele kjørerens miljø og eksponerer leverandørens API-nøkler for underprosessen (#56): https://github.com/flatout-works/chetter/issues/56
[5] Claude Code stemmekrok — hele transkripsjoner (inkludert legitimasjon) skrevet til verdenslesbar /tmp (#58): https://github.com/rodlaneedu-hash/claude-code-voice-hook/issues/58