Remote File Inclusion (RFI)
Última actualización
Última actualización
Es una vulnerabilidad web que permite a un atacante malicioso forzar a la aplicación a incluir archivos de código arbitrario importados desde otra ubicación, por ejemplo, un servidor controlado por el atacante. La explotación de un RFI puede conducir a la ejecución remota de código y, como resultado, el atacante podría obtener el control completo del servidor.
Dentro de los riesgos de seguridad que presentan las aplicaciones web, esta vulnerabilidad se encuentra en tercera posición, listada como dentro del informe de 2021, que facilitó el proyecto abierto de seguridad de aplicaciones web y categorizada como dentro del sistema de debilidades y vulnerabilidades de software .
A continuación se muestra un ejemplo de código PHP con una vulnerabilidad de inclusión remota de archivos, así como un vector de ataque a una aplicación que incluya este código.
El desarrollado de una aplicación PHP, quiere incluir un archivo de código fuente de otro servidor, pero el archivo incluido no es estático. A continuación se muestra un fragmento de código del archivo index.php.
El servidor web tiene instalada una versión PHP 7.3.33. El archivo php.ini incluye el siguiente parámetro de configuración:
Este parámetro (obsoleto en PHP 7.4.0) significa que la expresión include puede analizar una URL e incluir un archivo desde esa URL.
La URL se toma directamente de la petición HTTP GET, por lo que puede incluir el archivo http://hackedbydummies.com/reverse-shell.php de la siguiente manera:
Conseguimos inyectar una reverse shell PHP desde un servidor remoto y ganar RCE sobre el servidor web.
Para evitar ser vulnerables a LFI es posible implementar una serie de medidas de seguridad:
Validación de entradas de usuario: Validar y sanitizar todas las entradas de usuario, incluyendo URL, formularios y cookies, para evitar la inclusión de archivos remotos.
Filtrado de URL: Implementar filtros y listas blancas de URL permitidas para limitar las solicitudes de inclusión de archivos solo a ubicaciones de confianza dentro del sistema.
Desactivar la inclusión de archivos remotos: Si no es necesario, desactivar la capacidad de incluir archivos remotos en la configuración del servidor web o del lenguaje de programación utilizado (por ejemplo, deshabilitar la función allow_url_include
en PHP).
Utilizar rutas absolutas: En lugar de incluir archivos utilizando rutas relativas, utilizar rutas absolutas que apunten únicamente a archivos locales dentro del sistema de archivos.