cd ~/blog

~/vulns/unrestricted-file-upload-rce.md

Unrestricted File Upload RCE

webautor: Jordy Pérez Osorio aviso legal
webfile-uploadRCE

~3 min de lectura


1. Descripción técnica

Esta debilidad permite transferir un archivo de tipo peligroso a un lugar donde otro componente lo procesa automáticamente. En aplicaciones web, la variante más grave combina una carga de código, una ruta publicada y un intérprete asociado a su extensión.

La subida por sí sola no demuestra RCE. Un archivo PHP almacenado fuera del document root, renombrado a un identificador sin extensión y servido como descarga no tendrá el mismo efecto que el mismo archivo dentro de una carpeta donde el servidor interpreta PHP.

1.1. Mecanismo

// renderizando diagrama…

La misma cadena puede aparecer sin formulario HTTP. Un recurso SMB o FTP escribible que corresponda al árbol web también permite colocar un archivo interpretable. En ese caso, la causa inmediata es el permiso de escritura, pero el resultado técnico sigue dependiendo de transferir contenido peligroso a una ruta ejecutable.

2. Impacto

Cuando el archivo es interpretado, el atacante obtiene ejecución con la identidad del servicio web. Otras variantes pueden producir XSS almacenado, sustitución de contenido, consumo de disco o procesamiento inseguro de documentos.

3. Condiciones necesarias

  1. El atacante puede transferir o escribir un archivo.
  2. El servidor conserva un contenido y una extensión peligrosos, o permite recuperarlos con un nombre interpretable.
  3. La ubicación final es accesible para el componente que procesa el archivo.
  4. La configuración asocia ese tipo de archivo con ejecución o procesamiento activo.

Comprobar sólo Content-Type, la extensión declarada o JavaScript del navegador no cubre todas estas condiciones.

4. Validación y detección

Se empieza con un archivo inofensivo y un nombre reconocible. Después se comprueban la ruta final, el nombre real, las cabeceras al descargarlo y si el servidor lo entrega como dato o lo interpreta.

En código deben seguirse los datos desde la petición hasta la operación de escritura. También se revisan permisos del directorio, renombrado, validación de contenido y configuración del servidor web.

5. Explotación documentada en los writeups

5.1. 003-connection

El recurso SMB share permite escribir directamente en los archivos publicados por Apache. Una prueba de texto confirma el permiso antes de colocar PHP.

5.2. 008-first

upload.php acepta PHP y /uploads permite recuperarlo por HTTP. whoami demuestra que el servidor interpreta la webshell.

5.3. 013-xmas

El formulario conserva una reverse shell PHP en una ruta servida por Apache. La conexión entrante confirma tanto la ubicación como la interpretación.

5.4. 018-university

El código recuperado desde .git demuestra que los endpoints de carga omiten autenticación y revela studentdoc como ruta final.

6. Mitigación

  • Almacenar archivos fuera del document root y entregarlos mediante un controlador de descarga.
  • Generar nombres internos sin reutilizar la extensión aportada por el usuario.
  • Permitir sólo los formatos necesarios y validar extensión, MIME y estructura real.
  • Deshabilitar la ejecución en todos los directorios de almacenamiento.
  • Aplicar autenticación, autorización, límites de tamaño y cuotas.
  • Procesar archivos complejos en un servicio aislado con privilegios mínimos.

7. Clasificación

  • CWE: CWE-434
  • Vector: transferencia de un tipo de archivo peligroso
  • Impacto máximo: ejecución de código cuando el entorno interpreta la carga

8. Referencias y conexiones

// relacionados