Seguridad de la operación de archivos - Principios de lectura de archivos

Esta sección explicará en detalle el contenido relacionado con la lectura de archivos, como una sección en mi columna "Principios de seguridad web e interpretación de métodos de defensa múltiple".

Este artículo analiza principalmente las vulnerabilidades relacionadas con la lectura de archivos locales. La función de lectura de archivos es una función común en las aplicaciones WEB, y los pasos de procesamiento habituales son los siguientes:

  1. El cliente inicia una solicitud de lectura de archivo al servidor
  2. El servidor generalmente busca y lee el archivo.
  3. Enviar el archivo al analizador especificado para analizar
  4. Devolver el contenido analizado

Principio de vulnerabilidad de la lectura de archivos

Mirando las vulnerabilidades de lectura de archivos desde la perspectiva del código fuente, es inevitable evitar los problemas de inclusión de archivos, análisis de archivos y recorrido de directorios mencionados en los artículos anteriores. A diferencia de los capítulos anteriores, la inclusión de archivos, el análisis de archivos y el recorrido de directorios se nombran y clasifican más según la causa de una clase de vulnerabilidades. La lectura de archivos describe el resultado de un determinado tipo de vulnerabilidad. Los tres tipos de vulnerabilidades mencionados en el artículo anterior pueden conducir al resultado de la lectura de archivos. Puede pensar que las vulnerabilidades que conducen a los resultados de la lectura de archivos también incluyen la inyección, como la ejecución de comandos, xxe, inyección SQL, etc. Sin embargo, para vulnerabilidades como la ejecución de comandos, en comparación con la lectura de archivos, el establecimiento de shell es el tipo de vulnerabilidad más preocupante. Es decir, son muchas las consecuencias que provoca una vulnerabilidad, al describir las consecuencias de este archivo, generalmente se refiere a sus consecuencias más comunes y graves. Entonces, volviendo a la causa de la lectura de archivos, desde la perspectiva de los resultados, la vulnerabilidad de lectura de archivos se refiere a que la consecuencia más grave causada por esas vulnerabilidades es la lectura de archivos. Desde esta perspectiva, llamamos a este tipo de vulnerabilidad La vulnerabilidad es una lectura de archivos vulnerabilidad, por supuesto, la razón puede ser directorio transversal y similares.

No existe un estándar claro y unificado para la clasificación de la seguridad web. La clasificación más común se basa en la causa de la vulnerabilidad, como la carga de archivos, el análisis de archivos, la inclusión de archivos, el cruce de directorios, etc., mencionados en los artículos anteriores. Sin embargo, a menudo escuchamos vulnerabilidades como la lectura de archivos, que se clasifican de acuerdo con las consecuencias más graves causadas por las vulnerabilidades. Dado que hay muchas vulnerabilidades de este tipo en la historia, vale la pena discutirlas por separado. Como se mencionó anteriormente, la consecuencia más grave de la ejecución de comandos generalmente no es la lectura de archivos, por lo que este tipo de vulnerabilidad generalmente no se considera como la causa de las vulnerabilidades de lectura de archivos. Además, las vulnerabilidades comunes de lectura de archivos La razón es la siguiente:

Recorrido de directorios
En el artículo anterior, aquí , se puede ver que, de hecho, la consecuencia más común del recorrido de directorios es la lectura de archivos arbitrarios. Y muchas de las vulnerabilidades de lectura de archivos están relacionadas con el recorrido de directorios. Pero vale la pena señalar que la consecuencia más grave del cruce de directorios no es necesariamente la lectura arbitraria de archivos. La vulnerabilidad CVE-2021-41773 del artículo anterior también puede conducir a la ejecución de comandos.

Errores de configuración
Para ampliar la flexibilidad del marco o las funciones, en términos generales, el software proporcionará configuraciones externas para que los desarrolladores y usuarios las utilicen de manera flexible. Como dice el viejo refrán, la mayoría del personal de operación y mantenimiento y los desarrolladores no tienen conocimientos de seguridad ni perspectivas ofensivas y defensivas, y la configuración inadvertida puede generar vulnerabilidades como la lectura arbitraria de archivos. En términos generales, los desarrolladores de framework usan la configuración correcta de forma predeterminada, por lo que los desarrolladores de software o framework generalmente no reconocen los problemas causados ​​por la configuración, y es difícil incluirlos en CVE.

Enlace suave
Si se puede crear un archivo de enlace suave en el servidor WEB, la solicitud del enlace suave es en realidad una solicitud del archivo real al que está conectado. Imagine tal escenario, cargue un archivo de enlace suave a través de un archivo y luego acceda al archivo de enlace suave a través de la función normal de acceso a archivos WEB, luego puede leer el contenido del archivo al que apunta. Por supuesto, el uso real no será tan sencillo. Incluso si la ubicación de carga del archivo puede pasar la verificación de la lista blanca y negra, como el sufijo del archivo, se desconoce si la ubicación de almacenamiento del archivo puede tener derechos de acceso. Este artículo usará la vulnerabilidad CVE-2016-9086 para detallar el problema de lectura arbitraria de archivos causado por enlaces blandos más adelante. El uso más común de la vulnerabilidad de entidad externa
XXE XML es leer información confidencial como /etc/passwd, como se muestra en Figura 1 a continuación: 1 Con respecto a la vulnerabilidad de XXE, habrá un artículo separado para presentarlo en detalle, ver aquí . La solicitud del servidor SSRF se falsifica y la solicitud de acceso se inicia a través del servidor.Si la solicitud se realiza utilizando el protocolo file://, generalmente causará el problema de leer cualquier archivo. Con respecto a las vulnerabilidades relacionadas con SSRF, habrá un artículo separado para presentarlas en detalle, consulte aquí .

inserte la descripción de la imagen aquí



Ejemplo de vulnerabilidad de lectura de archivos

Las vulnerabilidades que se describen a continuación también se pueden etiquetar o clasificar de otras formas, pero la consecuencia más grave es la lectura arbitraria de archivos, por lo que también se pueden clasificar aquí como vulnerabilidades de lectura de archivos.

CVE-2018-1999002

La vulnerabilidad es una vulnerabilidad de lectura de archivos en el servidor jenkins. La versión vulnerable no tiene restricciones de filtrado en Accept-Language en solicitudes HTTP. Los archivos confidenciales en el servidor se pueden leer construyendo el contenido del campo Aceptar idioma, como se muestra en la Figura 2 NVD :
inserte la descripción de la imagen aquí
Figura 2

El servicio Jenkins es un servicio clave para las empresas. Todas las empresas con desarrollo de código generalmente usan Jenkins como su servicio de construcción y lanzamiento de código. Aunque la vulnerabilidad solo resultó en la lectura de algunos archivos, su impacto es en activos críticos, por lo que debe tomarse en serio. El siguiente es un análisis más detallado de la vulnerabilidad basado en el POC público y el parche reparado por jenkins. El POC se muestra en la Figura 3:
inserte la descripción de la imagen aquí

Figura 3
Dado que Jenkins es un software global, su propósito original es devolver archivos en diferentes idiomas según el Accept-Language del cliente. En términos generales, el campo Accept-Language en HTTP se utiliza para indicar el idioma recibido por el cliente, la forma común es Accept-Language: zh-cn, donde zh indica que el idioma es chino y cn indica que el país es China. . Pero el POC de la figura puede ver que la vulnerabilidad establece el valor del campo Aceptar idioma en una ruta de archivo, lo que hace que se lea el archivo.

Compare el contenido del parche de vulnerabilidad , como se muestra en la Figura 4 a continuación:
inserte la descripción de la imagen aquí

La Figura 4
compara el parche y el POC En la versión reparada, los contenidos de idioma y país en el campo Aceptar-Idioma están limitados en forma de expresiones regulares. El valor de Idioma solo puede ser una combinación de letras de 2 a 8 dígitos, y el valor de país solo puede ser una combinación de letras de 2 dígitos o una combinación de números de 3 dígitos. De esta forma, el POC anterior no se puede explotar con éxito porque tiene caracteres especiales.

Se puede observar que la composición del nombre final del archivo debe incluir al menos base, idioma y extensión. Por lo tanto, el uso real debe establecer los valores de base y ext, por lo que no entraré en detalles, y aquellos que estén interesados ​​​​pueden experimentar por sí mismos. Desde la perspectiva de la explotación, esta vulnerabilidad también puede ser una vulnerabilidad de cruce de directorios.Desde la perspectiva del resultado final, el resultado más grave es la lectura de archivos confidenciales, por lo que también puede denominarse vulnerabilidad de lectura de archivos.

CVE-2016-9086

Esta vulnerabilidad es una vulnerabilidad de lectura de archivos en el software gitlab, y gitlab tiene la función de exportar e importar proyectos. La modificación del archivo exportado a un archivo de vínculo dinámico del archivo del sistema con el mismo nombre (como /etc/passwd) provocará que se genere una excepción directamente debido a errores de análisis en segundo plano durante las importaciones posteriores, y el contenido del archivo será impreso al mismo tiempo, lo que resulta en una lectura arbitraria del archivo. Esta situación es en realidad un error que los programadores suelen cometer, es decir, imprimir directamente el contenido del archivo incorrecto, como se muestra en la Figura 5 NVD a continuación:
inserte la descripción de la imagen aquí

Figura 5
El POC de la vulnerabilidad es el siguiente Figura 6, 7, 8:
inserte la descripción de la imagen aquí
Figura 6
inserte la descripción de la imagen aquí
Figura 7
inserte la descripción de la imagen aquí
Figura 8

En la Figura 6, puede ver que después de exportar el archivo desde gitlab export, modifique el archivo project.json en un archivo de enlace suave como se muestra en la Figura 7, apuntando a /etc/passwd. Cargue el archivo empaquetado después de la reparación, obtenga el resultado en la Figura 8 y lea con éxito el contenido en /etc/passwd. Se puede ver que la consecuencia de esta vulnerabilidad es que se lee el archivo, lo que parece ser causado por la carga del archivo, pero de hecho, el fondo no considera la conexión suave al procesar el archivo. El parche correspondiente, aquí , se muestra en la Figura 9 a continuación.
inserte la descripción de la imagen aquí

Figura 9
La Figura 9 muestra el POC de explotación de esta vulnerabilidad.En la versión reparada, se juzga directamente si es un enlace blando y, si es un enlace blando, se elimina. Además, para el error de análisis de project.json y el error de verificación de la versión, el archivo no se imprimirá directamente en el front-end, sino que se formará un registro, como se muestra en la Figura 10: La sugerencia que nos brinda la vulnerabilidad en la
inserte la descripción de la imagen aquí
Figura 10 es que el programador debe
evitar imprimir directamente el contenido del archivo en caso de un error anormal, de lo contrario, puede generar vulnerabilidades de lectura de archivos.

Peligros potenciales de la lectura de archivos

Las vulnerabilidades como la lectura de archivos se clasifican principalmente según las consecuencias que provoca la vulnerabilidad, por lo que se puede decir que la consecuencia de la lectura arbitraria de archivos es que se obtiene información sensible como la configuración en el servidor. Por lo tanto, la vulnerabilidad de la lectura de archivos siempre se usa como un medio de recopilación de información, incluidos archivos de configuración, información clave, código fuente del programa, comandos históricos, etc. Todos estos son archivos en el servidor y se pueden leer.

Este artículo es un artículo original de los jóvenes del pueblo de CSDN, y no puede ser reproducido sin permiso. El blogger enlaza aquí .

Supongo que te gusta

Origin blog.csdn.net/javajiawei/article/details/127352633
Recomendado
Clasificación