{"id":"CVE-2026-123025","kind":"vulnerability","aliases":["CVE-2026-123025"],"related":[],"title":"OPNsense: Google Cloud DNS plugin lets a certificate user run root commands","description":"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.","summary":"The os-acme-client plugin for OPNsense builds a shell command from Google Cloud account and project fields without escaping them. An authenticated user who can issue or renew certificates can inject commands and run code as root.","severity":"critical","cvss":9.4,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"os-acme-client","fixed":["4.18"],"affected":"<= 4.17","ecosystem":"vendor"}],"ecosystems":[],"tags":["firewall","google-cloud-dns","infrastructure","opnsense","os-acme-client"],"not_affected_if":["auth-required","no-os-acme-client","not-google-cloud-dns"],"how_to_check":"- Check the installed os-acme-client version (System > Firmware > Plugins/Status); versions through 4.17 are affected, 4.18 carries the fix.\n- Check whether any ACME account/validation uses Google Cloud DNS (dns_gcloud); if none does, the vulnerable code path is not used.\n- Review who holds ACME client / certificate issue-renew privileges in WebGUI/API.","fix":"Update os-acme-client to 4.18 (changelog: 'fix command injection in Google Cloud DNS validation', reported by @cppghoul). Update via System > Firmware > Plugins / Updates; if 4.18 is not yet offered, the fix is in opnsense/plugins commit 9929c65 (Nov 3, 2026).","status":"open","published_at":"2026-11-05T07:17:25+00:00","first_seen_at":"2026-11-05T07:37:46+00:00","triaged_at":"2026-11-05T07:39:58+00:00","updated_at":"2026-11-05T07:41:43+00:00","category":"infrastructure","confidence":0.8,"triage":{"at":"2026-11-05T07:39:58Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"network","title":"OPNsense: Google Cloud DNS plugin lets a certificate user run root commands","impact":"high","summary":"The os-acme-client plugin for OPNsense builds a shell command from Google Cloud account and project fields without escaping them. An authenticated user who can issue or renew certificates can inject commands and run code as root.","audience":"businesses","category":"infrastructure","nicknames":[],"who_cares":["opnsense","os-acme-client","firewall","google-cloud-dns"],"confidence":0.7,"fix_status":"unknown","needs_auth":"yes","worst_case":"Attacker runs arbitrary code as root on the firewall","analyst_note":"No fixed version is stated in the sources; check the OPNsense os-acme-client changelog for the release that fixes the Google Cloud DNS input handling.","how_to_check":"- Check whether the os-acme-client plugin is installed and its version (System > Firmware > Plugins in the OPNsense WebGUI).\n- Check whether any ACME account uses the Google Cloud DNS validation method (`dns_gcloud`).","plain_action":"","needs_analyst":true,"not_affected_if":["no-os-acme-client","not-google-cloud-dns","auth-required"],"who_is_affected":"Only OPNsense firewalls running the os-acme-client plugin through 4.17 with the Google Cloud DNS validation method configured are exposed. The attacker must already hold an account that can issue or renew certificates through the WebGUI or API. Teams not using os-acme-client with Google Cloud DNS can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"critical"},"cost_usd":0.000727,"input_tokens":4314,"output_tokens":592,"severity_before":"critical"},"analyst_status":"done","analyst_note":"No fixed version is stated in the sources; check the OPNsense os-acme-client changelog for the release that fixes the Google Cloud DNS input handling.","search":"'-123025':15A,18A '-2026':14A,17A '4.17':96C 'account':49B,115C 'achiev':152C 'acm':32B,37B,92C 'acme':21A 'arbitrari':153C 'authent':57B,139C 'build':42B 'certif':8A,64B,147C 'client':22A,33B,38B,93C 'cloud':3A,26B,48B,83C 'code':70B,154C 'command':12A,45B,67B,75C,122C,131C 'cve':13A,16A 'decod':101C 'direct':109C 'discov':79C 'dns':4A,27B,84C,103C 'dnsgcloud':98C 'escap':54B,136C 'execut':155C 'field':52B,107C,113C 'firewal':23B 'gcloud':104C,114C,117C 'googl':2A,25B,47B,82C 'google-cloud-dn':24B 'infrastructur':28B 'inject':66B,76C 'interpol':110C 'issu':61B,144C 'key':105C 'let':6A 'leutil':128C 'method':100C 'model':106C 'modul':86C 'open':126C 'opnsens':1A,29B,41B,89C 'os':20A,31B,36B,74C,91C 'os-acme-cli':30B,35B,90C 'os-acme-client':19A 'pass':123C 'plugin':5A,39B,94C 'prepar':99C 'privileg':142C 'proc':125C 'project':51B,118C 'remot':138C 'renew':63B,146C 'root':11A,72B,157C 'run':10A,69B,129C 'shell':44B,121C,130C 'string':112C 'user':9A,58B,140C 'valid':85C,134C 'via':127C 'vulner':77C 'webgui/api':150C 'without':53B,132C","nicknames":[],"mitigations":[],"who_affected":"Only OPNsense firewalls running the os-acme-client plugin through 4.17 with the Google Cloud DNS validation method configured are exposed. The attacker must already hold an account that can issue or renew certificates through the WebGUI or API. Teams not using os-acme-client with Google Cloud DNS can skip it.","tier":"B","verified":{"fix":{"at":"2026-11-05T07:41:43Z","by":"analyst","doc":"https://github.com/opnsense/plugins/commit/9929c65","run_id":1763}},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":["osacmeclient"],"ptokens":["acme","client","os"],"labels":["critical","firewall","googleclouddns","infrastructure","opnsense","osacmeclient"],"campaign_type":null,"first_public_at":"2026-11-05T07:17:25+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"cve@mitre.org","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-123025","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123025","severity":null,"published_at":"2026-11-05T07:17:25+00:00","modified_at":"2026-11-05T07:17:25+00:00","first_seen_at":"2026-11-05T07:37:46+00:00","fetched_at":"2026-11-05T07:37:46+00:00","note":null},{"source":"analyst","external_id":"CVE-2026-123025:1763","url":"https://raw.githubusercontent.com/opnsense/plugins/876f3396c783112f108dfedc98d5a743e0edeb52/security/acme-client/pkg-descr","severity":null,"published_at":"2026-11-05T07:41:43+00:00","modified_at":"2026-11-05T07:41:43+00:00","first_seen_at":"2026-11-05T07:41:43+00:00","fetched_at":"2026-11-05T07:41:43+00:00","note":"Fix in opnsense/plugins commit 9929c65 (Nov 3 2026, fraenki, reported by @cppghoul); 4.18 changelog in commit 876f339 lists it. Did not confirm 4.18 is published to the package repo (master pkg-descr fetched was stale) or read the code diff; fix is from the changelog. No exploitation or PoC found; social posts not searched.","cites":["https://raw.githubusercontent.com/opnsense/plugins/876f3396c783112f108dfedc98d5a743e0edeb52/security/acme-client/pkg-descr","https://github.com/opnsense/plugins/commit/9929c65"]}],"documents":[{"id":74243,"url":"https://raw.githubusercontent.com/opnsense/plugins/876f3396c783112f108dfedc98d5a743e0edeb52/security/acme-client/pkg-descr","title":"os-acme-client changelog, 4.18 (opnsense/plugins 876f339)","kind":"release","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"fix","confidence":null,"note":null},{"id":74244,"url":"https://github.com/opnsense/plugins/commit/9929c65","title":"security/acme-client: fix command injection in Google Cloud DNS validation","kind":"vendor","source":"analyst","publisher":null,"text":null,"published_at":null,"relation":"fix","confidence":null,"note":null}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}