Vulnerabilidad de inclusión de archivos


Una vulnerabilidad de inclusión de archivos es un tipo de vulnerabilidad web que suele afectar a las aplicaciones web que dependen de un tiempo de ejecución de secuencias de comandos . Este problema se produce cuando una aplicación crea una ruta al código ejecutable utilizando una variable controlada por el atacante de una manera que le permite controlar qué archivo se ejecuta en tiempo de ejecución. Una vulnerabilidad de inclusión de archivos es distinta de un ataque genérico de cruce de directorios , ya que el cruce de directorios es una forma de obtener acceso no autorizado al sistema de archivos , y una vulnerabilidad de inclusión de archivos subvierte la forma en que una aplicación carga el código para su ejecución. La explotación exitosa de una vulnerabilidad de inclusión de archivos resultará enejecución remota de código en el servidor web que ejecuta la aplicación web afectada. Un atacante puede usar la ejecución remota de código para crear un shell web en el servidor web, que puede usarse para desfigurar el sitio web .

La inclusión remota de archivos ( RFI ) ocurre cuando la aplicación web descarga y ejecuta un archivo remoto. Estos archivos remotos generalmente se obtienen en forma de URI HTTP o FTP como un parámetro proporcionado por el usuario a la aplicación web.

La inclusión de archivos locales ( LFI ) es similar a una vulnerabilidad de inclusión de archivos remotos, excepto que en lugar de incluir archivos remotos, solo se pueden incluir archivos locales, es decir, archivos en el servidor actual, para su ejecución. Este problema aún puede conducir a la ejecución remota de código al incluir un archivo que contiene datos controlados por el atacante, como los registros de acceso del servidor web.

En PHP , la causa principal se debe al uso de una entrada de usuario no validada con una función de sistema de archivos que incluye un archivo para su ejecución. Las más notables son las sentencias includey require. La mayoría de las vulnerabilidades se pueden atribuir a programadores novatos que no están familiarizados con todas las capacidades del lenguaje de programación PHP. El lenguaje PHP tiene una directiva que, si está habilitada, permite que las funciones del sistema de archivos usen una URL para recuperar datos de ubicaciones remotas. [1] La directiva está allow_url_fopenen versiones de PHP <= 4.3.4 y allow_url_includedesde PHP 5.2.0. En PHP 5.x esta directiva está deshabilitada por defecto, en versiones anteriores estaba habilitada por defecto. [2]Para aprovechar la vulnerabilidad, un atacante alterará una variable que se pasa a una de estas funciones para que incluya código malicioso de un recurso remoto. Para mitigar esta vulnerabilidad, todas las entradas de los usuarios deben validarse antes de usarse. [3] [4]

El desarrollador pretendía leer english.phpo french.php, lo que alterará el comportamiento de la aplicación para mostrar el idioma elegido por el usuario. Pero es posible inyectar otra ruta usando el languageparámetro.

La mejor solución en este caso es utilizar una lista blanca de parámetros de idioma aceptados. Si no se puede usar un método sólido de validación de entrada, como una lista blanca, confíe en el filtrado de entrada o la validación de la ruta pasada para asegurarse de que no contenga caracteres ni patrones de caracteres no deseados. Sin embargo, esto puede requerir anticipar todas las posibles combinaciones de caracteres problemáticas. Una solución más segura es usar una instrucción Switch/Case predefinida para determinar qué archivo incluir en lugar de usar una URL o un parámetro de formulario para generar dinámicamente la ruta.