Sin Límite de Tamaño de Archivo
Los endpoints de carga de archivos sin límites de tamaño permiten a los atacantes agotar el espacio en disco, la memoria y la CPU con cargas de múltiples gigabytes.
Cómo Funciona
Sin un límite de tamaño de archivo, un atacante puede cargar un archivo de 10GB a tu bucket de almacenamiento, llenar tu directorio /tmp o crashear tu servidor por OOM cargando el archivo en memoria para procesarlo. Incluso sin intención maliciosa, un usuario que carga un video 4K crudo a un endpoint de foto de perfil causa el mismo problema.
// MAL: sin límite de tamaño de archivo — el atacante carga archivos de 10GB
export const config = { api: { bodyParser: false } };
export default async function handler(req, res) {
const form = new IncomingForm(); // sin maxFileSize configurado
const [fields, files] = await form.parse(req);
await uploadToStorage(files.upload[0]);
}// BIEN: aplica límite de tamaño antes de procesar
export const config = { api: { bodyParser: false } };
export default async function handler(req, res) {
const form = new IncomingForm({
maxFileSize: 5 * 1024 * 1024, // límite de 5MB
maxFiles: 1
});
const [fields, files] = await form.parse(req);
await uploadToStorage(files.upload[0]);
}Ejemplo Real
Múltiples servidores de producción han sido desconectados por ataques DoS de carga de archivos donde el atacante cargó archivos de múltiples GB que llenaron la capa escribible del contenedor o agotaron la memoria heap de Node.js durante el procesamiento de imágenes.
Cómo Prevenirlo
- Establece maxFileSize al mínimo necesario para tu caso de uso (5MB para fotos de perfil, 50MB para documentos)
- Valida el tamaño del archivo tanto del lado del cliente (para UX) como del servidor (para seguridad)
- También establece un número máximo de archivos por solicitud de carga
- Usa carga directa a almacenamiento en la nube (Supabase Storage, URLs presignadas de S3) donde sea posible — el archivo nunca toca tu servidor
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Límite de Tamaño del Cuerpo de Request
mediumLos endpoints de API JSON sin límite de tamaño del body pueden ser víctimas de DoS enviando payloads JSON enormes que agotan la memoria del servidor durante el parseo.
Sin Rate Limiting Global
mediumSin rate limiting global a nivel de edge o middleware, cualquier endpoint puede ser inundado con requests hasta que el servidor se desborde.
Sin Timeout de Request
lowLas requests HTTP sin timeouts del lado del servidor permiten que clientes lentos o ataques slow-body mantengan conexiones del servidor abiertas indefinidamente.
WebSocket Sin Autenticación
highLos endpoints WebSocket que aceptan conexiones sin verificar autenticación permiten que usuarios no autenticados reciban flujos de datos en tiempo real destinados a usuarios autenticados.