Knappen, filen og kommandoen

Applikasjonssikkerhetsselskapet Apiiro publiserte 6. november en undersøkelse som fant 2 539 reelle hemmeligheter i 1 994 offentlige GitHub-arkiver, nesten alle skrevet dit av en kodeagents egen tillatelsesfil.

Mekanismen er hverdagslig. Claude Code spør før den kjører en skallkommando. Velger du “Ja, og ikke spør igjen”, lagres en tillatelsesregel i .claude/settings.local.json i prosjektmappen. Når den godkjente regelen er en bokstavelig kommando og ikke et mønster, lagres alt som ble skrevet inn i kommandoen — et databasepassord, et token, en SSH-innlogging — sammen med den, i klartekst, i en fil som ligger ved siden av koden.

Apiiro søkte gjennom offentlig GitHub fra 1. til 3. november og fant 104 185 kopier av filen i 103 617 arkiver. Av dem inneholdt 1 122 filer, rundt 1,1 prosent, en reell hemmelighet: 1 379 ulike verdier i alt, hvorav 636 samsvarte med et kjent leverandørnøkkelformat og 743 var passord eller tokener ved siden av en offentlig tjener. Mer enn en tredel åpner en database direkte, deriblant 379 databasepassord og 122 Supabase-tjenestenøkler, ved siden av 43 SSH-innlogginger til offentlige tjenere, 42 tokener for GitHub, GitLab og npm og 23 AWS-nøkler.

Rader av serverrack i en datahall
Apiiro opplyser at ingen legitimasjon ble testet og ingen tjener kontaktet. Illustrasjonsbilde. Brett Sayles · pexels · Pexels License

Hvorfor filene er offentlige i det hele tatt

Claude Code forsøker å holde filen lokal: når den opprettes inne i et arkiv, legges den til i utviklerens globale git-unntak. Det dekker standardtilfellet og ikke mer. Det dekker ikke en mappe som blir et arkiv senere, en klone på en annen maskin, eller en fil noen allerede har sjekket inn, og regelen havner aldri i arkivets eget .gitignore, så ingen beskyttelse følger med prosjektet.

Apiiro melder også at agenten ofte sjekker inn filen selv: i 539 av de 1 105 arkivene med en reell hemmelighet som lot seg spore, hadde en commit med Claude som medforfatter endret den. Claude Codes commit-instruksjoner ber modellen om ikke å sjekke inn .env eller credentials.json; dens egen innstillingsfil står ikke på den listen. Av 16 kodeagenter der Apiiro sammenlignet dokumentasjonen, er Claude Code ifølge selskapet den eneste som bekreftet skriver hele den godkjente kommandoen til en prosjektfil som standard.

Eksponeringen er ikke kortvarig. Hver berørt fil lå fortsatt på arkivets standardgren da Apiiro sjekket, og i mediantilfellet hadde den ligget der i 217 dager. Å slette den lukker ikke hullet: eldre versjoner av filen rommer ytterligere 734 hemmeligheter i 509 arkiver som ikke finnes i noen gjeldende kopi, og 211 forgreninger av 74 arkiver bærer de samme verdiene.

Et tomt åpent kontorlandskap med rader av pulter og stoler
Filene blir også liggende på utviklernes maskiner, der skadevare allerede leter etter legitimasjon. Illustrasjonsbilde. cottonbro studio · pexels · Pexels License

Hva skannerne bommer på, og hva Anthropic sier

Generiske hemmelighetsskannere fanget omtrent halvparten. Kjørt over alle 104 185 filene flagget gitleaks 564 av de 1 122 med en reell hemmelighet og TruffleHog 643; 215 ble flagget av ingen. Gapet er passord som skrives inn i kommandoer — etter PGPASSWORD=, sshpass -p eller mysql -p — og som ser ut som vanlige ord framfor nøkkelformater.

Apiiro opplyser at selskapet varslet hver berørt organisasjon 2. og 3. november, og Anthropic gjennom den kanalen selskapet ber om. Det noterer også at brukere har rapportert mekanismen i Claude Codes GitHub-saker siden august 2025, at ingen fikk svar, og at tre ble lukket automatisk som inaktive eller duplikater.

Anthropics Claude Code-ansvarlige Boris Cherny svarte på Hacker News 7. november. “Historisk har Claude Code ikke gjort rensing av hemmeligheter (det finnes mange gode verktøy for det), men vi ser på hva vi kan gjøre for å forhindre dette”, skrev han, og nevnte “å sørge for at automodus fanger dette, å bygge inn grunnleggende hemmelighetsskanning” blant tilnærmingene teamet ville lage prototyper av “før vi sender ut noe”. Han sa også at Claude Code legger filen i gitignore når den opprettes, slik at de eksponerte kopiene etter hans syn er laget for hånd og sjekket inn.

Apiiros egne forbehold står rett ut: ingen legitimasjon ble brukt eller testet, og “reell hemmelighet” betyr en verdi som samsvarer med et leverandørformat eller peker på en offentlig tjener, ikke en som er kjent å virke. Ett varslet selskap bekreftet at nøkkelen var aktiv. Rådet som følger, er lite glamorøst: bytt alt filen noen gang har inneholdt, slutt å spore den, og godkjenn mønstre framfor bokstavelige kommandoer.