Se ha descubierto una vulnerabilidad en el proyecto Fluent Bit (CVE-2024-4323) que permite la corrupción de memoria de forma remota, lo que puede llevar a una denegación de servicio, filtración de datos y potencial ejecución de código en el servidor. El problema, apodado "Linguistic Lumberjack", tiene un nivel crítico de riesgo (9.8 de 10). La vulnerabilidad se manifiesta desde la versión 2.0.7 y ha sido corregida en las actualizaciones 2.2.3 y 3.0.4.
Fluent Bit cuenta con más de 10 mil millones de implementaciones y se utiliza para procesar y recoger registros y métricas en muchas empresas y plataformas en la nube, incluyendo a Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift y Dell. Durante marzo, se descargaron 13 millones de imágenes Docker con Fluent Bit. Según la empresa Tenable, que identificó las vulnerabilidades, muchos servicios en la nube no bloquean el acceso a la API web para obtener métricas internas, como el tiempo de actividad, y se utiliza Fluent Bit para procesar las solicitudes a tales API.
La vulnerabilidad es causada por un error en el servidor HTTP integrado, que se manifiesta al procesar solicitudes externas a través de llamadas a la API "/api/v1/traces" y "/api/v1/trace", permitiendo a los usuarios acceder a información sobre trazas configuradas. Independientemente de si la trazabilidad está habilitada, un usuario puede acceder a los datos de la API si se le proporciona el acceso adecuado. Durante el análisis de las solicitudes entrantes, los tipos de algunos campos de entrada transmitidos a través de un arreglo en el bloque JSON se determinaban incorrectamente y se interpretaban como tipo MSGPACK_OBJECT_STR independientemente del tipo de campo esperado. Especificar en el arreglo valores no string, como parámetros enteros, resultaba en corrupción de memoria debido a que la función flb_sds_create_len() extraía el valor entero transmitido como un campo con tamaño de cadena.
Ejemplo de solicitud que provoca la caída: python3 -c ‘print(«{\»output\»:\»stdout\», \»params\»: {\»format\»: \»json\»},\»inputs\»:[\»» + «A»*8 + «\»,» + str(0xffffffff) + «, \»» + «B»*500 + «\»]}»)’ > test curl -v http://:2020/api/v1/traces/ -H «Content-Type: application/json» -H «Expect: » —data «@test»
Durante los experimentos, los investigadores lograron provocar una finalización anómala del servicio y determinar el contenido residual de la memoria utilizada al procesar solicitudes HTTP, incluyendo, por ejemplo, fragmentos de datos confidenciales como claves de acceso. Dado que el problema conduce a un desbordamiento de búfer dependiente de los parámetros transmitidos, teóricamente podría ser explotado para ejecutar su código en el sistema, pero los investigadores que identificaron el problema no verificaron esta posibilidad debido a la falta de tiempo para trabajar en un exploit.
Fuente: opennet.ru
