Zgłoszenie na GitHubie jako narzędzie kradzieży poświadczeń
Trzy agenty do kodowania, trzy niezależne exploity, jeden wspólny błąd: kod, który sprawdzał operację, nie był tym, który ją wykonywał.
Atakujący w tej historii ma konto na GitHubie, zero prawa zapisu do czegokolwiek i jeden ruch: założyć zgłoszenie. To cały budżet. Działa, bo gdzieś w automatyce repozytorium agent przeczyta to zgłoszenie i potraktuje jako instrukcję.
Licznik pobrań jako kanał wyprowadzania danych
Advisory Claude Code opisuje coś lepszego niż ukradziony klucz. huggingface.co było zaakceptowane jako czysta nazwa hosta dla narzędzia WebFetch, więc pobranie pliku kontrolowanego przez atakującego nie wywoływało żadnego pytania o zgodę. Żadna lista dozwolonych nie została złamana. Ta domena naprawdę na niej była.
I dalej sam kanał: Hugging Face liczy pobrania po stronie serwera, a właściciel repozytorium widzi, jak licznik rośnie. Ładunek nie wysyła więc nic i nigdzie. Czyta sekret i koduje go wyborem tego, o które pliki poprosi.
Zaufanie dostarczone razem z repozytorium
Znalezisko w Gemini CLI to pełne 10.0, i powód jest strukturalny, nie sprytny. W trybie bezgłowym narzędzie automatycznie ufało katalogom obszaru roboczego, a pod flagą --yolo ignorowało listę dozwolonych narzędzi z ustawień użytkownika. Konfiguracja, która miała ograniczać agenta, leżała wewnątrz tego, na co agent był skierowany, więc pull request mógł przywieźć własne uprawnienia.
Zatrucie pliku, którego posłucha następny przebieg
Trzeci łańcuch nie potrzebuje CVE, bo nie potrzebuje błędu. To workflow, który uruchamia agenta dwa razy i pozwala pierwszemu przebiegowi zapisać plik, który drugi czyta jako autorytet.
1. tresc atakujacego trafia do zgloszenia na GitHubie 2. pierwszy przebieg wpisuje ja do AGENTS.md 3. pierwszy przebieg celowo zwraca zly JSON, wiec zadanie ponawia sie 4. drugi przebieg czyta AGENTS.md jako wiazace instrukcje 5. atakujacy ma trwala kontrole nad drugim przebiegiem
Krok trzeci to rzemiosło. Celowa porażka jest tym, co powoduje istnienie drugiego przebiegu, więc logika ponawiania nie jest łamana, tylko użyta jako mechanizm dostarczenia.
Jedno spoza świata AI
W tym samym okresie pojawił się błąd walidacji pochodzenia w Windows NAT. Zanim ktokolwiek spanikuje, warto przeczytać wektor: AV:A oznacza sieć sąsiadującą, nie internet, a AC:H wysoką złożoność. Mocne znalezisko dla kogoś, kto już jest w Twoim segmencie, czyli model zagrożenia węższy, niż sugeruje sama ocena.
Wzorzec, który warto zapamiętać
CSA dobrze nazywa źródło problemu: walidacja, która oglada polecenie jako zwykły napis, rozjeżdża się z shellem, interpreterem albo parserem, który je faktycznie wykonuje. Każde z powyższych znalezisk mieszka w tej szczelinie, i to jest to samo twierdzenie, które stawiamy o serwerach MCP, tylko z drugiej strony. Jeśli agent czyta opisy narzędzi i na ich podstawie działa, to pole opisu nie jest dokumentacją, jest wejściem.
- Zaktualizuj trzy narzędzia do wersji z kroniki poniżej.
- Przestań podawać długowieczne sekrety zadaniom, które czytają niezaufaną treść repozytorium. Zawężaj tokeny do zadania i skracaj ich życie.
- Nigdy nie pozwól, by jeden przebieg agenta zapisywał plik instrukcji, który czyta inny. Pliki instrukcji należą do właściciela repozytorium, nie do uruchomienia.
- Audytuj listy dozwolonych pod to, co pozwalają, nie kogo nazywają. Zaufany host, który serwuje ścieżki kontrolowane przez atakującego i ma obserwowalne skutki uboczne, jest kanałem wyprowadzania danych z dobrą reputacją.
- Claude Code: GHSA-fg94-h982-f3mm / CVE-2026-54316, npm @anthropic-ai/claude-code, podatne >= 0.2.54 i < 2.1.163, załatane w 2.1.163. Moderate, CVSS 6.0, publikacja 13 czerwca 2026.
- Gemini CLI: GHSA-wpqr-6v78-jr5g, @google/gemini-cli poniżej 0.39.1 oraz 0.40.0-preview.2, a run-gemini-cli poniżej 0.1.22. Załatane w 0.39.1, 0.40.0-preview.3 i 0.1.22. Critical, CVSS 10.0, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H, publikacja 24 kwietnia 2026.
- Windows NAT: CVE-2026-56181, błąd walidacji pochodzenia pozwalający na spoofing z sieci sąsiadującej. CVSS 3.1 podstawa 8.3, High, AV:A/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H. Naprawione buildy od 10.0.26100.8875 na Windows 11 24H2. Publikacja 14 lipca 2026.
- Łańcuch w Codeksie nie ma CVE. Według noty Cloud Security Alliance OpenAI rozdzielił dwa przebiegi agenta na osobne zadania.
- Nota CSA podaje dla Gemini CLI numer CVE-2026-12537, ale GHSA-wpqr-6v78-jr5g stwierdza, że żadne CVE nie zostało przypisane. Nie pogodziliśmy tych dwóch źródeł, więc wszystkie dane o Gemini pochodzą z advisory.
- Niczego z tego nie odtworzyliśmy. Opieramy się na opublikowanych advisory i nocie CSA, i nie mamy własnego dowodu wykonalności.
- Nie wiemy, czy wzorzec z Codeksa jest zamknięty w ogólności. Rozdzielenie przebiegów zamyka opisany łańcuch, a nie całą klasę.
- Krążące procenty o tym, ile serwerów MCP jest podatnych, pochodzą z blogów dostawców bez opublikowanej metodyki, więc ich nie powtarzamy.
- NatJack ma podobno obejmować też błąd w netfilterze na Linuksie. Nie zweryfikowaliśmy tego identyfikatora, więc go nie cytujemy.

