
Estensione per Checkmk che verifica gli host Linux alla ricerca di decoder Brotli (libbrotlidec, Node.js, Python, .NET) affetti da CVE-2026-111497, controllando versioni, backport e processi obsoleti.
Un'estensione per Checkmk che mostra, per ogni decoder Brotli su un host Linux, se è interessato da Broccoli2Shell - CVE-2026-111497, una scrittura fuori dai limiti nel decoder Brotli in C di Google che può portare all'esecuzione di codice remoto quando un programma decomprime dati Brotli da una fonte non attendibile (una risposta HTTP, un corpo di richiesta, un archivio). È stata divulgata il 2026-10-21/22 e corretta in Brotli 1.0.10, 1.1.1 e 1.2.1, Node.js 22.23.4, 24.22.1 e 26.12.1, nei pacchetti Python Brotli 1.2.1 e brotlicffi 1.2.1.0, e in .NET 8.0.33, 9.0.22 e 10.0.14.
Include un piccolo plug-in agente in shell POSIX che raccoglie solo fatti (la libreria di sistema libbrotlidec, i binari di Node.js, le installazioni Python di Brotli e brotlicffi, i runtime .NET, le loro versioni, i changelog dei pacchetti, a cosa sono collegati, quali processi li hanno caricati e quali eseguono ancora una versione sostituita). Se ciò significhi "corretto" o "vulnerabile" è deciso dal plug-in di check sul server Checkmk, così nuove informazioni - un'altra release corretta - richiedono solo un .mkp aggiornato, non un nuovo script su ogni host.
Perché non confrontare semplicemente i numeri di versione: le distribuzioni applicano la correzione senza cambiare la versione upstream, e compilano Node.js contro la libreria di sistema invece della copia inclusa in Node.js. Debian 12 fornisce libbrotli 1.0.9 e Node.js 18.20.4 (fine vita upstream, nessuna correzione) - entrambi corretti, perché il pacchetto aggiornato libbrotli1 è il decoder che Node.js esegue. L'estensione quindi legge il changelog del pacchetto che possiede ciascun decoder, e segue le estensioni Node.js e Python fino alla libreria a cui sono collegate.
cmk_addons.plugins)./proc/<pid>/maps di tutti i processi). sh POSIX semplice con strumenti GNU o busybox; i changelog dei pacchetti sono letti con dpkg, rpm o apk. Testato sulla famiglia Debian, la famiglia Red Hat, Amazon Linux e Alpine, vedi sotto.| Immagine Checkmk | Data | Risultato |
|---|---|---|
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) |
Il plug-in agente è stato eseguito contro i pacchetti delle distribuzioni stesse e le immagini ufficiali il 2026-10-28 (scripts/test_agent_plugin.sh), con un processo node e uno python che avevano il decoder caricato. Successivamente la libreria, il binario node e i moduli di estensione Python sono stati sostituiti su disco, e il rilevamento del riavvio ha segnalato i processi in esecuzione.
Distribuzioni
| Distribuzione | Decoder | Risultato del plug-in |
|---|---|---|
| Debian 12 | libbrotli 1.0.9-2+deb12u1, Node.js 18.20.4 (collegato), python3-brotli | corretto tramite backport (changelog), Node.js tramite la libreria |
| Debian 13 | libbrotli 1.1.0-2+deb13u1, Node.js 20.19.2 (collegato), python3-brotli, python3-brotlicffi (collegato) | corretto tramite backport, Node.js e brotlicffi tramite la libreria |
| Ubuntu 24.04 | libbrotli 1.1.0-2ubuntu0.1, Node.js 18.19.1 (collegato), python3-brotli, dotnet-runtime-8.0 8.0.32 | corretto tramite backport - .NET vulnerabile (8.0.33 non ancora nell'archivio) |
| AlmaLinux 8.10 | libbrotli 1.0.6-5.el8_10, Node.js 10.24.0 (decoder proprio), python3-brotli | libreria e Brotli corretti tramite backport - Node.js 10 vulnerabile (fine vita, decoder proprio) |
| AlmaLinux 9.8 | libbrotli 1.0.9-10.el9_8.1, Node.js 16.20.2 (collegato), python3-brotli, dotnet-runtime-8.0 8.0.32 | corretto tramite backport - .NET vulnerabile |
| AlmaLinux 10.2 | libbrotli 1.1.0-8.el10_2.1, Node.js 22.23.2 (collegato), python3-brotli | corretto tramite backport |
| Fedora 44 | libbrotli 1.2.1, Node.js 22.23.1 (collegato), python3-brotli 1.2.1 | corretto tramite versione |
| Amazon Linux 2023 | libbrotli 1.1.0-1.amzn2023.0.1, Node.js 18.20.8 (collegato) | vulnerabile - nessun pacchetto corretto disponibile, Node.js tramite la libreria |
| Alpine 3.22 | brotli-libs 1.1.1, Node.js 22.23.4 (collegato), py3-brotli 1.1.1 | corretto tramite versione |
Immagini ufficiali e PyPI
| Immagine | Decoder | Risultato del plug-in |
|---|---|---|
node:24.22.0-slim | Node.js 24.22.0 (decoder proprio) | vulnerabile |
node:24.22.1-slim | Node.js 24.22.1 (decoder proprio) | corretto tramite versione |
node:20-alpine | Node.js 20.20.2 (decoder proprio) | vulnerabile - fine vita, nessuna correzione |
node:24.22.0-slim, binario spostato in /home/dev/.nvm/... (di proprietà di un utente) | Node.js 24.22.0 | vulnerabile - versione letta dal binario, non eseguito |
python:3.12-slim + pip install Brotli==1.2.0 brotlicffi==1.2.0.0, venv con Brotli 1.1.0 in /srv/app/venv | Brotli, brotlicffi (decoder propri) | vulnerabile (il venv individuato tramite il suo processo in esecuzione) |
python:3.12-slim + PyPI attuale | Brotli 1.2.1, brotlicffi 1.2.1.0 | corretto tramite versione |
mcr.microsoft.com/dotnet/runtime:8.0.32 / :8.0 | .NET 8.0.32 / 8.0.33 | vulnerabile / corretto tramite versione |
Il sito Checkmk stesso (2.5.0p17) non include alcun pacchetto Brotli nel proprio Python. Il plug-in non è ancora stato eseguito su un host di produzione al di fuori dei container - in particolare non con SELinux in modalità enforcing (famiglia RHEL); lì l'agent viene normalmente eseguito in modalità unconfined.
Scarica il file .mkp da una release (oppure compilalo tu stesso, vedi
Sviluppo).
Setup > Maintenance > Extension packages > Upload package, oppure dalla riga di comando all'interno del sito:
mkp add broccoli2shell-<version>.mkp
mkp enable broccoli2shell <version>
Distribuisci il plug-in dell'agente sugli host che vuoi controllare:
Esegui un service discovery sugli host. Ogni decoder ottiene il proprio servizio, più un
servizio Broccoli2Shell restart per host.
Facoltativo: regola gli stati in Setup > Services > Service monitoring rules > Broccoli2Shell (CVE-2026-111497) e Broccoli2Shell restart.
Copia package/agents/plugins/broccoli2shell in una sottodirectory cache-interval della
directory dei plug-in dell'agente e rendilo eseguibile:
install -m 755 broccoli2shell /usr/lib/check_mk_agent/plugins/3600/broccoli2shell
La directory 3600 fa sì che l'agente lo esegua in background una volta all'ora e serva il risultato in cache nel frattempo. Non inserirlo direttamente in plugins/: legge binari di grandi dimensioni e la mappa di memoria di ogni processo, il che è troppo oneroso per ogni query dell'agente.