Nadużycie agentów AI: Lokalnie uruchamiane AI CLI i MCP (Claude/Gemini/Warp)

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Przegląd

Lokalne interfejsy wiersza poleceń dla AI (AI CLIs) takie jak Claude Code, Gemini CLI, Warp i podobne narzędzia często dostarczane są z potężnymi wbudowanymi funkcjami: odczyt/zapis systemu plików, wykonywanie poleceń shell oraz wychodzący dostęp do sieci. Wiele z nich działa jako klienci MCP (Model Context Protocol), pozwalając modelowi wywoływać zewnętrzne narzędzia przez STDIO lub HTTP. Ponieważ LLM planuje łańcuchy narzędzi w sposób niedeterministyczny, identyczne prompty mogą skutkować różnymi zachowaniami procesów, plików i sieci w kolejnych uruchomieniach i na różnych hostach.

Kluczowe mechanizmy spotykane w powszechnych AI CLI:

  • Zwykle zaimplementowane w Node/TypeScript z cienką nakładką uruchamiającą model i udostępniającą narzędzia.
  • Kilka trybów: interaktywny chat, plan/wykonaj oraz jednokrotne uruchomienie z promptem.
  • Wsparcie klientów MCP z transportami STDIO i HTTP, umożliwiające rozszerzanie funkcji lokalnie i zdalnie.

Wpływ nadużycia: pojedynczy prompt może zinwentaryzować i wykraść poświadczenia, zmodyfikować pliki lokalne oraz dyskretnie rozszerzyć możliwości przez połączenie z zdalnymi serwerami MCP (lukę w widoczności jeśli serwery należą do stron trzecich).


Scenariusz atakującego – inwentaryzacja sekretów sterowana promptem

Zadaniem agenta jest szybkie przejrzenie i przygotowanie poświadczeń/sekretów do eksfiltracji przy zachowaniu ciszy:

  • Zakres: rekurencyjnie enumeruj pod $HOME oraz katalogami aplikacji/portfeli; unikaj głośnych/pseudo ścieżek (/proc, /sys, /dev).
  • Wydajność/ukrycie: ogranicz głębokość rekurencji; unikaj sudo/eskalacji uprawnień; podsumuj wyniki.
  • Cele: ~/.ssh, ~/.aws, cloud CLI creds, .env, *.key, id_rsa, keystore.json, storage przeglądarki (LocalStorage/IndexedDB profiles), dane portfeli kryptowalut.
  • Wyjście: zapisz zwięzłą listę do /tmp/inventory.txt; jeśli plik istnieje, utwórz kopię zapasową z sygnaturą czasową przed nadpisaniem.

Przykładowy prompt operatora do AI CLI:

You can read/write local files and run shell commands.
Recursively scan my $HOME and common app/wallet dirs to find potential secrets.
Skip /proc, /sys, /dev; do not use sudo; limit recursion depth to 3.
Match files/dirs like: id_rsa, *.key, keystore.json, .env, ~/.ssh, ~/.aws,
Chrome/Firefox/Brave profile storage (LocalStorage/IndexedDB) and any cloud creds.
Summarize full paths you find into /tmp/inventory.txt.
If /tmp/inventory.txt already exists, back it up to /tmp/inventory.txt.bak-<epoch> first.
Return a short summary only; no file contents.

Rozszerzanie funkcji via MCP (STDIO i HTTP)

AI CLIs często działają jako klienci MCP, aby uzyskać dostęp do dodatkowych narzędzi:

  • STDIO transport (local tools): klient tworzy łańcuch pomocników do uruchomienia tool server. Typowa kolejność: node → <ai-cli> → uv → python → file_write. Przykład zaobserwowany: uv run --with fastmcp fastmcp run ./server.py, który uruchamia python3.13 i wykonuje lokalne operacje na plikach w imieniu agenta.
  • HTTP transport (remote tools): klient otwiera wychodzące połączenie TCP (np. port 8000) do zdalnego MCP server, który wykonuje żądaną akcję (np. write /home/user/demo_http). Na endpoint zobaczysz tylko aktywność sieciową klienta; operacje na plikach po stronie serwera zachodzą poza hostem.

Notes:

  • MCP tools są opisywane modelowi i mogą być auto‑wybierane przez planning. Zachowanie różni się między uruchomieniami.
  • Remote MCP servers zwiększają blast radius i zmniejszają widoczność po stronie hosta.

Lokalnie artefakty i logi (Forensics)

  • Gemini CLI session logs: ~/.gemini/tmp/<uuid>/logs.json
  • Pola często spotykane: sessionId, type, message, timestamp.
  • Przykładowy message: “@.bashrc what is in this file?” (uchwycona intencja user/agera).
  • Claude Code history: ~/.claude/history.jsonl
  • Wpisy JSONL z polami takimi jak display, timestamp, project.

Pentesting zdalnych serwerów MCP

Zdalne serwery MCP expose API JSON‑RPC 2.0, które frontuje LLM‑centryczne możliwości (Prompts, Resources, Tools). Dziedziczą klasyczne błędy web API, jednocześnie dodając async transports (SSE/streamable HTTP) oraz semantykę per‑session.

Key actors

  • Host: frontend LLM/agera (Claude Desktop, Cursor, etc.).
  • Client: per‑server connector używany przez Host (one client per server).
  • Server: MCP server (lokalny lub zdalny) expose’ujący Prompts/Resources/Tools.

AuthN/AuthZ

  • OAuth2 jest powszechne: IdP uwierzytelnia, MCP server działa jako resource server.
  • Po OAuth serwer wydaje token uwierzytelniający używany w kolejnych MCP requests. To różni się od Mcp-Session-Id, które identyfikuje połączenie/sesję po initialize.

Transports

  • Local: JSON‑RPC over STDIN/STDOUT.
  • Remote: Server‑Sent Events (SSE, wciąż szeroko stosowane) oraz streamable HTTP.

A) Inicjalizacja sesji

  • Uzyskaj token OAuth jeśli wymagany (Authorization: Bearer …).
  • Rozpocznij sesję i przeprowadź MCP handshake:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"capabilities":{}}}
  • Zachowaj zwrócony Mcp-Session-Id i dołącz go do kolejnych żądań zgodnie z regułami transportu.

B) Wylicz możliwości

  • Tools
{"jsonrpc":"2.0","id":10,"method":"tools/list"}
  • Zasoby
{"jsonrpc":"2.0","id":1,"method":"resources/list"}
  • Prompty
{"jsonrpc":"2.0","id":20,"method":"prompts/list"}

C) Kontrole podatności

  • Zasoby → LFI/SSRF
  • Serwer powinien zezwalać na resources/read tylko dla URI, które zadeklarował w resources/list. Przetestuj URI spoza tego zbioru, aby wykryć słabe egzekwowanie:
{"jsonrpc":"2.0","id":2,"method":"resources/read","params":{"uri":"file:///etc/passwd"}}
{"jsonrpc":"2.0","id":3,"method":"resources/read","params":{"uri":"http://169.254.169.254/latest/meta-data/"}}
  • Sukces wskazuje na LFI/SSRF i możliwe internal pivoting.
  • Zasoby → IDOR (multi‑tenant)
  • Jeśli serwer jest multi‑tenant, spróbuj bezpośrednio odczytać resource URI innego użytkownika; brak per‑user checks leak cross‑tenant data.
  • Narzędzia → Code execution and dangerous sinks
  • Wyenumeruj schematy narzędzi i fuzzuj parametry, które wpływają na command lines, subprocess calls, templating, deserializers lub file/network I/O:
{"jsonrpc":"2.0","id":11,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{"query":"; id"}}}
  • Szukaj wypisów błędów/stack traces w wynikach, aby dopracować payloads. Niezależne testy zgłaszały powszechne podatności typu command‑injection i pokrewne w narzędziach MCP.
  • Prompts → warunki wstępne dla injection
  • Prompts głównie ujawniają metadane; prompt injection ma znaczenie tylko wtedy, gdy możesz ingerować w prompt parameters (np. przez skompromitowane zasoby lub błędy po stronie klienta).

D) Narzędzia do przechwytywania i fuzzingu

  • MCP Inspector (Anthropic): Web UI/CLI obsługujący STDIO, SSE i streamowane HTTP z OAuth. Idealny do szybkiego rozpoznania i ręcznego uruchamiania narzędzi.
  • HTTP–MCP Bridge (NCC Group): Mostkuje MCP SSE do HTTP/1.1, dzięki czemu możesz użyć Burp/Caido.
  • Uruchom bridge skierowany na docelowy serwer MCP (transport SSE).
  • Ręcznie wykonaj handshake initialize, aby pozyskać ważny Mcp-Session-Id (zgodnie z README).
  • Przekierowuj wiadomości JSON‑RPC takie jak tools/list, resources/list, resources/read oraz tools/call przez Repeater/Intruder w celu replay i fuzzingu.

Quick test plan

  • Uwierzytelnij się (OAuth, jeśli jest dostępne) → uruchom initialize → enumeracja (tools/list, resources/list, prompts/list) → zweryfikuj allow‑listę URI zasobów i autoryzację per‑user → fuzzuj wejścia narzędzi w prawdopodobnych miejscach code‑execution i I/O.

Impact highlights

  • Brak wymuszenia sprawdzania URI zasobów → LFI/SSRF, odkrywanie zasobów wewnętrznych i wykradanie danych.
  • Brak kontroli per‑user → IDOR i ujawnienie między tenantami.
  • Niezabezpieczone implementacje narzędzi → command injection → server‑side RCE i data exfiltration.

References

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks