
Linux ホスト上のすべての Brotli デコーダーについて、Broccoli2Shell - CVE-2026-111497 の影響を受けているかどうかを表示する Checkmk 拡張機能です。これは Google の C 製 Brotli デコーダーにおける境界外書き込みであり、プログラムが信頼できないソース(HTTP レスポンス、リクエストボディ、アーカイブ)からの Brotli データを展開する際にリモートコード実行につながる可能性があります。2026-10-21/22 に公開され、Brotli 1.0.10、1.1.1、1.2.1、Node.js 22.23.4、24.22.1、26.12.1、Python パッケージの Brotli 1.2.1 と brotlicffi 1.2.1.0、および .NET 8.0.33、9.0.22、10.0.14 で修正されました。
この拡張機能には、事実のみを収集する小さな POSIX シェルエージェントプラグインが含まれています(システムライブラリ libbrotlidec、Node.js バイナリ、Python の Brotli および brotlicffi のインストール、.NET ランタイム、それらのバージョン、パッケージの変更履歴、それらが何にリンクされているか、どのプロセスがそれらをロードしているか、そして置き換えられたものをまだ実行しているプロセス)。それが「修正済み」を意味するのか「脆弱」を意味するのかは、Checkmk サーバー上のチェックプラグインが判断します。そのため、新しい情報(別の修正済みリリースなど)には更新された .mkp のみが必要で、すべてのホストに新しいスクリプトを配布する必要はありません。
単にバージョン番号を比較しない理由: ディストリビューションは上流のバージョンを変更せずに修正をバックポートし、Node.js にバンドルされたコピーではなくシステムライブラリに対して Node.js をビルドします。Debian 12 は libbrotli 1.0.9 と Node.js 18.20.4(上流ではサポート終了、修正なし)を提供していますが、どちらも修正済みです。更新された libbrotli1 パッケージが Node.js の実行するデコーダーだからです。そのため、この拡張機能は各デコーダーを所有するパッケージの変更履歴を読み、Node.js および Python 拡張機能がリンクされているライブラリまで追跡します。
cmk_addons.plugins プラグイン API を使用)。/proc/<pid>/maps を読み取ります)。GNU または busybox ツールを備えたプレーンな POSIX sh。パッケージの変更履歴は dpkg、rpm、または apk で読み取られます。Debian 系、Red Hat 系、Amazon Linux、Alpine でテスト済みです。以下を参照してください。| Checkmk イメージ | 日付 | 結果 |
|---|---|---|
checkmk/check-mk-ultimate:2.5.0p17 | 2026-10-28 | OK(ビルド、cmk-validate-plugins、スモークテスト、インストール + ディスカバリ + チェック + エージェントベイク) |
checkmk/check-mk-ultimate:3.0.0-2026.10.28(デイリー) | 2026-10-28 | OK(ビルド、cmk-validate-plugins、スモークテスト、インストール + ディスカバリ + チェック + エージェントベイク) |
エージェントプラグインは、2026-10-28 にディストリビューション独自のパッケージと公式イメージに対して実行されました(scripts/test_agent_plugin.sh)。デコーダーをロードした node プロセスと python プロセスを使用しました。その後、ライブラリ、node バイナリ、Python 拡張モジュールがディスク上で置き換えられ、再起動検出が実行中のプロセスを報告しました。
ディストリビューション
| ディストリビューション | デコーダー | プラグインの結果 |
|---|---|---|
| Debian 12 | libbrotli 1.0.9-2+deb12u1、Node.js 18.20.4(リンク)、python3-brotli | バックポートにより修正済み(changelog)、Node.js はライブラリ経由 |
| Debian 13 | libbrotli 1.1.0-2+deb13u1、Node.js 20.19.2(リンク)、python3-brotli、python3-brotlicffi(リンク) | バックポートにより修正済み、Node.js と brotlicffi はライブラリ経由 |
| Ubuntu 24.04 | libbrotli 1.1.0-2ubuntu0.1、Node.js 18.19.1(リンク)、python3-brotli、dotnet-runtime-8.0 8.0.32 | バックポートにより修正済み - .NET は脆弱(8.0.33 はまだアーカイブにない) |
| AlmaLinux 8.10 | libbrotli 1.0.6-5.el8_10、Node.js 10.24.0(独自デコーダー)、python3-brotli | ライブラリと Brotli はバックポートにより修正済み - Node.js 10 は脆弱(サポート終了、独自デコーダー) |
| AlmaLinux 9.8 | libbrotli 1.0.9-10.el9_8.1、Node.js 16.20.2(リンク)、python3-brotli、dotnet-runtime-8.0 8.0.32 | バックポートにより修正済み - .NET は脆弱 |
| AlmaLinux 10.2 | libbrotli 1.1.0-8.el10_2.1、Node.js 22.23.2(リンク)、python3-brotli | バックポートにより修正済み |
| Fedora 44 | libbrotli 1.2.1、Node.js 22.23.1(リンク)、python3-brotli 1.2.1 | バージョンにより修正済み |
| Amazon Linux 2023 | libbrotli 1.1.0-1.amzn2023.0.1、Node.js 18.20.8(リンク) | 脆弱 - 修正済みパッケージはまだなし、Node.js はライブラリ経由 |
| Alpine 3.22 | brotli-libs 1.1.1、Node.js 22.23.4(リンク)、py3-brotli 1.1.1 | バージョンにより修正済み |
公式イメージと PyPI
| イメージ | デコーダー | プラグインの結果 |
|---|---|---|
node:24.22.0-slim | Node.js 24.22.0(独自デコーダー) | 脆弱 |
node:24.22.1-slim | Node.js 24.22.1(独自デコーダー) | バージョンにより修正済み |
node:20-alpine | Node.js 20.20.2(独自デコーダー) | 脆弱 - サポート終了、修正なし |
node:24.22.0-slim、バイナリを /home/dev/.nvm/... に移動(ユーザー所有) | Node.js 24.22.0 | 脆弱 - バージョンはバイナリから読み取られ、実行はされない |
python:3.12-slim + pip install Brotli==1.2.0 brotlicffi==1.2.0.0、/srv/app/venv に Brotli 1.1.0 の venv | Brotli、brotlicffi(独自デコーダー) | 脆弱(venv は実行中のプロセス経由で検出) |
python:3.12-slim + 現在の PyPI | Brotli 1.2.1、brotlicffi 1.2.1.0 | バージョンにより修正済み |
mcr.microsoft.com/dotnet/runtime:8.0.32 / :8.0 | .NET 8.0.32 / 8.0.33 | 脆弱 / バージョンにより修正済み |
Checkmk サイト自体(2.5.0p17)の Python には Brotli パッケージは同梱されていません。このプラグインは まだコンテナ外の本番ホストでは実行されていません - 特に SELinux が enforcing の環境(RHEL 系)では未検証です。通常、そこではエージェントは unconfined で動作します。
Setup > Maintenance > Extension packages > Upload package、またはサイト内の コマンドラインで:
mkp add broccoli2shell-<version>.mkp
mkp enable broccoli2shell <version>
チェック対象のホストにエージェントプラグインをデプロイします:
ホスト上でサービスディスカバリを実行します。各デコーダーがそれぞれ独自のサービスを取得し、さらにホストごとに1つの
Broccoli2Shell restart サービスが作成されます。
任意: Setup > Services > Service monitoring rules > Broccoli2Shell (CVE-2026-111497) および Broccoli2Shell restart の状態を調整します。
package/agents/plugins/broccoli2shell をエージェントのプラグインディレクトリ内の
キャッシュ間隔サブディレクトリにコピーし、実行可能にします:
install -m 755 broccoli2shell /usr/lib/check_mk_agent/plugins/3600/broccoli2shell
3600 ディレクトリは、エージェントに1時間に1回バックグラウンドで実行させ、その間はキャッシュされた結果を提供させます。これを直接 plugins/ に入れないでください。大きなバイナリやすべてのプロセスのメモリマップを読み取るため、エージェントのクエリごとには負荷が大きすぎます。
| サービス | 単位 | 状態(デフォルト、設定可能) |
|---|---|---|
Broccoli2Shell <path> | デコーダー、例: Broccoli2Shell /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1、Broccoli2Shell /usr/bin/node、Broccoli2Shell /usr/lib/python3/dist-packages (brotli)、Broccoli2Shell /usr/lib/dotnet (.NET 8.0) | OK 修正済みまたは影響なし - CRIT 脆弱、実行中のプロセスにロードされている - CRIT 脆弱、ロードされていない - UNKNOWN バージョンまたはリンクされたライブラリを特定できない |
Broccoli2Shell restart | デコーダーを持つホスト | OK - CRIT プロセスが依然として置き換えられたデコーダーを使用している |
スクリーンショットは Checkmk 2.5.0p17 のテストサイトから取得したもので、その4つのホストは実際のエージェントの代わりに sample-data/ 内の記録を受け取ります(実ホストはありません)。Debian 12 と Ubuntu 24.04 はバックポートで修正済みで、Node.js はシステムライブラリを通じて修正されていますが、Ubuntu 上の .NET 8.0.32 は脆弱です。Amazon Linux 2023 はライブラリがまだ修正されていないため、その Node.js も同様です。また、PyPI の Brotli と brotlicffi を使用する Python アプリケーションもあります。いずれも、置き換えられたデコーダーを実行しているプロセスが依然として存在します。

サービスの詳細には、次のステップ、パッケージ、その changelog の内容、およびリンクされているライブラリが示されます:

flowchart TD
A[Decoder] --> L{"Linked against the<br/>system libbrotlidec?"}
L -- "yes (distribution Node.js,<br/>Debian's brotlicffi)" --> LIB[result of that library's service]
L -- "not found" --> U[UNKNOWN]
L -- no --> B{Version known?}
B -- no --> U
B -- yes --> C{"Version >= fix of its branch?<br/>libbrotli/Brotli 1.0.10 / 1.1.1 / 1.2.1<br/>brotlicffi 1.2.1.0<br/>Node.js 22.23.4 / 24.22.1 / 26.12.1<br/>.NET 8.0.33 / 9.0.22 / 10.0.14<br/>or a newer branch"}
C -- yes --> OK[OK: fixed]
C -- no --> D{"Package changelog names<br/>CVE-2026-111497?"}
D -- yes --> OKB[OK: fixed by distribution backport]
D -- no --> E{"Loaded by a running process?"}
E -- yes --> CR[CRIT: vulnerable]
E -- no --> CR2["CRIT: vulnerable<br/>(own state in the rule)"]