Claude Code lekt wachtwoorden en API-sleutels naar GitHub via een knop die bijna elke gebruiker kent: "Yes, and don't ask again". Beveiligingsbedrijf Apiiro meldt dat Claude Code dan het volledige goedgekeurde commando opslaat in .claude/settings.local.json, inclusief een wachtwoord of token dat erin stond. Wordt dat bestand per ongeluk gepubliceerd, dan staan je geheimen openbaar op GitHub.

Wat is er gevonden?

Volgens Apiiro (onderzoek van 5 november) staan er op openbaar GitHub 104.185 kopieën van .claude/settings.local.json, verspreid over 103.617 repository's. In 1.122 daarvan (1,1 procent) zit een echt geheim, samen 1.379 verschillende: 636 sleutels in een herkenbaar formaat en 743 wachtwoorden of tokens naast een openbaar serveradres.

Ruim een derde geeft direct toegang tot een database, met 379 databasewachtwoorden en 122 Supabase-sleutels. Verder telt Apiiro 43 SSH-logins, 42 tokens voor GitHub, GitLab en npm en 23 AWS-sleutels. Het gaat om 63 organisaties, vooral softwarebedrijven. Een daarvan bevestigde dat de sleutel nog werkte. Apiiro zegt zelf geen enkel gevonden geheim te hebben gebruikt of getest, en meldde de gevallen op 2 en 3 november aan de eigenaren. Of iemand de gelekte gegevens misbruikt heeft, weten we niet.

Rekent Apiiro ook oudere versies van het bestand, het gedeelde settings.json en opgeslagen chatlogboeken van AI-agents mee, dan komt het op 2.539 geheimen in 1.994 repository's. Die cijfers zijn van Apiiro en wij konden ze niet onafhankelijk nagaan. The Hacker News citeert dezelfde cijfers.

Hoe komt een wachtwoord in dat bestand?

Claude Code vraagt voor de meeste shell-commando's toestemming. Kies je "Yes, and don't ask again", dan komt er een toestemmingsregel in .claude/settings.local.json. Dat bevestigt ook Anthropic in de documentatie over instellingen. Is die regel het exacte commando, dan staat alles wat je erin had, zoals een wachtwoord achter PGPASSWORD=, onversleuteld in het bestand.

Anthropic schrijft dat Claude Code het bestand buiten git houdt door het toe te voegen aan je globale git-uitsluitingen. Dat werkt alleen op jouw computer. Apiiro wijst erop dat het niet helpt bij een map die later een repository wordt, een kloon op een andere machine of een bestand dat al is gecommit. De regel komt niet in de .gitignore van het project. In 539 van de 1.105 getraceerde repository's met een geheim had een commit met Claude als co-auteur het bestand aangepast. Apiiro reproduceerde het gedrag met de nieuwste modellen en schrijft het toe aan Claude Code zelf, niet aan het model. Van 16 codeeragents waarvan Apiiro de documentatie vergeleek, is Claude Code volgens het bedrijf de enige die standaard het volledige commando in een projectbestand bewaart.

Scanners missen veel

Apiiro draaide ook gitleaks en TruffleHog (zonder verificatiestap) over alle bestanden. Gitleaks markeerde 564 van de 1.122 bestanden met een geheim, TruffleHog 643, en 215 bleven bij beide buiten beeld. Wachtwoorden midden in een commando lijken voor zulke tools op gewone tekst. Wie alleen op sleutelformaten scant, mist ze dus.

Reageert Anthropic?

We vonden geen officiële reactie van Anthropic op het onderzoek en ook geen aankondiging van een aanpassing. Volgens Apiiro hebben gebruikers het mechanisme sinds augustus 2025 in GitHub-meldingen beschreven, zonder antwoord van Anthropic, en zijn drie daarvan automatisch gesloten. The Hacker News meldt dat de eerste melding (nummer 5544) door een bot is gesloten als "not planned". Zodra Anthropic reageert, passen we dit artikel aan.

Wat betekent dit voor jou?

Woon je in Nederland, dan geldt dit net zo goed: GitHub kent geen landsgrenzen. Dit zijn de adviezen van Apiiro, aangevuld met wat Anthropic zelf over het bestand schrijft.

  1. Zoek in je GitHub-organisatie naar .claude/settings.local.json en .claude/settings.json. Kijk ook in de git-geschiedenis, want een verwijderd bestand blijft daar staan en zit in elke fork en kloon.
  2. Roteer eerst, ruim daarna op. Vervang elk wachtwoord, token en elke sleutel die in het bestand heeft gestaan. Verwijderen haalt een geheim niet uit de geschiedenis.
  3. Stop het bijhouden van het bestand: git rm --cached .claude/settings.local.json en zet het in de .gitignore van de repository.
  4. Open het bestand ook lokaal, ook als je het nooit hebt gecommit, en verwijder regels met een geheim.
  5. Typ geen geheimen in commando's. Verwijs naar een variabele ($DB_URL) uit je secrets manager of omgeving, dan onthoudt de regel alleen de naam.
  6. Keur patronen goed, zoals Bash(npm run:*), in plaats van losse commando's.

Beheer je een team, behandel dan agentmappen als .claude/, .cursor/ en .gemini/ als gevoelig, net als .env-bestanden. Neem ze op in pre-commit en CI-scans, controleer of je scanner wachtwoorden in commando's herkent en zet .claude/settings.local.json in de .gitignore-sjabloon van je organisatie. Begin bij geheimen die bij een openbare server horen, want daarmee kan iemand direct naar binnen. Dat het bestand ook buiten GitHub kan belanden, bijvoorbeeld in een npm-pakket, Docker-image of zipbestand, noemt Apiiro uitdrukkelijk. Ook eerder deden zich rond AI-codeertools incidenten voor, zoals de gestolen API-sleutels bij OpenCode. Hoe je veilig begint, staat op onze pagina over Claude Code installeren, en wie met AI-agents leert programmeren vindt achtergrond bij vibe coding.

Bronnen

Eindredactie: Jan van Musscher, hoofdredacteur · Zo werken we

Zie AI Nieuws Daily vaker in Google: voeg ons toe als voorkeursbron