Skip to main content

OPNsense CVE-2026-58392

| EUVDEUVD-2026-102132 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-15 GitHub_M
5.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with page-services-ntp-gps privilege
  2. Delivery
    Submit initcmd payload closing the textarea
  3. Exploit
    Payload stored base64-decoded at output sink
  4. Execution
    Admin opens GPS page, script executes
  5. Impact
    Steal CSRF token, perform admin actions

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an authenticated OPNsense user who already holds the page-services-ntp-gps privilege to store a malicious initcmd value on the NTP GPS page (src/www/services_ntpd_gps.php); because the value is HTML-escaped before base64_decode(), the decoded markup reaches the textarea output sink unescaped and can close the <textarea> and inject script. Exploitation is further gated by required user interaction (UI:R): a second user - typically an administrator - must subsequently open the NTP GPS page for the stored script to execute. Limiting factors that reduce real-world risk: a privileged (non-default, operator-level) account is a prerequisite, the OPNsense web GUI is normally restricted to an internal/management network rather than the public internet, and the payload only fires on victim visit to that specific page.

Impact

This is a stored (persistent) cross-site scripting flaw (CWE-79) in OPNsense's NTP GPS configuration page, scored CVSS 5.4 via CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N. The signals are internally consistent and point to a moderate, access-gated risk rather than a mass-exploitation emergency: AV:N with AC:L makes delivery easy, but PR:L means the attacker must already hold an authenticated account with the specific page-services-ntp-gps privilege, and UI:R means a second user must later open the GPS page for the payload to fire - both meaningful brakes on real-world exploitation. The S:C (scope change) and C:L/I:L correctly reflect that injected script executes in the victim's authenticated browser session (a different security authority), where it can steal CSRF tokens and perform actions up to administrator level - a realistic privilege-escalation path from a limited operator to full admin. No EPSS score, KEV listing, or public POC was supplied in the intelligence, so there is no evidence of active exploitation; the risk is primarily insider/second-order (a low-privileged operator targeting an admin) rather than internet-wide. Note the apparent tension between AV:N and the practical reality that OPNsense management interfaces are typically not internet-exposed - on a hardened deployment the real attack surface is the internal/management network, so AV:N somewhat overstates reachability. Net: a legitimate issue worth patching, but lower priority than an unauthenticated RCE.

Exploit ScenarioDerived

A low-privileged OPNsense operator who holds the page-services-ntp-gps privilege enters a crafted initcmd value that breaks out of the GPS initialization textarea and injects JavaScript, which is stored in the configuration. When an administrator later opens the NTP GPS page, the script runs in their session, reads CSRF material, and silently performs administrator-level actions on the firewall. No public exploit code was identified in the provided intelligence, but the flaw is well-characterized in the vendor advisory and patch commits.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 15, 2026

Stored cross-site scripting in the NTP GPS configuration page of OPNsense (FreeBSD-based firewall/router platform) lets an authenticated user who holds the page-services-ntp-gps privilege persist a malicious initcmd value that closes the GPS textarea and injects script into the page. The payload executes in the browser session of any user - including an administrator - who later opens that page, letting the script read CSRF material and perform authenticated actions with the victim's privileges, which is why the CVSS vector assigns a changed scope (S:C). Affected are OPNsense core builds prior to 26.1.11; the flaw is fixed in 26.1.11, no public exploit was identified at time of analysis, and exploitation requires both a privileged operator account and a second user (UI:R) visiting the page.

RemediationAI

Upgrade OPNsense core to version 26.1.11 or later - vendor-released patch: 26.1.11 - which is documented in the GitHub security advisory GHSA-h793-67jm-j4m5 and implemented by commits a92d9514b5436c868f8f97138ebed507f6de423c and ed04a154dc40967541be1388e9134e451be4199e. Because the malicious value is stored in the configuration, patching alone is not sufficient: after upgrading, inspect the NTP GPS initcmd field (and config.xml <ntpd><gps><initcmd>) for any base64-encoded payload containing '</textarea>' or script tags and clear or re-enter the legitimate initialization string. Where immediate upgrade is not possible, compensating controls include removing the page-services-ntp-gps privilege from all non-essential accounts so no operator can write to the vulnerable page (trade-off: those users can no longer configure GPS-based NTP time sources), restricting web GUI access to a trusted management network or a small set of source addresses via the firewall rules on the LAN/management interface (trade-off: legitimate remote administration from other subnets is blocked), and temporarily disabling the NTP GPS page/feature if GPS time sourcing is unused (trade-off: GPS-disciplined NTP must be configured by other means). Note that these controls only reduce exposure - they do not eliminate the stored-payload risk if a privileged account has already been used to plant a value.

Affected VersionsENISA

core < 26.1.11

Affected Packages

euvd core fix: 26.1.11

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

OPNsense is a PHP-based web GUI running on FreeBSD, and the NTP GPS page (src/www/services_ntpd_gps.php) handles an operator-supplied GPS initialization command ('initcmd'). The root cause is an escaping-order defect: the page base64_encodes the stored initcmd value, then applies legacy_html_escape_form_data() to the encoded string, and later calls base64_decode() directly inside the <textarea> output sink. Because escaping happens on the encoded text and decoding happens after, the decoded markup is never neutralized, so an attacker can supply a value whose decoded form closes </textarea> and injects HTML/JavaScript. This is CWE-79 (improper neutralization of input during web page generation), specifically a persistent/stored XSS. The accompanying upstream commits also harden the sink by pre-decoding $pconfig['initcmd'] once and emitting it raw only after escaping, and by replacing a null-coalescing check in src/etc/inc/plugins.inc.d/ntpd.inc with an !empty() guard so an unset initcmd no longer flows through as an array-key notice/empty value. The changed-scope rating reflects that the injected script runs with the victim's session, can harvest anti-CSRF tokens, and can therefore invoke endpoints beyond the attacker's own privilege level, including administrator-only functionality.

Know when Opnsense gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

Attacker needs a privileged operator account (PR:L) and a victim must open the GPS page (UI:R); injected script runs cross-context (S:C) enabling token theft and authenticated actions (C:L/I:L, A:N).

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 15, 2026 - 17:17 EUVD

DescriptionCVE.org

OPNsense is a FreeBSD based firewall and routing platform. Prior to version 26.1.11, the NTP GPS page stores the operator-supplied initcmd value in base64 form, applies legacy_html_escape_form_data() to the encoded string, and then uses base64_decode() to decode the value directly into the GPS initialization-command textarea in src/www/services_ntpd_gps.php. Because decoding occurs after escaping, stored HTML remains unescaped at the output sink. A user with page-services-ntp-gps privilege can store a value that closes the textarea, and script executes in the session of any user who later opens the GPS page. The script can read CSRF material and perform authenticated actions, including actions available to an administrator. This issue is fixed in version 26.1.11.

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Medium
popular open-source firewall, common in SMB/homelab, not everywhere
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

CVE-2023-39004 CRITICAL POC
9.8 Aug 09

Insecure permissions in the configuration directory (/conf/) of OPNsense Community Edition before 23.7 and Business Edit

CVE-2023-27152 CRITICAL POC
9.8 Oct 23

DECISO OPNsense 23.1 does not impose rate limits for authentication, allowing attackers to perform a brute-force attack

CVE-2023-39008 CRITICAL POC
9.8 Aug 09

A command injection vulnerability in the component /api/cron/settings/setJob/ of OPNsense Community Edition before 23.7

CVE-2023-39001 CRITICAL POC
9.8 Aug 09

A command injection vulnerability in the component diag_backup.php of OPNsense Community Edition before 23.7 and Busines

CVE-2023-39007 CRITICAL POC
9.6 Aug 09

/ui/cron/item/open in the Cron component of OPNsense Community Edition before 23.7 and Business Edition before 23.4.2 al

CVE-2023-39003 HIGH POC
7.5 Aug 09

OPNsense Community Edition before 23.7 and Business Edition before 23.4.2 was discovered to contain insecure permissions

CVE-2023-39005 HIGH POC
7.5 Aug 09

Insecure permissions exist for configd.socket in OPNsense Community Edition before 23.7 and Business Edition before 23.4

CVE-2023-38997 HIGH POC
7.2 Aug 09

A directory traversal vulnerability in the Captive Portal templates of OPNsense Community Edition before 23.7 and Busine

CVE-2023-38999 MEDIUM POC
6.5 Aug 09

A Cross-Site Request Forgery (CSRF) in the System Halt API (/system/halt) of OPNsense Community Edition before 23.7 and

CVE-2019-25373 MEDIUM POC
6.4 Feb 15

OPNsense 19.1 contains a stored cross-site scripting vulnerability that allows authenticated attackers to inject malicio

CVE-2019-25369 MEDIUM POC
6.4 Feb 15

OPNsense 19.1 contains a stored cross-site scripting vulnerability in the system_advanced_sysctl.php endpoint that allow

CVE-2019-25372 MEDIUM POC
6.1 Feb 15

OPNsense 19.1 contains a reflected cross-site scripting vulnerability that allows unauthenticated attackers to inject ma

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy