Fluent Bit: atacando serviços em nuvem por meio de endpoints de registro. (CVE-2024-4323)
A Tenable Research descobriu uma vulnerabilidade crítica de corrupção de memória chamada Linguistic Lumberjack no Fluent Bit, um componente central na infraestrutura de monitoramento de muitos serviços em nuvem.
Principais conclusões
- Fluent Bit é um utilitário de registro muito usado por todos os principais provedores de nuvem.
- A Tenable Research descobriu uma vulnerabilidade crítica chamada Linguistic Lumberjack (CVE-2024-4323) no servidor HTTP integrado do Fluent Bit que poderia permitir negação de serviço, divulgação de informações ou execução remota de código.
- A vulnerabilidade foi introduzida na versão 2.0.7 e existe até 3.0.3. Ele foi corrigido no branch de origem principal e é esperado na versão 3.0.4.
- O problema pode ser resolvido por…
- … atualizando para a versão mais recente do Fluent Bit.
- … limitando adequadamente o acesso ao endpoint vulnerável.
Uma visão geral do Fluent Bit e da vulnerabilidade Linguistic Lumberjack
Fluent Bit é um coletor e processador de dados leve e de código aberto que pode lidar com grandes volumes de dados de log de várias fontes. Ele foi projetado para ser altamente escalável e fácil de usar, tornando-o a escolha ideal para coleta e processamento de logs em ambientes baseados em nuvem. O projeto possui mais de 3 bilhões de downloads em 2022 e continua a ver mais de 10 milhões de implantações por dia. Ele é muito usado na infraestrutura de quase todos os principais provedores de nuvem.
O Fluent Bit é […] amplamente utilizado na infraestrutura de quase todos os principais provedores de nuvem.
Empresas que utilizam Fluent Bit em suas ofertas (Fonte: Fluent Bit)
A Tenable Research descobriu uma vulnerabilidade crítica de corrupção de memória no servidor HTTP integrado do Fluent Bit que pode resultar em negação de serviço (DoS), vazamento de informações ou execução remota de código (RCE). O problema foi relatado aos mantenedores do projeto em 30 de abril de 2024. As correções foram enviadas para o branch principal do projeto em 15 de maio e são esperadas no lançamento da versão 3.0.4. O problema foi atribuído CVE-2024-4323.
Imagem gerada via ChatGPT 4o / DALL-E por Nick Miles
Detalhes técnicos
Ao investigar uma falha de segurança em um serviço de nuvem (cujos detalhes ainda estão pendentes de divulgação pública), os pesquisadores da Tenable descobriram que conseguiram acessar uma variedade de métricas e pontos de extremidade de registro internos do próprio serviço de nuvem. Entre esses endpoints estavam várias instâncias do Fluent Bit. O acesso a esses endpoints por si só poderia resultar no vazamento de informações entre locatários, mas depois de testar o Fluent Bit em um ambiente separado e isolado, os pesquisadores se depararam com o problema de corrupção de memória detalhado aqui.
A API de monitoramento do Fluent Bit tem como objetivo permitir que administradores ou outros usuários consultem e monitorem informações internas do próprio serviço. Por exemplo, existem endpoints HTTP para indicar tempo de atividade do serviço, métricas de plug-ins, verificações de integridade, etc.
Entre esses endpoints estão /api/v1/traces e /api/v1/trace, que permitem que os usuários finais habilitem, desabilitem ou recuperem informações sobre rastreamentos configurados . Independentemente de algum rastreamento estar configurado ou não, ainda é possível para qualquer usuário com acesso a esse endpoint de API consultá-lo.
Exemplo de solicitação de https://docs.fluentbit.io/manual/administration/troubleshooting
Durante a análise de solicitações recebidas para o endpoint /api/v1/traces, os tipos de dados de nomes de entrada não são validados adequadamente antes de serem analisados. Eles são incorretamente considerados MSGPACK_OBJECT_STRs válidos .
Ao passar valores que não sejam strings, como números inteiros, no array de “entradas” de uma solicitação, é possível causar vários problemas de corrupção de memória. Durante a função flb_sds_create_len() que atribui a variável input_name, os valores passados quando um número inteiro é fornecido são um ponteiro para o início da matriz de entradas e o valor inteiro bruto como o “tamanho” do valor.
Trechos de localizações de bugs
Para alguns exemplos, passando…
- … valores inteiros grandes (ou um valor negativo) podem causar uma falha devido a uma “cópia selvagem” em uma chamada posterior para memcpy() quando ele tenta gravar para proteger a memória.
- … valores negativos entre 1 e 16 podem causar substituições de heap da memória adjacente. Posteriormente, isso resultará em uma situação semelhante de “cópia selvagem” devido às conversões entre os tipos de dados int, size_t e uint.
- … valores inteiros que não sejam grandes o suficiente para travar podem causar divulgação da memória adjacente ao cliente que faz a solicitação.
- … um valor de “-17” causará uma falha devido a uma desreferência de ponteiro nulo após uma falha de malloc() de zero posteriormente no código.
- … valores inteiros menores e mais direcionados podem desencadear uma variedade de corrupção de pilha e outros problemas de corrupção de memória, como pedaços corrompidos e links quebrados nos mecanismos de gerenciamento de heap.
Em seu ambiente de laboratório, os pesquisadores conseguiram explorar esse problema de maneira confiável para travar o serviço e causar um cenário de negação de serviço. Eles também conseguiram recuperar pedaços de memória adjacente, que são retornados nas respostas HTTP. Embora seja geralmente improvável que isso revele algo além de solicitações de métricas anteriores, os pesquisadores conseguiram ocasionalmente recuperar segredos parciais durante seus testes, indicando que esse problema poderia potencialmente vazar informações confidenciais.
Quanto às possibilidades de execução remota de código deste problema, a exploração depende de uma variedade de fatores ambientais, como arquitetura de host e sistema operacional . Embora overflows de buffer de heap como esse sejam conhecidos por serem exploráveis , criar uma exploração confiável não é apenas difícil, mas também consome muito tempo. Os pesquisadores acreditam que os riscos mais imediatos e primários são aqueles relacionados à facilidade com que DoS e vazamentos de informações podem ser realizados.
Esse problema foi finalmente corrigido com a validação adequada dos tipos de dados de valores na matriz “inputs” enviada para o endpoint “traces”. Mais detalhes podem ser encontrados no seguinte commit: https://github.com/fluent/fluent-bit/commit/9311b43a258352797af40749ab31a63c32acfd04
Prova de conceito: negação de serviço
Solicitação para rastrear endpoint:
# python3 -c 'print("{\"output\":\"stdout\", \"params\": {\"format\": \"json\"},\"inputs\":[\"" + "A"*8 + "\"," + str(0xffffffff) + ", \"" + "B"*500 + "\"]}")' > test
# curl -v http://<target>:2020/api/v1/traces/ -H "Content-Type: application/json" -H "Expect: " --data "@test"
Instância travada:
A saída do depurador acima indica um estouro de buffer de heap, mas, em última análise, a falha é causada por uma tentativa de gravação em uma região de memória protegida.
Mitigações
Conforme mencionado anteriormente, uma correção para esse problema está na ramificação primária do projeto. Pacotes Linux podem ser encontrados aqui .
No momento da redação deste artigo, um anúncio geral não foi feito no site da Fluent Bit e um comunicado formal não foi gerado pelos mantenedores, apesar das informações sobre a vulnerabilidade terem sido enviadas ao repositório público.
Se implantado em sua própria infraestrutura e ambientes, é recomendável atualizar para a versão mais recente o mais rápido possível. Se a atualização não for possível, é recomendável revisar quaisquer configurações aplicáveis em seu ambiente que permitam acesso à API de monitoramento do Fluent Bit para garantir que apenas usuários e serviços autorizados possam consultá-la. Se não for utilizado, certifique-se de desabilitar este endpoint.
Se você depende de serviços de nuvem que usam Fluent Bit, recomendamos entrar em contato com seu provedor de nuvem para garantir que as atualizações ou mitigações sejam implantadas em tempo hábil. Com relação ao uso pelos principais provedores de nuvem, a Tenable notificou a Microsoft, a Amazon e o Google sobre esse problema por meio de seus respectivos mecanismos de divulgação de vulnerabilidades em 15 de maio de 2024 para que pudessem iniciar seus processos de triagem interna.
Conclusão
Independentemente de sua empresa usar serviços baseados em nuvem ou hospedar sua própria infraestrutura, é quase uma garantia de que haja alguma variedade de utilitários de registro e monitoramento em uso. Embora esses utilitários sejam conhecidos por conterem muitas informações interessantes para os invasores, é importante perceber que o vazamento de informações não é a única coisa com que se preocupar. É essencial que as organizações atualizem esses utilitários regularmente, adotem medidas adequadas de defesa profunda e utilizem o princípio do menor privilégio para garantir que essas ferramentas não possam ser utilizadas indevidamente pelos invasores.
Mais informações podem ser encontradas no Alerta da Tenable Research TRA-2024-17 .
Jimi Sebree
Desde que ingressou em 2014, Jimi assumiu diversas funções na Tenable. Ele esteve envolvido na maioria dos aspectos do ciclo de vida do plugin em um ponto ou outro e foi responsável pela criação e manutenção de diversas estruturas básicas de plugins. Antes de ingressar na equipe Zero Day Research, ele foi responsável pelo design, criação e lançamento de uma iniciativa de automação interna que serve como fonte de dados primária para produtos e fluxos de trabalho na Tenable.