Skip to content

[glm-sec] MCP server binds 0.0.0.0 with no authentication #95

Description

@opaopa6969

概要

McpServer(src/main/java/org/unlaxer/tinyexpression/mcp/McpServer.java:49)は new InetSocketAddress(\"0.0.0.0\", port) で全インターフェースにバインドされ、認証なしで /mcp エンドポイントを受け付ける。

TINYEXPR_ALLOW_JAVA_CODE=true で起動した場合、ネットワーク到達可能な誰もが evaluate/execute_batch tool 経由で任意 Java コード実行バックエンドを呼べる。

再現手順

  1. リモートホストで TINYEXPR_ALLOW_JAVA_CODE=true PORT=9237 を設定し McpServer を起動
  2. 別ホストから curl -X POST http://<host>:9237/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"evaluate\",\"arguments\":{\"formula\":\"...\",\"backend\":\"JAVA_CODE\"}}}'
  3. 認証なしで Java コード実行バックエンドが呼ばれる

影響

allowJavaCode=false(既定)でも、ネットワーク到達可能な第三者が式評価リソースを消費できる(DoS / 情報漏洩の可能性)。allowJavaCode=true の場合は RCE。

別 issue とした理由

デフォルトバインドを 127.0.0.1 に変更するのは破壊的(リモート運用を想定した既存ユーザーに影響)であり、認証方式の選択(Bearer token / 既有プロキシ / 無認証の明示 opt-in 等)は設計判断が必要なため、本件では修正せず起票に留める。

想定される解決案(複数)

  1. 既定バインドを 127.0.0.1 にし、TINYEXPR_BIND=0.0.0.0 等で明示 opt-in
  2. TINYEXPR_AUTH_TOKEN 等を設定した場合のみ Bearer 認証を必須化
  3. 上記1+2の組み合わせ

関連 PR

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions