Technologia

Claude Code zapisał hasła jawnym tekstem, a 1122 pliki trafiły na GitHuba

Susan Hill
Dodaj nas w Google

Claude Code od Anthropic pyta o zgodę przed wykonaniem większości poleceń powłoki, a jedną z dostępnych odpowiedzi jest „Tak, i nie pytaj ponownie”. Jeśli wybierzesz ją dla polecenia zawierającego hasło, na przykład dane logowania do bazy danych, Claude Code może zapisać całe polecenie — wraz z hasłem — w pliku ustawień w zwykłym tekście, znajdującym się w projekcie. Badacze bezpieczeństwa znaleźli teraz tysiące takich haseł i kluczy w publicznych repozytoriach kodu na GitHubie, gdzie każdy może je odczytać.

Jeśli korzystasz z Claude Code, szukaj pliku o nazwie settings.local.json. Znajduje się on w ukrytym folderze .claude w głównym katalogu repozytorium i będzie przenoszony razem z projektem, o ile temu nie zapobiegniesz. Tak samo działa to we wszystkich krajach, w których dostępne jest to narzędzie. Zmiana nawyków zajmuje minutę, natomiast uporządkowanie spraw po wycieku hasła trwa znacznie dłużej, ponieważ usunięcie pliku nie usuwa go z historii gita ani z kopii rozwidlonych przez innych użytkowników.

Firma zajmująca się bezpieczeństwem oprogramowania Apiiro przeszukała publiczny GitHub i znalazła 104 185 kopii pliku w 103 617 repozytoriach — wynika z jej badań opisanych przez The Hacker News. Około 1,1 proc., czyli 1122 kopie, zawiera co najmniej jeden sekret; łącznie znaleziono 1379 różnych danych uwierzytelniających. Ponad jedna trzecia z nich umożliwiałaby bezpośredni dostęp do bazy danych, w tym 379 haseł do baz. Wśród znalezisk jest też 43 dane logowania SSH do publicznych serwerów, 42 tokeny do GitHub, GitLab i npm oraz 23 klucze Amazon Web Services.

Właścicielami tych repozytoriów nie są wyłącznie hobbystyczni programiści. Apiiro powiązało pliki z 63 organizacjami, przeważnie firmami programistycznymi różnej wielkości. Wśród najpoważniejszych przypadków znalazły się klucz do chmury z uprawnieniami administratora należący do dostawcy baz danych oraz hasło właściciela bazy dokumentacji medycznej. Starsze wersje pliku zachowane w historii gita zawierają kolejnych 734 sekretów w 509 repozytoriach, a 211 forków 74 repozytoriów powiela te same sekrety co oryginały. Po doliczeniu wspólnego pliku ustawień, który zespoły celowo umieszczają w repozytorium, oraz zapisanych dzienników rozmów z agentem liczba rośnie do 2539 sekretów w 1994 repozytoriach.

Claude Code próbuje jednak chronić ten plik przed umieszczeniem w systemie kontroli wersji. Z dokumentacji ustawień Anthropic wynika, że przy pierwszym zapisie pliku narzędzie dodaje odpowiednią regułę do globalnego pliku wykluczeń git użytkownika, dzięki czemu git ignoruje go na danym komputerze. Reguła ta nie jest przenoszona razem z projektem na laptop współpracownika, serwer kompilacyjny ani nową maszynę; nie pomaga też, jeśli plik został już wcześniej zatwierdzony w repozytorium. W 539 z 1105 repozytoriów przeanalizowanych przez badaczy plik zmieniło zatwierdzenie wskazujące Claude’a jako współautora, co sugeruje, że agent często sam go umieszcza w repozytorium. Spośród 16 agentów programistycznych, których dokumentację porównało Apiiro, Claude Code jest jedynym, o którym potwierdzono, że domyślnie zapisuje pełne zatwierdzone polecenie w pliku projektu.

Typowe zabezpieczenia nie wykrywają wielu takich przypadków. Apiiro przeskanowało wszystkie kopie za pomocą dwóch popularnych skanerów sekretów o otwartym kodzie źródłowym, gitleaks i TruffleHog: gitleaks wykrył 564 z 1122 plików, TruffleHog — 643, a 215 umknęło obu narzędziom. Większość przeoczonych haseł wpisano po ciągach PGPASSWORD=, sshpass -p lub mysql -p. Dla narzędzi szukających rozpoznawalnych formatów kluczy wyglądają one jak zwykłe słowa.

Wyniki należy jednak opatrzyć zastrzeżeniami. Apiiro sprzedaje narzędzia bezpieczeństwa do programowania wspomaganego przez AI, więc badanie jest zarazem materiałem promocyjnym. Firma nie sprawdzała, czy znalezione dane uwierzytelniające nadal działają, choć jedna z powiadomionych firm potwierdziła, że jej klucz był aktywny. Wartość uznawano za sekret, jeśli odpowiadała znanemu formatowi klucza albo znajdowała się obok adresu publicznego serwera i recenzent AI potwierdził jej znaczenie — pozostawia to pewne ryzyko wyników fałszywie dodatnich. Apiiro zaznacza również, że dane o współautorstwie nie dowodzą, iż Claude wprowadził każdy z ujawnionych sekretów. GitHub to zresztą tylko widoczna część problemu: plik jest zwykłym JSON-em w folderze projektu, więc może trafić również do pakietu npm, obrazu Dockera, archiwum zip czy synchronizowanego folderu.

Pierwsza rada badaczy: zmień dane uwierzytelniające. Zanim zaczniesz porządki, zaktualizuj każde hasło, token i klucz, które kiedykolwiek znalazły się w pliku, bo sekret, który był publicznie dostępny, należy uznać za skompromitowany — niezależnie od tego, czy przepiszesz historię repozytorium. Następnie przestań śledzić plik za pomocą git rm –cached, dodaj go do własnego pliku .gitignore repozytorium i otwórz w Claude Code polecenie /permissions, by usunąć każdą zapisaną regułę zawierającą sekret. Odwoływanie się do danych uwierzytelniających przez zmienne środowiskowe sprawia, że zapisana reguła zawiera nazwę taką jak $DB_URL zamiast hasła. Z kolei zatwierdzanie wzorców, a nie pojedynczych poleceń, całkowicie usuwa dosłowne argumenty z pliku.

Użytkownicy zgłaszali ten problem już wcześniej. Zgłoszenie błędu z 11 sierpnia 2025 roku informowało, że zatwierdzone polecenia zawierające klucze API i tokeny są zapisywane w settings.local.json słowo w słowo. 3 stycznia, po 60 dniach bez aktywności, automatyczny bot zamknął zgłoszenie ze statusem „nie planujemy realizacji”. Apiiro, które opublikowało wyniki 6 listopada, podaje, że wszystkie cztery powiązane zgłoszenia, na które się powołuje, zamknął ten sam bot. Najnowsze z nich zamknięto 6 listopada, bez odpowiedzi Anthropic. Według stanu na 2 listopada każdy ujawniony plik znaleziony przez badaczy nadal znajdował się w głównej gałęzi repozytorium; w połowie przypadków pozostawał tam od co najmniej 217 dni.

Ani The Hacker News, ani Apiiro nie informują o odpowiedzi Anthropic, a opisane zachowanie narzędzia pozostaje bez zmian: kolejne wybranie opcji „nie pytaj ponownie” dla polecenia z wpisanym hasłem zapisze również to hasło.

Tagi: , , , , ,

Dodaj nas w Google

Dyskusja

Jest 0 komentarzy.