File Upload Vulnerabilities
🌐 Vulnerabilidades: File Upload (Carga de Archivos)
🕵️♂️ ¿Qué son las vulnerabilidades de carga de archivos?
Las vulnerabilidades de File Upload ocurren cuando una aplicación permite a los usuarios cargar archivos al servidor sin validación o restricciones adecuadas. Esto puede ser explotado para cargar archivos maliciosos, como scripts que comprometen el sistema, archivos que ejecutan ataques XSS o incluso para desbordar el almacenamiento del servidor.
⚙️ ¿Cómo se producen?
Falta de validación del tipo de archivo: La aplicación no verifica que el archivo cargado sea del tipo permitido. Por ejemplo, permite cargar un archivo
.php
en lugar de solo imágenes como.jpg
o.png
.Ejecución de archivos maliciosos: El archivo cargado se almacena en un directorio accesible desde el navegador, lo que permite al atacante ejecutarlo.
Sobrescritura de archivos existentes: Si no se verifica el nombre del archivo cargado, un atacante puede sobrescribir archivos críticos en el servidor.
Metadatos peligrosos: Algunos archivos (como imágenes) pueden contener datos maliciosos incrustados en sus metadatos.
Exploración de directorios: Los atacantes pueden aprovechar la carga de archivos para navegar o acceder a directorios no autorizados.
🛠️ Mecanismo de ataque
Carga de un archivo PHP malicioso:
El atacante carga este archivo al servidor y lo ejecuta desde el navegador:
Carga de una imagen con código malicioso: El atacante sube una imagen con una extensión permitida, pero con código malicioso embebido:
Sobrescritura de archivos importantes: El atacante sube un archivo con el mismo nombre que un archivo crítico del servidor, como:
🎯 Impacto
Ejecución remota de código (RCE): Los atacantes pueden ejecutar scripts en el servidor.
Robo de datos: Acceso no autorizado a archivos o bases de datos.
Denegación de servicio (DoS): Sobrecarga del almacenamiento o interrupción del servicio.
Propagación de malware: Uso del servidor para distribuir software malicioso.
Defacement: Cambiar el contenido del sitio web al cargar archivos que sobrescriban páginas.
📉 Puntaje CVSS v3
Vector de ataque: Red (Explotable remotamente)
Complejidad del ataque: Media
Impacto en confidencialidad: Alto
Impacto en integridad: Alto
Impacto en disponibilidad: Medio
Puntaje CVSS v3: 8.0 - 9.5 (Crítico) 🔥
🧑💻 Ejemplo práctico
Código vulnerable:
📌 Ataque: El atacante carga un archivo malicioso llamado shell.php
, que es accesible desde:
🛡️ ¿Cómo prevenir vulnerabilidades de carga de archivos?
1️⃣ Validación estricta del tipo de archivo
Verifica el tipo MIME y la extensión del archivo cargado:
2️⃣ Renombrar archivos cargados
Evita que los usuarios controlen el nombre del archivo almacenado en el servidor:
3️⃣ Almacenar archivos fuera del directorio web
Guarda los archivos en un directorio inaccesible desde el navegador y usa un script para acceder a ellos de manera controlada.
4️⃣ Uso de permisos estrictos
Aplica permisos restrictivos a los directorios de carga:
5️⃣ Límite de tamaño de archivo
Define un límite máximo para el tamaño de archivo permitido:
6️⃣ Escaneo de contenido del archivo
Escanea los archivos cargados en busca de contenido malicioso antes de almacenarlos.
7️⃣ Deshabilitar la ejecución de scripts en el directorio de carga
Configura el servidor para que no permita ejecutar scripts en el directorio de carga. En Apache:
8️⃣ Verificar contenido (no solo extensión)
Confirma que el archivo cargado tiene el contenido esperado:
💡 Dato extra: Las vulnerabilidades de carga de archivos son frecuentemente utilizadas en combinación con otros ataques, como LFI o RCE, para maximizar el impacto.
🚨 Nota importante: Siempre que implementes funcionalidades de carga de archivos, debes asumir que un atacante intentará abusar de ellas.
Última actualización
¿Te fue útil?