Zip Slip
Extraer archivos ZIP sin validar las rutas permite a los atacantes crear archivos que escriben fuera del directorio destino, sobrescribiendo archivos criticos de la aplicacion.
Cómo Funciona
Zip Slip es una vulnerabilidad de travesia de ruta especifica de la extraccion de archivos. Un atacante crea un archivo ZIP donde las entradas tienen rutas como ../../etc/cron.d/backdoor o ../../../app/server.js. Cuando la aplicacion extrae el archivo sin verificar la ruta destino de cada entrada, los archivos se escriben fuera del directorio de extraccion esperado. Esto puede sobrescribir configuracion del servidor, inyectar codigo malicioso en la aplicacion o colocar web shells en directorios publicamente accesibles. La vulnerabilidad afecta formatos ZIP, TAR, JAR, WAR y otros formatos de archivo. Es especialmente peligrosa en pipelines CI/CD donde los archivos subidos se extraen automaticamente.
const AdmZip = require('adm-zip');
app.post('/upload-zip', upload.single('archive'), (req, res) => {
const zip = new AdmZip(req.file.path);
zip.extractAllTo('uploads/extracted/', true);
res.json({ message: 'Extracted successfully' });
});const AdmZip = require('adm-zip');
const path = require('path');
app.post('/upload-zip', upload.single('archive'), (req, res) => {
const zip = new AdmZip(req.file.path);
const targetDir = path.resolve('uploads/extracted/');
for (const entry of zip.getEntries()) {
const dest = path.resolve(targetDir, entry.entryName);
if (!dest.startsWith(targetDir)) {
return res.status(400).json({ error: 'Invalid archive path' });
}
}
zip.extractAllTo(targetDir, true);
res.json({ message: 'Extracted successfully' });
});Ejemplo Real
Snyk descubrio la vulnerabilidad Zip Slip en 2018, afectando miles de proyectos en multiples ecosistemas. Proyectos importantes incluyendo Apache Spark, Spring Framework y Pinot de LinkedIn eran vulnerables. La vulnerabilidad permitia sobrescritura arbitraria de archivos en servidores que procesaban archivos subidos.
Cómo Prevenirlo
- Valida que la ruta resuelta de cada entrada comience con el directorio de extraccion destino
- Rechaza archivos que contengan entradas con secuencias ../ en sus rutas
- Usa librerias que tengan proteccion contra Zip Slip integrada o que hayan sido parcheadas
- Extrae archivos en contenedores aislados o entornos con sandbox
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Travesia de Ruta
highRutas de archivos construidas con input de usuario sin validar permiten a los atacantes leer o escribir archivos arbitrarios en el servidor usando secuencias ../.
Carga de Archivo sin Validacion
highAceptar 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.
SVG con JavaScript
mediumAceptar cargas de SVG sin sanitizacion permite a los atacantes embeber JavaScript en archivos SVG, habilitando ataques XSS cuando el SVG se renderiza en un navegador.
EXIF No Eliminado
lowImagenes servidas sin eliminar metadatos EXIF pueden filtrar coordenadas GPS, informacion del dispositivo, timestamps y otros datos sensibles de la persona que tomo la foto.