Foi descoberta uma vulnerabilidade no projeto Fluent Bit (CVE-2024-4323), que permite a manipulação remota da memória, podendo ser utilizada para causar negação de serviço, vazamento de dados e potencial execução de código no servidor. O problema, codificado como "Linguistic Lumberjack", possui um nível de gravidade crítico (9.8 de 10). A vulnerabilidade se manifesta a partir da versão 2.0.7 e foi corrigida nas atualizações 2.2.3 e 3.0.4.
O Fluent Bit possui mais de 10 bilhões de implantações e é utilizado para processamento e coleta de logs e métricas em muitas empresas e plataformas em nuvem, incluindo Google Cloud, AWS, DigitalOcean, VMware, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift e Dell. Durante março, foram baixadas 13 milhões de imagens Docker com o Fluent Bit. Segundo a empresa Tenable, que identificou as vulnerabilidades, muitos serviços em nuvem não bloqueiam o acesso à Web API para obter métricas internas, como uptime, e o Fluent Bit é utilizado para processar chamadas a essas APIs.
A vulnerabilidade é causada por um erro no servidor HTTP embutido, que se manifesta ao processar solicitações externas através das chamadas de API "/api/v1/traces" e "/api/v1/trace", permitindo que usuários obtenham informações sobre os rastreamentos configurados. Independentemente de a rastreabilidade estar ativada, o usuário pode acessar os dados da API se lhe for concedido o acesso apropriado. Ao analisar as solicitações recebidas, os tipos de alguns campos de entrada, transmitidos através de um array no bloco JSON, eram determinados incorretamente e, independentemente do tipo esperado, eram interpretados como tipo MSGPACK_OBJECT_STR. A inclusão de valores não string no array de entrada, como parâmetros numéricos, causava corrupção de memória, pois a função flb_sds_create_len() retirava o valor inteiro passado como um campo de tamanho de string.
Exemplo de solicitação que provoca a falha: 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 os experimentos, os pesquisadores conseguiram provocar a interrupção do serviço e determinar o conteúdo residual da memória utilizada no processamento de solicitações HTTP, que continha, por exemplo, fragmentos de dados confidenciais, como chaves de acesso. Como o problema resulta em um estouro de buffer dependente dos parâmetros transmitidos, teoricamente pode ser explorado para executar seu código no sistema, mas essa possibilidade não foi verificada pelos pesquisadores que identificaram o problema devido à falta de tempo para trabalhar em um exploit.
Fonte: opennet.ru
