
Extensão do Checkmk que audita hosts Linux em busca de decodificadores Brotli (libbrotlidec, Node.js, Python, .NET) afetados pela CVE-2026-111497, verificando versões, backports e processos obsoletos.
Uma extensão do Checkmk que mostra, para cada decodificador Brotli em um host Linux, se ele é afetado pelo Broccoli2Shell - CVE-2026-111497, uma escrita fora dos limites no decodificador Brotli em C do Google que pode levar à execução remota de código quando um programa descompacta dados Brotli de uma fonte não confiável (uma resposta HTTP, um corpo de requisição, um arquivo compactado). Foi divulgado em 2026-10-21/22 e corrigido no Brotli 1.0.10, 1.1.1 e 1.2.1, no Node.js 22.23.4, 24.22.1 e 26.12.1, nos pacotes Python Brotli 1.2.1 e brotlicffi 1.2.1.0, e no .NET 8.0.33, 9.0.22 e 10.0.14.
Ele inclui um pequeno plug-in de agente em shell POSIX que apenas coleta fatos (a biblioteca do sistema libbrotlidec, binários do Node.js, instalações Python de Brotli e brotlicffi, runtimes .NET, suas versões, changelogs dos pacotes, contra o que estão linkados, quais processos os têm carregados e quais ainda executam uma versão substituída). Se isso significa "corrigido" ou "vulnerável" é decidido pelo plug-in de verificação no servidor Checkmk, de modo que novas informações - outra versão corrigida - precisam apenas de um .mkp atualizado, não de um novo script em cada host.
Por que não apenas comparar números de versão: as distribuições fazem backport da correção sem alterar a versão upstream, e compilam o Node.js contra a biblioteca do sistema em vez da cópia que o Node.js traz embutida. O Debian 12 traz libbrotli 1.0.9 e Node.js 18.20.4 (fim de vida upstream, sem correção) - ambos corrigidos, porque o pacote atualizado libbrotli1 é o decodificador que o Node.js executa. A extensão, portanto, lê o changelog do pacote que possui cada decodificador, e segue as extensões Node.js e Python até a biblioteca contra a qual estão linkadas.
cmk_addons.plugins)./proc/<pid>/maps de todos os processos). sh POSIX simples com ferramentas GNU ou busybox; os changelogs dos pacotes são lidos com dpkg, rpm ou apk. Testado na família Debian, na família Red Hat, no Amazon Linux e no Alpine, veja abaixo.| Imagem Checkmk | Data | Resultado |
|---|---|---|
checkmk/check-mk-ultimate:2.5.0p17 | 2026-10-28 | OK (build, cmk-validate-plugins, smoke test, install + discovery + check + agent bake) |
checkmk/check-mk-ultimate:3.0.0-2026.10.28 (daily) | 2026-10-28 | OK (build, cmk-validate-plugins, smoke test, install + discovery + check + agent bake) |
O plug-in de agente foi executado contra os pacotes das próprias distribuições e as imagens oficiais em 2026-10-28 (scripts/test_agent_plugin.sh), com um processo node e um processo python que tinham o decodificador carregado. Em seguida, a biblioteca, o binário node e os módulos de extensão Python foram substituídos em disco, e a detecção de reinício reportou os processos em execução.
Distribuições
| Distribuição | Decodificadores | Resultado do plug-in |
|---|---|---|
| Debian 12 | libbrotli 1.0.9-2+deb12u1, Node.js 18.20.4 (vinculado), python3-brotli | corrigido por backport (changelog), Node.js através da biblioteca |
| Debian 13 | libbrotli 1.1.0-2+deb13u1, Node.js 20.19.2 (vinculado), python3-brotli, python3-brotlicffi (vinculado) | corrigido por backport, Node.js e brotlicffi através da biblioteca |
| Ubuntu 24.04 | libbrotli 1.1.0-2ubuntu0.1, Node.js 18.19.1 (vinculado), python3-brotli, dotnet-runtime-8.0 8.0.32 | corrigido por backport - .NET vulnerável (8.0.33 ainda não está no repositório) |
| AlmaLinux 8.10 | libbrotli 1.0.6-5.el8_10, Node.js 10.24.0 (decodificador próprio), python3-brotli | biblioteca e Brotli corrigidos por backport - Node.js 10 vulnerável (fim de vida, decodificador próprio) |
| AlmaLinux 9.8 | libbrotli 1.0.9-10.el9_8.1, Node.js 16.20.2 (vinculado), python3-brotli, dotnet-runtime-8.0 8.0.32 | corrigido por backport - .NET vulnerável |
| AlmaLinux 10.2 | libbrotli 1.1.0-8.el10_2.1, Node.js 22.23.2 (vinculado), python3-brotli | corrigido por backport |
| Fedora 44 | libbrotli 1.2.1, Node.js 22.23.1 (vinculado), python3-brotli 1.2.1 | corrigido por versão |
| Amazon Linux 2023 | libbrotli 1.1.0-1.amzn2023.0.1, Node.js 18.20.8 (vinculado) | vulnerável - ainda sem pacote corrigido, Node.js através da biblioteca |
| Alpine 3.22 | brotli-libs 1.1.1, Node.js 22.23.4 (vinculado), py3-brotli 1.1.1 | corrigido por versão |
Imagens oficiais e PyPI
| Imagem | Decodificadores | Resultado do plug-in |
|---|---|---|
node:24.22.0-slim | Node.js 24.22.0 (decodificador próprio) | vulnerável |
node:24.22.1-slim | Node.js 24.22.1 (decodificador próprio) | corrigido por versão |
node:20-alpine | Node.js 20.20.2 (decodificador próprio) | vulnerável - fim de vida, sem correção |
node:24.22.0-slim, binário movido para /home/dev/.nvm/... (pertencente a um usuário) | Node.js 24.22.0 | vulnerável - versão lida a partir do binário, não executado |
python:3.12-slim + pip install Brotli==1.2.0 brotlicffi==1.2.0.0, venv com Brotli 1.1.0 em /srv/app/venv | Brotli, brotlicffi (decodificadores próprios) | vulnerável (o venv encontrado através do seu processo em execução) |
python:3.12-slim + PyPI atual | Brotli 1.2.1, brotlicffi 1.2.1.0 | corrigido por versão |
mcr.microsoft.com/dotnet/runtime:8.0.32 / :8.0 | .NET 8.0.32 / 8.0.33 | vulnerável / corrigido por versão |
O próprio site do Checkmk (2.5.0p17) não inclui nenhum pacote Brotli no seu Python. O plug-in ainda não foi executado num host de produção fora de containers - em particular não com SELinux em modo enforcing (família RHEL); o agente normalmente é executado sem confinamento nesses casos.
Baixe o .mkp a partir de uma release (ou compile-o você mesmo, consulte
Desenvolvimento).
Setup > Maintenance > Extension packages > Upload package, ou na linha de comando dentro do site:
mkp add broccoli2shell-<version>.mkp
mkp enable broccoli2shell <version>
Implante o plug-in do agente nos hosts que você deseja verificar:
Execute uma descoberta de serviços nos hosts. Cada decoder recebe seu próprio serviço, além de um
serviço Broccoli2Shell restart por host.
Opcional: ajuste os estados em Setup > Services > Service monitoring rules > Broccoli2Shell (CVE-2026-111497) e Broccoli2Shell restart.
Copie package/agents/plugins/broccoli2shell para um subdiretório de intervalo de cache do
diretório de plug-ins do agente e torne-o executável:
install -m 755 broccoli2shell /usr/lib/check_mk_agent/plugins/3600/broccoli2shell
O diretório 3600 faz com que o agente o execute em segundo plano uma vez por hora e sirva o
resultado em cache nesse intervalo. Não o coloque diretamente em plugins/: ele lê binários grandes
e o mapa de memória de cada processo, o que é demais para cada consulta do agente.