Rastreo de GraphQL Habilitado
Descripción
El rastreo de GraphQL (GraphQL Tracing) es una función que, cuando está habilitada, proporciona información detallada de tiempo sobre la ejecución de una consulta de GraphQL. Si bien es útil para la depuración y optimización del rendimiento, puede filtrar información confidencial sobre el funcionamiento interno del servidor si se deja habilitada en un entorno de producción.
Cuando el rastreo está habilitado, el servidor de GraphQL incluye un campo extensions en la respuesta, que contiene un objeto tracing. Este objeto incluye información detallada sobre la ejecución de cada resolvedor en la consulta, incluidas las horas de inicio, las horas de finalización y las duraciones.
Ejemplo de una respuesta con rastreo habilitado:
{
"data": {
"field1": "value1",
"field2": "value2"
},
"extensions": {
"tracing": {
"version": 1,
"startTime": "2023-09-17T10:00:00.000Z",
"endTime": "2023-09-17T10:00:00.050Z",
"duration": 50000000,
"execution": {
"resolvers": [
{
"path": ["field1"],
"parentType": "Query",
"fieldName": "field1",
"returnType": "String",
"startOffset": 1000000,
"duration": 2000000
},
{
"path": ["field2"],
"parentType": "Query",
"fieldName": "field2",
"returnType": "String",
"startOffset": 3000000,
"duration": 1000000
}
]
}
}
}
}
Impacto de seguridad del rastreo de GraphQL: - Divulgación de información: Los datos de rastreo pueden revelar detalles internos sobre la estructura y el rendimiento del servidor de GraphQL, que los atacantes podrían aprovechar para planificar ataques más dirigidos. - Sobrecarga de rendimiento: Habilitar el rastreo en producción puede introducir una sobrecarga de rendimiento innecesaria, lo que podría afectar la capacidad del servidor para manejar cargas elevadas. - Problemas de privacidad de datos: En algunos casos, los datos de rastreo pueden incluir información confidencial que no debe exponerse a los clientes.
Recomendación
Recomendaciones para el Rastreo de GraphQL
Para mitigar los riesgos asociados con el rastreo de GraphQL, considere las siguientes recomendaciones:
-
Comprender la implementación del rastreo: El rastreo de GraphQL generalmente se implementa mediante complementos y, a menudo, envía datos a servidores de rastreo separados (por ejemplo, Jaeger) en lugar de exponerlos directamente en las respuestas de GraphQL.
-
Controlar el rastreo en producción: Utilice variables de entorno o configuraciones para habilitar o deshabilitar fácilmente el rastreo según el entorno.
-
Implementar controles de acceso: Si el rastreo está habilitado en producción, implemente estrictos controles de acceso en el servidor de rastreo (por ejemplo, Jaeger) para garantizar que solo el personal autorizado pueda acceder a los datos de rastreo.
-
Sanitizar los datos de rastreo: Asegúrese de que no se incluya información confidencial en los datos rastreados antes de enviarlos al servidor de rastreo.
-
Utilizar herramientas de APM seguras: Considere la posibilidad de utilizar herramientas de Monitoreo del Rendimiento de Aplicaciones (APM) dedicadas que proporcionen capacidades de monitoreo seguras y completas para entornos de producción.
Ejemplo de implementación de rastreo con control basado en el entorno en Apollo Server:
const { ApolloServer } = require('apollo-server');
const { ApolloServerPluginInlineTrace } = require('apollo-server-core');
const isProduction = process.env.NODE_ENV === 'production';
const plugins = [];
if (!isProduction) {
plugins.push(ApolloServerPluginInlineTrace({
rewriteError: (err) => {
// Optionally rewrite errors before sending to the tracing service
return err;
},
}));
}
const server = new ApolloServer({
typeDefs,
resolvers,
plugins,
});
Esta configuración le permite controlar fácilmente el rastreo según el entorno, lo que garantiza que no se habilite accidentalmente en producción.
Para otras implementaciones de servidores GraphQL, consulte la documentación específica sobre cómo implementar y controlar el rastreo de forma segura.
Enlaces
Estándares
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_6_5
- REQ_11_3
- OWASP_MASVS_L2:
- MSTG_ARCH_9
- OWASP_ASVS_L3:
- V1_4_4
- SOC2_CONTROLS:
- CC_6_1
- CC_6_7
- CC_7_1
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255