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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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 uruchamiapython3.13i 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ę poinitialize.
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-Idi 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/readtylko dla URI, które zadeklarował wresources/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żnyMcp-Session-Id(zgodnie z README). - Przekierowuj wiadomości JSON‑RPC takie jak
tools/list,resources/list,resources/readoraztools/callprzez 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
- Commanding attention: How adversaries are abusing AI CLI tools (Red Canary)
- Model Context Protocol (MCP)
- Assessing the Attack Surface of Remote MCP Servers
- MCP Inspector (Anthropic)
- HTTP–MCP Bridge (NCC Group)
- MCP spec – Authorization
- MCP spec – Transports and SSE deprecation
- Equixly: MCP server security issues in the wild
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
HackTricks

