Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

Claude Code i Gemini CLI w CI: publiczny issue wystarczył, by zagrozić sekretom

Luki w harnessach agentów kodujących pokazały wykonanie poleceń przed sandboxem i eksfiltrację sekretów. Analizujemy granice zaufania i hardening CI.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
7 sierpnia 2026
CZAS CZYTANIA
14 min czytania
TEMAT
Bezpieczeństwo AI
Claude Code i Gemini CLI w CI: publiczny issue wystarczył, by zagrozić sekretom

Badacze Novee Security pokazali, że agent uruchamiany automatycznie do obsługi publicznych issue może odziedziczyć sekrety CI i jednocześnie przetwarzać dane kontrolowane przez dowolnego użytkownika internetu. W przeanalizowanych konfiguracjach Gemini CLI i Claude Code problem nie polegał wyłącznie na tym, że model „dał się namówić”. Krytyczne były luki w kodzie otaczającym model: kolejność ładowania konfiguracji, moment uruchomienia sandboxa oraz kanały sieciowe dostępne dla narzędzi.

To fundamentalna różnica. Filtr promptów może zmniejszać liczbę udanych manipulacji, ale nie naprawi procesu, który czyta nieufny plik przed ustanowieniem izolacji albo przekazuje modelowi sekret i pozwala mu wykonywać nieograniczone requesty.

Gemini CLI: polecenie przed granicą sandboxa

CVE-2026-12537 dotyczyło akcji run-gemini-cli. Złośliwy plik .gemini/.env w repozytorium mógł wpłynąć na parametry uruchomienia kontenera. Wartości zostały użyte przez launcher przed ustanowieniem docelowej izolacji, co tworzyło ścieżkę do wykonania polecenia na hoście runnera w bezobsługowym workflow.

Advisory Google dla run-gemini-cli ocenia błąd jako krytyczny w CVSS v4. Poprawki wydano w Gemini CLI 0.39.1 oraz akcji run-gemini-cli 0.1.22. Ważne jest zaktualizowanie obu elementów wskazanych przez producenta, a następnie odświeżenie pinów workflow do bezpiecznego commitu lub tagu.

Mechanizm ilustruje zasadę „pre-sandbox is host”: każda operacja wykonana przed utworzeniem namespace’ów, ograniczeniem filesystemu, nałożeniem seccomp i odebraniem capabilities należy do powierzchni hosta. Sam napis „containerized” w dokumentacji nie obejmuje bootstrappingu.

Claude Code: sekret wyciekał przez pozornie nieszkodliwy licznik

Drugi przypadek, CVE-2026-54316, obejmował Claude Code używane w automatyzacji. Według opisu Novee kanałem eksfiltracji mógł być publiczny licznik pobrań Hugging Face. Kolejne kontrolowane odwołania kodowały znak po znaku wartość API key, mimo że pojedyncze żądanie nie wyglądało jak klasyczny upload sekretu do webhooka.

Dotknięte były wydania od 0.2.54 do wersji wcześniejszych niż 2.1.163; poprawka znalazła się w 2.1.163. Ten wariant jest technicznie ważny, bo pokazuje ograniczenie prostych allowlist domen. Domena może być legalna, a jej stan — nazwa zasobu, licznik, log dostępu lub cache key — może zostać wykorzystany jako kanał danych.

Badacze omówili również scenariusz dla Codex, w którym dane zapisane podczas jednego przebiegu wpływały na następne uruchomienie agenta. Nie opisano CVE ani poprawki produktu; OpenAI wskazało, że sandbox działał zgodnie z deklarowanym modelem. Nie należy więc łączyć trzech przypadków w jedną lukę. Wspólny jest błąd architektoniczny: stan pochodzący od nieufnego autora trafia później do kontekstu o większym autorytecie.

Bezpieczny workflow dla agentów CI

  1. Zaktualizuj Gemini CLI co najmniej do 0.39.1, run-gemini-cli do 0.1.22 i Claude Code do 2.1.163 lub nowszych poprawek producenta.
  2. Przypinaj akcje do pełnych hashy commitów i automatycznie wykrywaj ich zmianę; tag jest wygodnym aliasem, ale słabszym dowodem integralności.
  3. Nie przekazuj sekretów workflow uruchamianym z publicznego issue, komentarza, pull requestu z forka ani innego nieufnego eventu.
  4. Rozdziel analizę od wykonania: pierwszy job bez sekretów tworzy artefakt, a osobny zatwierdzony job może użyć ograniczonego tokenu.
  5. Ustanawiaj sandbox przed odczytaniem plików repozytorium. Konfiguracja projektu jest wejściem atakującego, nie zaufanym bootstrapem.
  6. Ogranicz egress do koniecznych metod, ścieżek i rozmiarów, nie tylko domen. Loguj każde wywołanie narzędzia wraz z inicjującym eventem.
  7. Używaj krótkotrwałych tokenów o najmniejszych uprawnieniach, osobnych dla repozytorium i środowiska; po incydencie unieważnij również poświadczenia pobrane dynamicznie.
  8. Czyść workspace i pamięć agenta pomiędzy poziomami zaufania. Artefakt z nieufnego przebiegu nie może stawać się instrukcją w zaufanym jobie.

Fakty i analiza Breachroad

Advisory Google potwierdza CVE-2026-12537, wpływ i wersje naprawione. Novee opisuje CVE-2026-54316 i kanał eksfiltracji w badanym workflow. Nie każdy użytkownik tych narzędzi był narażony: potrzebna była automatyzacja łącząca nieufne wejście, narzędzia i sekrety. Model dwóch jobów oraz traktowanie konfiguracji repozytorium jako wrogiej to rekomendacje Breachroad wynikające z tych granic zaufania.

Szkolenia z bezpiecznego AI i CI/CD pomagają zespołom projektować takie granice przed wdrożeniem agenta. Audyt bezpieczeństwa AI sprawdza nie tylko prompt, ale też runner, tokeny, egress i utrwalony stan workflow.

UDOSTĘPNIJ / KOPIUJ