`createMcpExpressApp` / `createMcpHonoApp`: non-loopback `host` silently skips Host/Origin checks (only `0.0.0.0`/`::` warn) |
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 65/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- node.js, typescript
- Área
- backend-api-design, security
Línea de trabajo
El problema está en packages/middleware/express/src/express.ts y packages/middleware/hono/src/hono.ts. Examina la lógica que añade el middleware localhostHostValidation y registra advertencias. La tarea es extender la advertencia o validación a hosts que no sean de loopback, como '192.168.1.10'. Comprueba cómo se utilizan las opciones allowedHosts y allowedOrigins. Una prueba debe verificar que la advertencia aparece o que la validación se aplica para un host que no sea de loopback.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Static review of public source at commit 603217008710. No traffic was sent to any MCP environment.
createMcpExpressApp (and the matching Hono helper) auto-arm Host + Origin validation only for loopback hosts. Binding to 0.0.0.0 / :: logs a warning, but any other non-loopback host (LAN IP, container hostname, public DNS name) gets neither middleware nor that warning:
packages/middleware/express/src/express.ts (same ladder in packages/middleware/hono/src/hono.ts):
const localhostHosts = ['127.0.0.1', 'localhost', '::1'];
if (localhostHosts.includes(host)) {
app.use(localhostHostValidation());
} else if (host === '0.0.0.0' || host === '::') {
console.warn(
`Warning: Server is binding to ${host} without DNS rebinding protection. ` +
'Consider using the allowedHosts option...'
);
}
// Origin: only armed for loopback or explicit allowedOrigins
So createMcpExpressApp({ host: '192.168.1.10' }) or { host: 'mcp.internal' } serves without Host/Origin checks and without the operator nudge that 0.0.0.0 already gets. DNS rebinding / browser-origin abuse is exactly what those middleware exist for on HTTP MCP endpoints.
Suggested change:
- Treat every non-loopback
hostlike0.0.0.0: requireallowedHosts(and ideallyallowedOrigins), or at least emit the same warning. - Or fail closed: refuse to construct the app for non-loopback binds unless allowlists are provided.
- Keep the explicit opt-out path for demos that truly need an open bind.
Severity: medium as insecure default / defense-in-depth for non-loopback HTTP mounts; not claiming a working exploit against a specific deployment. No proof-of-concept.
Happy to send a focused PR if this direction is useful.
- Lenguaje dominante
- TypeScript
- Estrellas
- 13.4k
- Forks
- 2.2k
- Merge medio
- 4 d 18 h
- PR fusionados (30 d)
- 6
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de modelcontextprotocol/typescript-sdk
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Auth metadata discovery: fallback URL built on resource host instead of authorization-server host Abiertov1 v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
v1 v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
modelcontextprotocol/typescript-sdk#2783 · 1 comentario ·
-
v1 v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
modelcontextprotocol/typescript-sdk#2773 · 1 comentario ·
-
v2
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
modelcontextprotocol/typescript-sdk#2766 · 1 comentario ·
Todos los issues de modelcontextprotocol/typescript-sdk
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
mksglu/context-mode#1200 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
anthropics/claude-code#96687 ·
-
good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
AOSSIE-Org/DebateAI#582 · 2 comentarios ·
-
📕documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
db-ux-design-system/core-web#8239 ·