概要
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 コード実行バックエンドを呼べる。
再現手順
- リモートホストで
TINYEXPR_ALLOW_JAVA_CODE=true PORT=9237 を設定し McpServer を起動 - 別ホストから
curl -X POST http://<host>:9237/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"evaluate\",\"arguments\":{\"formula\":\"...\",\"backend\":\"JAVA_CODE\"}}}' - 認証なしで Java コード実行バックエンドが呼ばれる
影響
allowJavaCode=false(既定)でも、ネットワーク到達可能な第三者が式評価リソースを消費できる(DoS / 情報漏洩の可能性)。allowJavaCode=true の場合は RCE。
別 issue とした理由
デフォルトバインドを 127.0.0.1 に変更するのは破壊的(リモート運用を想定した既存ユーザーに影響)であり、認証方式の選択(Bearer token / 既有プロキシ / 無認証の明示 opt-in 等)は設計判断が必要なため、本件では修正せず起票に留める。
想定される解決案(複数)
- 既定バインドを
127.0.0.1 にし、TINYEXPR_BIND=0.0.0.0 等で明示 opt-in TINYEXPR_AUTH_TOKEN 等を設定した場合のみ Bearer 認証を必須化- 上記1+2の組み合わせ
関連 PR
概要
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_batchtool 経由で任意 Java コード実行バックエンドを呼べる。再現手順
TINYEXPR_ALLOW_JAVA_CODE=true PORT=9237を設定しMcpServerを起動curl -X POST http://<host>:9237/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"evaluate\",\"arguments\":{\"formula\":\"...\",\"backend\":\"JAVA_CODE\"}}}'影響
allowJavaCode=false(既定)でも、ネットワーク到達可能な第三者が式評価リソースを消費できる(DoS / 情報漏洩の可能性)。allowJavaCode=trueの場合は RCE。別 issue とした理由
デフォルトバインドを
127.0.0.1に変更するのは破壊的(リモート運用を想定した既存ユーザーに影響)であり、認証方式の選択(Bearer token / 既有プロキシ / 無認証の明示 opt-in 等)は設計判断が必要なため、本件では修正せず起票に留める。想定される解決案(複数)
127.0.0.1にし、TINYEXPR_BIND=0.0.0.0等で明示 opt-inTINYEXPR_AUTH_TOKEN等を設定した場合のみ Bearer 認証を必須化関連 PR