mediumCWE-400A02:2021

Fuga de Estado en Cold Start

Las variables globales en funciones serverless persisten entre invocaciones en el mismo entorno de ejecución, filtrando datos de usuarios entre requests.

Cómo Funciona

Las variables a nivel de módulo en una función Lambda se inicializan una vez y se reutilizan en invocaciones calientes. Si cacheas un objeto de usuario o datos de request en una variable global por rendimiento, la siguiente invocación en el mismo contenedor lee los datos del usuario anterior antes de sobrescribirlos.

Código Vulnerable
// MAL: datos de usuario en variable de módulo se filtran entre invocaciones
let currentUser: User | null = null; // ¡persiste entre invocaciones calientes!

export const handler = async (event) => {
  currentUser = await getUser(event.userId);
  return processRequest(currentUser);
};
Código Seguro
// BIEN: mantén todos los datos específicos del usuario dentro del scope del handler
export const handler = async (event) => {
  const currentUser = await getUser(event.userId); // solo scope local
  return processRequest(currentUser);
};

Ejemplo Real

Una fintech reportó un bug donde los usuarios ocasionalmente veían el saldo de otro usuario. La causa raíz fue una variable de caché a nivel de módulo que mantenía los datos del usuario de la invocación anterior durante la breve ventana antes de que se cargaran los datos del nuevo usuario.

Cómo Prevenirlo

  • Nunca guardes datos específicos de usuario o de request en variables a nivel de módulo
  • Limita las variables globales a configuración verdaderamente estática (valores de entorno, clientes inicializados)
  • Si cacheas recursos costosos globalmente (conexiones a DB), asegúrate de que el objeto cacheado no tenga datos de usuario
  • Agrega tests de integración que simulen invocaciones consecutivas de diferentes usuarios

Tecnologías Afectadas

aws-lambdaNode.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas