Firma Apiiro opisała 5 listopada 2026 roku 2539 haseł, kluczy i tokenów w 1994 publicznych repozytoriach GitHub, które zapisał tam mechanizm uprawnień Claude Code. Gdy użytkownik wybiera opcję „Yes, and don't ask again”, narzędzie zapisuje całe zatwierdzone polecenie, razem z hasłem, w pliku .claude/settings.local.json w folderze projektu. Plik ma zostać na komputerze, ale w ponad tysiącu przypadków trafił do publicznego kodu. Osoby używające Claude Code powinny przejrzeć ten plik i jego historię w Git, a znalezione dane dostępowe od razu wymienić.
Jak hasło trafia do pliku settings.local.json
Claude Code pyta o zgodę przed uruchomieniem polecenia w terminalu. Jeśli użytkownik wybierze „Yes, and don't ask again”, narzędzie zapisuje regułę allow, czyli stałe zezwolenie, w pliku .claude/settings.local.json. Dokumentacja Anthropic potwierdza, że reguła trafia właśnie tam, a według Apiiro jej treścią jest dosłowny tekst polecenia.
Problem pojawia się wtedy, gdy polecenie zawiera dane dostępowe. Prośba o sprawdzenie bazy na serwerze testowym kończy się zwykle poleceniem z hasłem wpisanym po PGPASSWORD= albo mysql -p, bo bez niego polecenie nie zadziała. Po zatwierdzeniu na stałe hasło zostaje w pliku zwykłym tekstem, także długo po zakończeniu pracy.
Apiiro podkreśla, że to zachowanie samego narzędzia, a nie konkretnego modelu. Badacze odtworzyli je na modelach Opus 5.5 i Fable 5.1. Według zestawienia firmy spośród 16 porównanych agentów programistycznych tylko Claude Code domyślnie zapisuje pełne zatwierdzone polecenie w pliku projektu.
Skala wycieku w liczbach
Dane zebrano od 1 do 3 listopada 2026 roku przez wyszukiwarkę kodu GitHub, wyłącznie w trybie odczytu. Badacze nie używali znalezionych danych i nie łączyli się z serwerami, więc „prawdziwy sekret” oznacza poprawny format klucza albo hasło przy publicznym adresie serwera, a nie potwierdzony aktywny dostęp.
- 104 185 kopii pliku w 103 617 repozytoriach, z czego 1122 pliki z 1379 różnymi sekretami.
- 636 kluczy w formacie znanych dostawców oraz 743 hasła i tokeny przypisane do publicznych serwerów.
- 379 haseł do baz danych, 122 klucze service-role i 103 tokeny kont Supabase, 43 dane logowania SSH, 23 klucze AWS i 6 kluczy prywatnych.
- Mediana wieku pliku z sekretem to 217 dni od pierwszego commita do 2 listopada, a w 118 repozytoriach ponad rok.
- Po doliczeniu historii Git, wspólnych plików settings.json i zapisów rozmów z agentami łącznie 2539 sekretów w 1994 repozytoriach.
Dlaczego automatyczne wykluczenie z Git nie wystarcza
Anthropic opisuje w dokumentacji zabezpieczenie, które ma temu zapobiegać. Gdy Claude Code pierwszy raz zapisuje plik w repozytorium Git, dodaje wpis **/.claude/settings.local.json do globalnej listy wykluczeń użytkownika. Plik utworzony ręcznie trzeba według dokumentacji samodzielnie dopisać do .gitignore.
Apiiro wskazuje trzy luki w tym rozwiązaniu. Wykluczenie nie obejmuje folderu, który stał się repozytorium później, kopii projektu na innym komputerze ani pliku już zatwierdzonego w Git. Reguła nie trafia też do .gitignore samego projektu, więc nie chroni innych osób z zespołu.
Według badaczy w 539 z 1105 prześledzonych repozytoriów z sekretem plik zmienił commit współtworzony przez Claude. Użytkownicy zgłaszali ten mechanizm w repozytorium Claude Code od sierpnia 2025 roku, a Apiiro pisze, że żadne z czterech zgłoszeń nie dostało odpowiedzi Anthropic. Do 7 listopada nie znaleźliśmy komunikatu Anthropic w tej sprawie.
Czego nie wykrywają skanery sekretów
Popularne skanery szukają ciągów o rozpoznawalnym formacie, na przykład kluczy z prefiksem dostawcy. Hasło wpisane po sshpass -p albo w nagłówku zapytania curl wygląda dla nich jak zwykłe słowo w poleceniu. Dlatego gitleaks oznaczył 564, a TruffleHog 643 z 1122 plików z sekretem.
Ten sam wzorzec pojawia się w innych plikach, które zapisują agenci AI. Apiiro znalazło sekrety w 298 z 76 011 wspólnych plików .claude/settings.json, w 120 zapisach rozmów z agentami, w plikach pamięci typu MEMORY.md i w notatkach wdrożeniowych. Na Hugging Face Spaces plik lokalnych ustawień Claude Code wystąpił w 126 z 31 053 przestrzeni.
Ryzyko nie kończy się na GitHubie. Plik leży zwykłym tekstem na każdym komputerze, na którym ktoś zatwierdzał polecenia na stałe. Badacze przypominają, że robak Shai-Hulud z września 2025 roku uruchamiał TruffleHog na plikach ofiar, a plik może też wyjść poza komputer w paczce npm, obrazie Docker albo archiwum.
Czego nie wiadomo
Nie wiadomo, ile ujawnionych danych nadal działa ani czy ktoś je wykorzystał. Apiiro powiadomiło 63 organizacje 2 i 3 listopada, a potwierdzenie aktywnego klucza dostało od jednej. Wśród przypadków firma wymienia hasło właściciela bazy aplikacji z dokumentacją medyczną i produkcyjny token płatności Square, bez podawania nazw.
Wyniki pochodzą z badania firmy sprzedającej narzędzia bezpieczeństwa, a klasyfikację wątpliwych wartości wsparł model językowy oceniający je według spisanych kryteriów. Liczby dotyczą tylko publicznych repozytoriów i domyślnych gałęzi, więc skala w prywatnych projektach i na komputerach pozostaje nieznana. Badanie nie wymienia polskich organizacji.
Co to oznacza dla polskich zespołów
Supabase i PostgreSQL są często wybierane przez małe software house’y i startupy, także w Polsce, a właśnie hasła do baz dominują w wynikach. Hasło do bazy z danymi klientów w publicznym repozytorium może oznaczać naruszenie ochrony danych osobowych. Czy dany przypadek wymaga zgłoszenia do UODO, ocenia administrator danych z inspektorem ochrony danych, a ten tekst nie jest poradą prawną.
W naszej ocenie to kolejny przypadek, w którym wygoda pracy z agentem AI przenosi dane tam, gdzie nikt ich nie planował. W tym tygodniu opisywaliśmy już adres e-mail wpisywany przez Claude Code do nagłówka zapytań. Zespoły, które wdrażają agentów programistycznych, powinny traktować folder .claude tak jak plik .env.
Jak sprawdzić repozytorium i komputer krok po kroku
Kolejność ma znaczenie, bo usunięcie pliku nie unieważnia danych, które ktoś mógł już skopiować. Pierwsze trzy kroki zajmą kilka minut.
- Wyszukaj w organizacji na GitHubie pliki .claude/settings.local.json i .claude/settings.json. Każde trafienie w publicznym repozytorium jest dostępne dla wszystkich.
- Otwórz lokalne kopie pliku i przejrzyj listę allow. Szukaj haseł, tokenów, kluczy i adresów połączeń z bazą.
- Wymień każde znalezione hasło i klucz, zanim zaczniesz porządki w repozytorium. Historia Git, forki i klony nadal je zawierają.
- Przestań śledzić plik poleceniem git rm --cached .claude/settings.local.json i dopisz go do .gitignore projektu. Sama globalna lista wykluczeń nie chroni reszty zespołu.
- Sprawdź historię repozytorium, zapisy rozmów z agentami i pliki pamięci. Do skanowania w CI dodaj reguły wykrywające hasła po PGPASSWORD=, sshpass -p i mysql -p.
- Na przyszłość przechowuj dane w menedżerze sekretów i odwołuj się do zmiennych, a na stałe zatwierdzaj wzorce poleceń zamiast poleceń z konkretnymi wartościami.
Źródła i data sprawdzenia
- Coding Agents Are Leaking Your Secrets to GitHubApiiro, publikacja: 2026-11-05, sprawdzono: 2026-11-07
- Settings files and precedenceAnthropic, dokumentacja Claude Code, publikacja: 2026-11-07, sprawdzono: 2026-11-07
- Claude Code approval files found exposing company secrets on GitHub, says Apirro researchersiTWire, publikacja: 2026-11-07, sprawdzono: 2026-11-07
- Claude Code's "Don't Ask Again" Feature Exposes 2,539 Secrets Across 1,994 GitHub RepositoriesGBHackers, publikacja: 2026-11-07, sprawdzono: 2026-11-07
Artykuł ma charakter informacyjny. Przy decyzjach prawnych, finansowych lub organizacyjnych warto zweryfikować wnioski w odniesieniu do konkretnej sytuacji.



