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.
// 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);
};// 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Abuso de Timeout de Función
mediumLas funciones serverless sin timeout configurado pueden mantenerse corriendo indefinidamente con requests maliciosas, drenando tu presupuesto.
Roles IAM Sobre-privilegiados
mediumDarle a funciones serverless o servicios más permisos IAM de los necesarios convierte una brecha menor en un compromiso total de la cuenta.
Variables de Entorno en Logs
highLoguear process.env vuelca todos tus secrets — API keys, contraseñas de base de datos, claves de firma — directamente en tu sistema de logs.
Estado Compartido en /tmp
mediumLas funciones serverless reutilizan entornos de ejecución entre invocaciones, por lo que archivos sensibles escritos en /tmp pueden ser leídos por requests posteriores de otros usuarios.