Knappen, filen og kommandoen

Applikationssikkerhedsfirmaet Apiiro offentliggjorde den 6. november en undersøgelse, der fandt 2.539 reelle hemmeligheder i 1.994 offentlige GitHub-arkiver, næsten alle skrevet dertil af en kodeagents egen tilladelsesfil.

Mekanismen er helt almindelig. Claude Code spørger, før den kører en skalkommando. Vælger man “Ja, og spørg ikke igen”, gemmes en tilladelsesregel i .claude/settings.local.json i projektmappen. Når den godkendte regel er en bogstavelig kommando og ikke et mønster, gemmes alt, hvad der blev skrevet ind i kommandoen — en databaseadgangskode, et token, et SSH-login — sammen med den, i klartekst, i en fil, der ligger ved siden af koden.

Apiiro gennemsøgte offentlige GitHub fra 1. til 3. november og fandt 104.185 kopier af filen i 103.617 arkiver. Af dem indeholdt 1.122 filer, omkring 1,1 procent, en reel hemmelighed: 1.379 forskellige værdier i alt, hvoraf 636 svarede til et kendt leverandørnøgleformat, og 743 var adgangskoder eller tokens ved siden af en offentlig server. Mere end en tredjedel åbner en database direkte, heriblandt 379 databaseadgangskoder og 122 Supabase-servicenøgler, ved siden af 43 SSH-logins til offentlige servere, 42 tokens til GitHub, GitLab og npm samt 23 AWS-nøgler.

Rækker af serverracks i en datahal
Apiiro oplyser, at ingen legitimationsoplysninger blev testet, og ingen server kontaktet. Illustrationsbillede. Brett Sayles · pexels · Pexels License

Hvorfor filerne overhovedet er offentlige

Claude Code forsøger at holde filen lokal: når den oprettes inde i et arkiv, føjes den til udviklerens globale git-undtagelser. Det dækker standardtilfældet og intet andet. Det dækker ikke en mappe, der bliver et arkiv senere, en klon på en anden maskine eller en fil, nogen allerede har tjekket ind, og reglen havner aldrig i arkivets eget .gitignore, så ingen beskyttelse følger med projektet.

Apiiro bemærker også, at agenten ofte tjekker filen ind selv: i 539 af de 1.105 arkiver med en reel hemmelighed, der kunne spores, havde en commit med Claude som medforfatter ændret den. Claude Codes commit-instruktioner beder modellen om ikke at tjekke .env eller credentials.json ind; dens egen indstillingsfil står ikke på den liste. Af 16 kodeagenter, hvis dokumentation Apiiro sammenlignede, er Claude Code ifølge firmaet den eneste, der bekræftet skriver hele den godkendte kommando til en projektfil som standard.

Eksponeringen er ikke kortvarig. Hver berørt fil lå stadig på arkivets standardgren, da Apiiro tjekkede, og i mediantilfældet havde den ligget der i 217 dage. At slette den lukker ikke hullet: ældre versioner af filen rummer yderligere 734 hemmeligheder i 509 arkiver, som ikke findes i nogen aktuel kopi, og 211 forgreninger af 74 arkiver bærer de samme værdier.

Et tomt storrumskontor med rækker af skriveborde og stole
Filerne bliver også liggende på udviklernes maskiner, hvor malware allerede leder efter adgangskoder. Illustrationsbillede. cottonbro studio · pexels · Pexels License

Hvad scannerne overser, og hvad Anthropic siger

Generiske hemmelighedsscannere fangede omkring halvdelen. Kørt over alle 104.185 filer markerede gitleaks 564 af de 1.122 med en reel hemmelighed og TruffleHog 643; 215 blev markeret af ingen af dem. Forskellen er adgangskoder, der skrives ind i kommandoer — efter PGPASSWORD=, sshpass -p eller mysql -p — og som ligner almindelige ord frem for nøgleformater.

Apiiro oplyser, at firmaet underrettede hver berørt organisation den 2. og 3. november og Anthropic gennem den kanal, virksomheden beder om. Det noterer også, at brugere har rapporteret mekanismen i Claude Codes GitHub-sager siden august 2025, at ingen fik svar, og at tre blev lukket automatisk som inaktive eller dubletter.

Anthropics Claude Code-ansvarlige, Boris Cherny, svarede på Hacker News den 7. november. “Historisk har Claude Code ikke foretaget rensning af hemmeligheder (der findes mange gode værktøjer til det), men vi ser på, hvad vi kan gøre for at forhindre dette”, skrev han og nævnte “at sikre, at automatisk tilstand fanger dette, at indbygge grundlæggende hemmelighedsscanning” blandt de tilgange, teamet ville lave prototyper af, “før vi sender noget ud”. Han sagde også, at Claude Code lægger filen i gitignore, når den oprettes, så de eksponerede kopier efter hans opfattelse er lavet i hånden og tjekket ind.

Apiiros egne forbehold står klart: ingen legitimationsoplysninger blev brugt eller testet, og “reel hemmelighed” betyder en værdi, der svarer til et leverandørformat eller peger på en offentlig server, ikke en, man ved virker. Én underrettet virksomhed bekræftede, at dens nøgle var aktiv. Rådet, der følger, er uglamourøst: udskift alt, filen nogensinde har indeholdt, hold op med at spore den, og godkend mønstre frem for bogstavelige kommandoer.