Local File Inclusion (LFI)
脷ltima actualizaci贸n
脷ltima actualizaci贸n
Es una vulnerabilidad web que permite a un atacante la lectura de archivos locales de un servidor web. Esto ocurre cuando un sitio web no filtra correctamente las entradas del usuario y permite que un atacante incluya archivos locales. La causa principal de esta vulnerabilidad es la falta de validaci贸n o filtrado adecuado de las entradas del usuario.
LFI suele ir muy de la mano de la vulnerabilidad Directory Traversal, debido a que las explotaciones se realizan en par谩metros de la URL sobre los ficheros propios del sistema.
En el de 2021, no figura como un elemento espec铆fico en la lista principal. Sin embargo, sigue siendo una preocupaci贸n de seguridad importante para las aplicaciones web y puede estar cubierta de manera indirecta por otras categor铆as.
En este apartado veremos una peque帽a demostraci贸n de una explotaci贸n LFI. En este caso hemos montado un peque帽o laboratorio en un docker.
Crearemos un fichero PHP con el siguiente c贸digo d贸nde se espera lo siguiente:
Entrada no validada: El script PHP toma el valor de $_GET['file']
sin realizar ninguna validaci贸n o sanitizaci贸n. Esto significa que cualquier usuario puede proporcionar cualquier ruta de archivo a trav茅s de la URL.
Inclusi贸n de archivos din谩micos: La funci贸n include()
se utiliza para incluir archivos en el script. En este caso, el nombre del archivo a incluir proviene de la entrada del usuario ($_GET['file']
), lo que permite que un atacante controle qu茅 archivo se incluye.
Potencial ejecuci贸n de c贸digo arbitrario: Dado que no hay restricciones sobre qu茅 archivos se pueden incluir, un atacante podr铆a proporcionar una ruta a un archivo malicioso que contenga c贸digo PHP. Si el servidor est谩 configurado para ejecutar PHP en archivos incluidos (*.php
), este c贸digo malicioso se ejecutar谩 en el contexto del servidor, lo que podr铆a llevar a la ejecuci贸n de c贸digo arbitrario.
Como hemos comentado anteriormente, al no haber una validaci贸n o sanitizaci贸n es posible listar archivos de sistema cr铆ticos como /etc/shadow o /etc/passwd.
Visualizando el c贸digo fuente de la p谩gina podremos ver mucho mejor el formato del archivo /etc/passwd.
Para evitar ser vulnerables a LFI es posible implementar una serie de medidas de seguridad:
Validar la entrada del usuario: Antes de incluir el archivo, debes validar la entrada del usuario para asegurarte de que solo se permitan ciertos archivos.
Restringir las extensiones de archivo: Incluir solo aquellas extensiones que quieran ser permitidas, validando siempre las extensiones facilitadas en una entrada de datos antes de ser incluidas.
Utilizar rutas absolutas: En lugar de incluir archivos basados en rutas relativas proporcionadas por el usuario, se recomienda usar rutas absolutas para los archivos que se desea incluir. Esto evitar谩 que un atacante se aproveche de las rutas relativas para acceder a archivos fuera del directorio deseado.
Tomando como partida el c贸digo vulnerable utilizado en la PoC, un ejemplo de c贸mo se podr铆a modificar para implementar las medidas de seguridad adecuadas: