Atualização crítica libfastjson no Rocky Linux 8: CVE-2020-12762 com integer overflow. Guia prático com comandos, troubleshooting e automação Ansible para infraestrutura segura.
Em 14 de novembro de 2023, a Red Hat publicou o RHSA-2023:6976, uma atualização de segurança de severidade Moderate para a biblioteca libfastjson no Red Hat Enterprise Linux 8. O Rocky Linux, sendo binary-compatible com o RHEL, disponibilizou a mesma correção através do RLSA-2023:6976.
O libfastjson é uma implementação em C que fornece funções essenciais para manipulação de JSON: construção de objetos, serialização para strings e parsing reverso. É uma dependência crítica de ferramentas como rsyslog (para output em formato JSON) e diversos agentes de monitoramento e logging.
A vulnerabilidade corrigida é o CVE-2020-12762: um integer overflow que leva a um out-of-bounds write no heap ao processar arquivos JSON maliciosamente grandes. O problema reside na função printbuf_memappend(), onde valores controlados pelo atacante podem estourar o buffer de memória.
O impacto prático: um atacante pode enviar um JSON oversized para uma aplicação que utiliza a biblioteca, causando corrupção de memória, crash do serviço ou, em cenários bem construídos, execução remota de código.
Esta atualização eleva o pacote para a versão 0.99.9-2.el8.
Pré-requisitos
Antes de iniciar, verifique:
⚠️ Atenção: O CVE-2020-12762 afeta todas as versões anteriores à 0.99.9-2.el8. Se seu sistema tem libfastjson instalado, ele está vulnerável.
Passo a Passo
1. Inventário e Impacto
Antes de aplicar qualquer patch em produção, mapeie quais serviços dependem do libfastjson:
$ sudo lsof | grep libfastjson | awk '{print $1}' | sort -u
Saída esperada (exemplo):
rsyslogd telegraf fluent-bit
Esses são os serviços que precisarão ser reiniciados após a atualização. Documente esse inventário — ele será crítico no planejamento da janela de manutenção.
Por que isso importa? A biblioteca é carregada em memória no momento da inicialização do processo. Atualizar o arquivo .so no disco não afeta processos já em execução; eles continuam usando a versão vulnerável em memória até serem reiniciados.
2. Atualização do Pacote
Com o inventário em mãos, aplique a atualização:
$ sudo dnf update libfastjson
Saída esperada (trecho):
================================================================================ Package Arch Version Repository Size ================================================================================ Upgrading: libfastjson x86_64 0.99.9-2.el8 appstream 36 k Transaction Summary ================================================================================ Upgrade 1 Package Total download size: 36 k Is this ok [y/N]: y ... Running scriptlet: libfastjson-0.99.9-2.el8.x86_64 1/1 Verifying : libfastjson-0.99.9-2.el8.x86_64 1/1 Upgraded: libfastjson-0.99.9-2.el8.x86_64 Complete!
Alternativa (atualização via advisory específico):
$ sudo dnf update --advisory RLSA-2023:6976
Por que essa abordagem ? O --advisory é mais seguro em ambientes com políticas de mudança controlada, pois aplica apenas os pacotes relacionados àquele advisory, evitando atualizações colaterais não planejadas.
3. Verificação Pós-Atualização
$ rpm -q libfastjson libfastjson-0.99.9-2.el8.x86_64
Verifique o changelog para confirmar que o patch foi aplicado:
$ rpm -q --changelog libfastjson | grep -i cve - Address CVE-2020-12762
Saída esperada:
- Address CVE-2020-12762
4. Reinicialização dos Serviços Dependentes
Aqui está o ponto crítico. A biblioteca atualizada está no disco, mas os processos em execução ainda carregam a versão antiga em memória.
Estratégia recomendada (reboot gradual):
# Liste os PIDs dos processos que usam a biblioteca $ sudo lsof | grep libfastjson | awk '{print $2}' | sort -u # Para cada serviço, reinicie-o $ sudo systemctl restart rsyslog $ sudo systemctl restart telegraf # ... etc
Verificação de que o processo está usando a nova biblioteca:
$ sudo lsof -p <PID> | grep libfastjson
Compare o caminho do arquivo .so — deve apontar para a nova versão em /usr/lib64/libfastjson.so.4.2.0 (ou similar).
Cenário em ambientes críticos: Se você não pode reiniciar serviços imediatamente, a biblioteca antiga permanecerá em memória. Planeje um reboot agendado do host ou reinicializações rolling dos serviços.
5. Automação com Ansible
Para ambientes com múltiplos servidores, automatize:
- name: Aplicar atualização do libfastjson hosts: rocky8_servers tasks: - name: Atualizar pacote libfastjson dnf: name: libfastjson state: latest update_cache: yes notify: restart_dependent_services - name: Verificar versão instalada command: rpm -q libfastjson register: libfastjson_version failed_when: "'0.99.9-2.el8' not in libfastjson_version.stdout" handlers: - name: restart_dependent_services systemd: name: "{{ item }}" state: restarted loop: - rsyslog - telegraf
📘 Indicação de Leitura
Esse livro é um guia prático e abrangente sobre a segurança do sistema operacional Linux como um todo. O livro ensina a pensar como um atacante para fortalecer a defesa do servidor, abordando tópicos fundamentais como:
- Ferramentas de rede: Nmap, Netcat, knockd.
- Monitoramento: de arquivos e sistemas de arquivos.
- Defesas: contra malware e ataques DDoS.
- Descoberta de vulnerabilidades: como invasores encontram pontos fracos.
Troubleshooting
Problema Comum: "libfastjson-0.99.9-2.el8 not found"
Sintoma:
$ sudo dnf update libfastjson No match for argument: libfastjson Error: No packages marked for update.
Causa: O repositório appstream pode estar desatualizado ou desabilitado.
Solução:
# Limpa o cache do DNF $ sudo dnf clean all # Verifica se o repositório appstream está ativo $ sudo dnf repolist enabled | grep appstream # Se não estiver, habilite-o $ sudo dnf config-manager --set-enabled appstream # Sincroniza os metadados $ sudo dnf makecache # Tenta novamente $ sudo dnf update libfastjson
Armadilha Comum que Iniciantes Cometem
"Atualizei o pacote, mas esqueci de reiniciar os serviços."
Esta é a falha mais frequente e potencialmente a mais perigosa. O administrador aplica o patch, verifica rpm -q e considera o sistema seguro. Porém, o rsyslog (ou outro serviço) continua rodando com a biblioteca vulnerável em memória.
O CVE permanece explorável até o próximo reinício do serviço — que pode ser meses depois, em uma próxima manutenção.
Mitigação:
Sempre execute lsof | grep libfastjson antes e depois da atualização.
Inclua a reinicialização dos serviços afetados como parte obrigatória do procedimento.
Em playbooks Ansible, use handlers para garantir que os serviços sejam reiniciados após a atualização.
Conclusão
O RLSA-2023:6976 corrige o CVE-2020-12762 no libfastjson, um integer overflow que pode levar à corrupção de memória e potencial execução remota de código.
A atualização para 0.99.9-2.el8 é simples (dnf update libfastjson), mas o verdadeiro desafio operacional está em garantir que todos os processos dependentes sejam reiniciados para que a nova biblioteca seja carregada em memória.
O procedimento seguro envolve:
1. Inventário dos serviços que usam a biblioteca (lsof)
2. Atualização via DNF
3. Verificação da nova versão e changelog
4. Reinicialização planejada de todos os serviços dependentes
5. Verificação pós-reboot com lsof
Em ambientes com múltiplos hosts, automatize com Ansible para garantir consistência e rastreabilidade.
Lembre-se: O patch no disco é apenas metade da solução. O patch na memória — via reinicialização dos serviços — é o que realmente fecha a vulnerabilidade.

Nenhum comentário:
Postar um comentário