highCWE-434A04:2021

Carga de Archivo sin Validacion

Aceptar cargas de archivos sin verificar tipo, tamano o contenido permite a los atacantes subir ejecutables maliciosos, web shells o archivos sobredimensionados que crashean el servidor.

Cómo Funciona

Cuando una aplicacion acepta cargas de archivos sin validacion, los atacantes pueden subir archivos que el servidor nunca deberia procesar. Un web shell PHP disfrazado como imagen puede ejecutar comandos arbitrarios cuando se accede via URL. Un ejecutable subido como documento puede comprometer a otros usuarios que lo descarguen. Archivos sobredimensionados pueden llenar el disco y causar denegacion de servicio. Incluso con validacion del lado del cliente, los atacantes la bypassean trivialmente usando curl o Burp Suite. El servidor debe validar independientemente el tipo de archivo (por contenido, no solo extension), limitar el tamano y almacenar archivos fuera del web root.

Código Vulnerable
const multer = require('multer');
const upload = multer({ dest: 'public/uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
  res.json({ url: `/uploads/${req.file.filename}` });
});
Código Seguro
const multer = require('multer');
const upload = multer({
  dest: 'private/uploads/',
  limits: { fileSize: 5 * 1024 * 1024 },
  fileFilter: (req, file, cb) => {
    const allowed = ['image/jpeg', 'image/png', 'image/webp'];
    cb(null, allowed.includes(file.mimetype));
  }
});

Ejemplo Real

En 2023, una vulnerabilidad de carga de archivos en MOVEit Transfer (CVE-2023-34362) fue explotada por el grupo de ransomware Clop. Los atacantes subieron web shells a traves del servicio de transferencia de archivos, comprometiendo mas de 2,500 organizaciones incluyendo Shell, British Airways y la BBC.

Cómo Prevenirlo

  • Valida el tipo MIME del archivo leyendo los headers del contenido, no solo la extension
  • Aplica limites estrictos de tamano usando la opcion limits de multer
  • Almacena archivos subidos fuera del web root en un directorio privado
  • Genera nombres de archivo aleatorios y nunca uses el nombre original del usuario

Tecnologías Afectadas

Node.jsPythonJavaPHPGo

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas