OPNsense os-acme-clientにコード実行の脆弱性
OPNsenseのプラグインos-acme-clientに、認証済みの利用者がroot権限で任意のコードを実行できる脆弱性が公表されました。導入の有無を確認し、修正版の公開状況を確かめたうえで、管理画面とAPIへの接続元を絞ってください。
急ぎ度: 早めに
CVSS v4は9.4で重大度はcriticalですが、悪用にはWebGUIまたはAPIでの認証が必要で、公表は本日のため、まず導入の有無と修正版の状況を確認し、管理画面の接続元を絞る段取りが現実的です。
関係があるか
OPNsenseにos-acme-clientプラグインを入れ、証明書の自動発行や更新をしている組織が対象です。管理画面やAPIに複数の担当者や自動化ツールがアクセスする環境は、とくに確認が必要です。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| OPNsense os-acme-client | 4.17.0以前 | 修正版の版番号は、OPNsenseプラグインの告知とリリースノートで確認してください |
確かめ方
- 1OPNsenseのシェルで
pkg info os-acme-clientを実行し、導入の有無と版を確認します。管理画面のSystem、Firmware、Pluginsの一覧でも見られます。 - 2Services、ACME Clientの設定に、Google Cloud DNSを使う検証(チャレンジ)が登録されているかを確認します。
- 3WebGUIとAPIに、証明書の発行や更新の権限を持つユーザーとAPIキーが何件あるか、棚卸しします。
何が起きたか
OPNsenseの証明書自動化プラグインos-acme-clientに、OSコマンドインジェクションの脆弱性が見つかりました。Google Cloud DNSを使うドメイン検証の処理で、設定値がチェックされないままOSのコマンドに組み込まれ、root権限で任意のコードを実行されるおそれがあります。
問題があるのは、DnsGcloud::prepare() というメソッドです。dns_gcloud_keyの内容を復元したあと、文字列の項目gcloud_accountとgcloud_projectを、検証も無害化もせずにシェルコマンドへ埋め込みます。そのコマンドはLeUtils::run_shell_command() を通じてproc_open() に渡されます。分類はCWE-78で、CVE-2026-123025として2026年11月5日に公表されました。
参照先には、OPNsenseのpluginsリポジトリにあるプルリクエストが挙がっています。
攻撃の流れ
-
1
管理機能に認証
証明書の発行や更新の権限を持つアカウントで、WebGUIまたはAPIにログインします。
-
2
設定値を細工
Google Cloud DNS検証の設定に含まれるアカウント名やプロジェクト名の項目に、不正な文字列を入れます。
-
3
証明書処理を実行
証明書の発行または更新が走ると、その値が検証されないままシェルコマンドに組み込まれます。
-
4
rootでコード実行
OPNsense上で任意のコードがroot権限で動き、機器の制御を奪われます。
どう悪用されるか
悪用にはネットワーク経由の到達性と認証が必要です。WebGUIまたはAPIで、証明書の発行や更新ができる権限を持つ利用者として操作できることが条件になります。攻撃の複雑さは低く、被害者側の操作は要りません。
成立すると、ファイアウォールの機器上でroot権限のコードが動きます。設定の改ざん、通信の盗み見、機器に保存された鍵や認証情報の取得、内部ネットワークへの足がかりづくりなどに悪用される可能性があります。権限が低い利用者が、管理者に近い力を得る経路にもなります。
今すぐやること
-
1
導入の有無と版を確認する
os-acme-clientが入っているか、4.17.0以前かを確かめます。複数台のOPNsenseを運用している場合は、すべての機器で確認してください。
pkg info os-acme-client -
2
修正版の公開状況を告知で確認する
OPNsenseプラグインの告知とリリースノートで、修正版の版番号と公開状況を確認します。公開されていれば、メンテナンス時間を確保して修正版に更新します。更新前に設定のバックアップを取っておくと、戻すときに困りません。
-
3
管理画面とAPIの接続元を絞る
WebGUIとAPIがインターネットから見える状態になっていないかを確認し、管理用ネットワークやVPN経由の接続に限定します。
-
4
証明書権限のあるアカウントを整理する
発行や更新の権限を持つユーザーとAPIキーのうち、使っていないものを無効にし、パスワードの使い回しがないかを確認します。
-
5
不審な操作の跡を調べる
Google Cloud DNS検証の設定に身に覚えのない変更がないか、想定外の時間帯に証明書の発行や更新が走っていないかを、管理画面の履歴とログで確認します。
修正版がないあいだのつなぎ
修正版をすぐ当てられないときは、WebGUIとAPIへの接続元を管理用ネットワークに限り、証明書の発行や更新の権限を持つアカウントとAPIキーを最小限にします。Google Cloud DNSによる検証を使っていなければ、その設定を削除しておきます。ほかの検証方式で自動更新している場合は、証明書の期限切れを避けるため、ACME全体は止めないでください。プラグインを使っていない機器では、アンインストールすることで影響を避けられます。
背景
OPNsenseはオープンソースのファイアウォール兼ルーターで、拠点の出入り口やVPNの終端に置かれることが多い製品です。os-acme-clientは、Let's Encryptなどの証明書を自動で取得・更新するプラグインで、管理画面の証明書や、リバースプロキシ、VPNで使う証明書の更新を任せている組織もあります。
今回の脆弱性が厄介なのは、証明書の更新というふだんは気にしない自動処理の中にコマンド実行の経路があることです。更新の処理はOSの権限で動くため、管理画面の限られた権限がそのままroot権限につながります。そのため、証明書の担当者だけに与えたアカウントも、機器全体の権限と同じ重さで扱う必要があります。
よくある質問
Q.Google Cloud DNSによる検証を使っていなければ、影響はありませんか。
Q.認証が必要なので、急がなくてよいのではありませんか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| OPNsense | os-acme-client |
4.17.0 以前 |
— |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
An OS Command Injection vulnerability was discovered in the Google Cloud DNS validation module of the OPNsense os-acme-client plugin through 4.17. The DnsGcloud::prepare() method decodes the dns_gcloud_key model field and directly interpolates the string fields gcloud_account and gcloud_project into a shell command passed to proc_open() via LeUtils::run_shell_command() without any validation or escaping. A remote authenticated user with privileges to issue or renew certificates through the WebGUI/API can achieve arbitrary code execution as root.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web github.com
- web nvd.nist.gov
- web github.com