AIエージェントの悪用: Local AI CLI Tools & MCP (Claude/Gemini/Warp)

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

概要

Local AI command-line interfaces (AI CLIs) such as Claude Code, Gemini CLI, Warp and similar tools often ship with powerful built‑ins: filesystem read/write, shell execution and outbound network access. Many act as MCP clients (Model Context Protocol), letting the model call external tools over STDIO or HTTP. Because the LLM plans tool-chains non‑deterministically, identical prompts can lead to different process, file and network behaviours across runs and hosts.

一般的なAI CLIに見られる主要なメカニズム:

  • 通常、Node/TypeScriptで実装され、モデルを起動してツールを公開する薄いラッパーが付く。
  • 複数のモード:対話型チャット、計画/実行、単一プロンプト実行。
  • STDIOおよびHTTPトランスポートを使ったMCPクライアントサポートにより、ローカルおよびリモートでの機能拡張が可能になる。

悪用の影響: 単一のプロンプトで資格情報のインベントリ取得とexfiltration、ローカルファイルの改ざん、リモートMCPサーバーに接続して密かに機能を拡張することが可能(そのサーバーがサードパーティの場合、可視性のギャップが生じる)。


対抗者プレイブック – プロンプト駆動のシークレット収集

エージェントに、静かに資格情報/シークレットを迅速にトリアージし、exfiltrationのためにステージングするよう指示する:

  • スコープ:$HOMEおよびアプリケーション/ウォレットディレクトリ以下を再帰的に列挙する;騒音の多い/疑似パス(/proc, /sys, /dev)は避ける。
  • パフォーマンス/ステルス:再帰深度を制限する;sudo/priv‑escalationは避ける;結果を要約する。
  • ターゲット:~/.ssh, ~/.aws, cloud CLI creds, .env, *.key, id_rsa, keystore.json, browser storage (LocalStorage/IndexedDB profiles), crypto‑wallet data.
  • 出力:簡潔な一覧を/tmp/inventory.txtに書き込む;ファイルが存在する場合は上書き前にタイムスタンプ付きバックアップを作成する。

Example operator prompt to an 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.

MCPによる機能拡張(STDIO と HTTP)

AI CLIはしばしば追加ツールにアクセスするためにMCPクライアントとして機能します:

  • STDIO transport (local tools): the client spawns a helper chain to run a tool server. Typical lineage: node → <ai-cli> → uv → python → file_write. Example observed: uv run --with fastmcp fastmcp run ./server.py which starts python3.13 and performs local file operations on the agent’s behalf.
  • HTTP transport (remote tools): the client opens outbound TCP (e.g., port 8000) to a remote MCP server, which executes the requested action (e.g., write /home/user/demo_http). On the endpoint you’ll only see the client’s network activity; server‑side file touches occur off‑host.

Notes:

  • MCP tools are described to the model and may be auto‑selected by planning. Behaviour varies between runs.
  • Remote MCP servers increase blast radius and reduce host‑side visibility.

ローカルアーティファクトとログ(フォレンジック)

  • Gemini CLI セッションログ: ~/.gemini/tmp/<uuid>/logs.json
  • 一般的に見られるフィールド: sessionId, type, message, timestamp.
  • 例の message: “@.bashrc what is in this file?”(ユーザー/エージェントの意図が記録されている)。
  • Claude Code 履歴: ~/.claude/history.jsonl
  • JSONL エントリには display, timestamp, project のようなフィールドが含まれます。

Pentesting Remote MCP Servers

Remote MCP servers expose a JSON‑RPC 2.0 API that fronts LLM‑centric capabilities (Prompts, Resources, Tools). They inherit classic web API flaws while adding async transports (SSE/streamable HTTP) and per‑session semantics.

Key actors

  • Host: the LLM/agent frontend (Claude Desktop, Cursor, etc.).
  • Client: per‑server connector used by the Host (one client per server).
  • Server: the MCP server (local or remote) exposing Prompts/Resources/Tools.

AuthN/AuthZ

  • OAuth2 is common: an IdP authenticates, the MCP server acts as resource server.
  • After OAuth, the server issues an authentication token used on subsequent MCP requests. This is distinct from Mcp-Session-Id which identifies a connection/session after initialize.

Transports

  • Local: JSON‑RPC over STDIN/STDOUT.
  • Remote: Server‑Sent Events (SSE, still widely deployed) and streamable HTTP.

A) セッション初期化

  • Obtain OAuth token if required (Authorization: Bearer …).
  • Begin a session and run the MCP handshake:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"capabilities":{}}}
  • 返された Mcp-Session-Id を保持し、トランスポートルールに従ってその後のリクエストに含めます。

B) 機能を列挙する

  • Tools
{"jsonrpc":"2.0","id":10,"method":"tools/list"}
  • リソース
{"jsonrpc":"2.0","id":1,"method":"resources/list"}
  • プロンプト
{"jsonrpc":"2.0","id":20,"method":"prompts/list"}

C) 悪用可能性チェック

  • Resources → LFI/SSRF
  • サーバーは resources/list で通知した URI に対してのみ resources/read を許可するべきです。集合外の URI を試して、制約が甘いかを検査してください:
{"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/"}}
  • 成功は LFI/SSRF と内部 pivoting の可能性を示します。
  • リソース → IDOR (multi‑tenant)
  • サーバーが multi‑tenant の場合、別ユーザーのリソース URI を直接読み取ることを試みてください。per‑user チェックが欠けていると cross‑tenant データが leak します。
  • ツール → Code execution and dangerous sinks
  • ツールの schemas を列挙し、command lines、subprocess calls、templating、deserializers、または file/network I/O に影響を与える fuzz パラメータを列挙してください:
{"jsonrpc":"2.0","id":11,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{"query":"; id"}}}
  • 結果のエラーエコー/スタックトレースを確認してペイロードを洗練する。独立したテストでは MCP tools に広範な command‑injection および関連の脆弱性が報告されている。
  • Prompts → Injection preconditions
  • Prompts は主にメタデータを露出するだけで、prompt injection が問題になるのは prompt parameters を改ざんできる場合(例: 乗っ取られたリソースやクライアントのバグ経由)のみである。

D) インターセプトとファジング用のツール

  • MCP Inspector (Anthropic): STDIO、SSE、および streamable HTTP と OAuth をサポートする Web UI/CLI。クイックな偵察や手動でのツール呼び出しに最適。
  • HTTP–MCP Bridge (NCC Group): MCP の SSE を HTTP/1.1 にブリッジし、Burp/Caido を使えるようにする。
  • ブリッジをターゲットの MCP サーバー(SSE トランスポート)を指すように起動する。
  • README に従い、initialize ハンドシェイクを手動で実行して有効な Mcp-Session-Id を取得する。
  • tools/listresources/listresources/readtools/call のような JSON‑RPC メッセージを Repeater/Intruder 経由でプロキシし、リプレイやファジングを行う。

簡易テスト計画

  • 認証(OAuth がある場合)→ initialize を実行 → 列挙(tools/listresources/listprompts/list)→ resource URI の許可リストとユーザーごとの認可を検証 → コード実行や I/O のシンクになりそうな箇所でツール入力をファジングする。

影響のハイライト

  • リソースURIの強制がない → LFI/SSRF、内部探索およびデータ窃取。
  • ユーザーごとのチェックがない → IDOR およびテナント間の露出。
  • Unsafe tool implementations → command injection → server‑side RCE and data exfiltration。

参考

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする