cd ~/blog

~/vulns/remote-file-inclusion.md

Remote File Inclusion

webautor: Jordy Pérez Osorio aviso legal
webPHPRFI

~2 min de lectura


1. Descripción técnica

Remote File Inclusion aparece cuando una aplicación construye la ruta de una operación include o require con entrada controlada y permite utilizar una URL remota. El servidor solicita el recurso externo y el intérprete procesa su contenido como parte de la aplicación.

El usuario elige el origen del archivo y la aplicación trata el contenido recuperado como código. Base64, una extensión añadida o una ruta indirecta no corrigen el problema si la URL continúa bajo control externo.

1.1. Mecanismo

// renderizando diagrama…

Una Local File Inclusion referencia archivos ya presentes en la víctima. Una RFI introduce contenido desde otro sistema, por lo que puede producir ejecución de código directamente cuando el lenguaje interpreta el recurso.

2. Impacto

El impacto habitual es Remote Code Execution con la identidad del servicio web. También puede exponer información en las peticiones salientes y permitir que el atacante cambie la carga sin modificar la URL vulnerable.

3. Condiciones necesarias

  1. La entrada controla total o parcialmente una ruta incluida.
  2. El runtime acepta esquemas remotos para esa operación.
  3. La víctima puede alcanzar el servidor controlado.
  4. El contenido incluido se interpreta como código y no solo como texto.

4. Validación y detección

Se utiliza un recurso remoto inocuo y único, se confirma la petición en el servidor controlado y se observa su efecto en la respuesta. Un acceso HTTP saliente demuestra recuperación, pero la ejecución debe validarse por separado con una salida controlada.

En defensa se revisan parámetros de plantillas o páginas, llamadas dinámicas a include y require, tráfico saliente del proceso web y configuraciones como allow_url_include.

5. Explotación documentada en los writeups

5.1. 021-quick

El parámetro page acepta una URL, la aplicación añade .php y PHP interpreta la carga alojada por el atacante. La conexión inversa confirma ejecución como www-data.

6. Mitigación

  • Resolver páginas mediante una allowlist de identificadores internos.
  • No construir rutas de inclusión con entrada del cliente.
  • Deshabilitar allow_url_include cuando no sea imprescindible.
  • Restringir la salida de red del servicio web como control adicional.
  • Ejecutar la aplicación con una cuenta de mínimos privilegios.

7. Clasificación

  • CWE: CWE-98
  • Vector: parámetro web que controla una inclusión remota
  • Impacto: ejecución de código con permisos del proceso

8. Referencias y conexiones

// relacionados