Estas fallas abusan de cómo la aplicación maneja archivos: qué deja subir y qué decide incluir o leer según la entrada del usuario. Bien explotadas, llevan a leer archivos sensibles o a ejecutar código en el servidor.
Subida de archivos insegura
Ocurre cuando la app permite cargar archivos sin validar qué son realmente. El riesgo máximo es subir una webshell (código del lado del servidor) y lograr que se ejecute.
Defensas: validar el tipo real del archivo (no solo la extensión o el
Content-Type, que se falsifican), renombrar el archivo con un nombre aleatorio, guardarlo fuera de la carpeta servible por web y servirlo sin permitir su ejecución, limitar tamaño y extensiones con lista blanca.
LFI — inclusión de archivos local
La app construye una ruta con datos del usuario y los lee/incluye desde el propio servidor:
GET /index.php?page=inicio
GET /index.php?page=../../../../etc/passwd ← path traversal
Permite leer configuraciones, credenciales o logs. Combinado con otros trucos, a veces lleva a ejecución de código.
RFI — inclusión de archivos remota
Igual que LFI, pero la app incluye un archivo alojado por el atacante en otro servidor; al incluirlo, lo ejecuta. Hoy es menos común porque los lenguajes deshabilitan por defecto la inclusión remota.
La defensa común
No construir rutas ni elegir archivos con la entrada del usuario. Usar un mapa fijo de páginas permitidas (lista blanca), normalizar y validar las rutas, y bloquear secuencias como
../.
| Falla | Idea | Defensa principal |
|---|---|---|
| Subida insegura | Subir código ejecutable | Validar tipo real, renombrar, fuera de la raíz web |
| LFI | Leer archivos locales por la ruta | Lista blanca de páginas; bloquear ../ |
| RFI | Incluir y ejecutar archivo remoto | Deshabilitar inclusión remota; lista blanca |
Con esto recorrimos las fallas web más comunes. El paso final no es técnico de ataque sino profesional: comunicar lo encontrado de forma útil. Es el reporte y remediación, el último tema del pilar.