Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as user with directly-assigned write + readonly privs
-
ExploitCall MVC API guarded by throwReadOnly()
-
ExecutionReadonly check bypassed via string-concatenation flaw
-
ImpactPersist unauthorized configuration change
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated OPNsense account that has been DIRECTLY assigned (not inherited through a group) both a component write privilege AND the user-config-readonly privilege; this combination is what triggers the exact-comparison parser flaw in ACL::hasPrivilege(). Limiting factors: exploitation is impossible for accounts whose privileges are assigned via groups (the group path splits comma-separated values correctly), requires a valid low-privileged account to already exist, and is confined to persisting configuration changes for components the account can write. Fixed in version 26.1.11, so unpatched installs prior to 26.1.11 are the exposed population. Impact is limited to configuration integrity for the affected component - no confidentiality disclosure. |
| Impact | The input provides a CVSS 3.1 base score of 7.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L), indicating a network-reachable, low-complexity flaw requiring low privileges, with high integrity impact, no confidentiality impact, and low availability impact - consistent with CWE-863 (Incorrect Authorization). No EPSS score, no CISA KEV listing, and no public exploit code were supplied, so there is no public exploit identified at time of analysis and no SSVC decision data to corroborate exploitation likelihood. Critically, the network vector is gated by a non-default precondition: an administrator must have DIRECTLY assigned a single account BOTH a component write privilege AND user-config-readonly (group-assigned privileges are explicitly NOT vulnerable because the group path splits comma-separated values correctly). This makes the realistic risk narrower than the 7.1 score implies - it is an authenticated privilege-containment bypass affecting a specific, operator-created privilege configuration rather than a broadly exploitable remote flaw. Treat as a moderate, config-dependent integrity issue; prioritize patching where delegated/semi-trusted OPNsense accounts exist, but it is not a drop-everything internet-facing RCE. |
| Exploit ScenarioDerived | An OPNsense account directly assigned both a component write privilege and the user-config-readonly restriction is intended to be read-only. Because ACL::hasPrivilege() concatenates the directly-assigned comma-separated privilege string and performs an exact match, the readonly check fails to match and the account is treated as not read-only, letting it call an MVC API guarded by throwReadOnly() to persist configuration changes for that component. No public exploit code is identified; exploitation requires the attacker to already hold such an account. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Improper authorization handling in OPNsense core before 26.1.11 lets an authenticated low-privileged user (CVSS PR:L) bypass the user-config-readonly restriction and persist configuration changes through MVC APIs that rely on the throwReadOnly() guard. The flaw only triggers for accounts whose privileges are assigned directly: when a user is given both a component write privilege and user-config-readonly inside one comma-separated <priv> value, ACL::hasPrivilege() fails to detect the read-only flag through its exact string comparison, so the write is allowed; accounts receiving privileges through groups are unaffected. Impact is confined to configuration integrity for the affected component (I:H with C:N and A:L), no public exploit has been identified at time of analysis, and the vendor has shipped the fix in OPNsense 26.1.11.
RemediationAI
Vendor-released patch: upgrade to OPNsense 26.1.11 or later, which corrects the comma-separated privilege evaluation in ACL::hasPrivilege() and adds the page-all enforcement helper used by sensitive controllers; details and the upgrade path are documented in the advisory at https://github.com/opnsense/core/security/advisories/GHSA-p9pr-782r-w2xw, with the code changes in commits 578e025111161ffd03fd3fd0ccdac203be546505, e15a884973746319e79bd2cd421e8a015cc3ddb9, and f674f4ff294a3f7c4cd0591563f6df47bea50034. Where immediate upgrade is not possible, audit local user accounts in System > Access > Users and eliminate the risky combination by removing user-config-readonly from any account that also holds direct component write privileges, or by granting those privileges through groups instead of directly - the group code path splits comma-separated values correctly and is not affected, though this changes privilege administration and should be verified against your intended read-only policy. As a compensating control, restrict API and GUI access for such accounts to trusted management networks and review configuration history for unauthorized changes to the affected components; these controls reduce reachability and improve detection but do not remove the underlying authorization flaw, so patching to 26.1.11 remains the definitive fix.
Affected VersionsENISA
Affected Packages
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 FreeBSD-based firewall and routing platform whose web GUI and API are built on a custom MVC framework. Authorization decisions route through OPNsense\Core\ACL::hasPrivilege(), which evaluates privilege strings; the parser appends a directly assigned comma-separated <priv> value as a single string and then performs an exact (non-splitting) comparison when testing for user-config-readonly. Because 'component-write,user-config-readonly' is never equal to the literal token 'user-config-readonly', the read-only check silently fails, and controllers that call throwReadOnly() - and therefore the underlying ApiMutableModelControllerBase save paths - accept configuration writes they should reject. This is a classic CWE-863 incorrect authorization defect: the identity check itself is well-intentioned but the token normalization is inconsistent with the group code path, which already splits comma-separated privilege lists correctly. The upstream commits (578e025111161ffd03fd3fd0ccdac203be546505, e15a884973746319e79bd2cd421e8a015cc3ddb9, f674f4ff294a3f7c4cd0591563f6df47bea50034) correct the evaluation logic and additionally introduce an internalSaveRequiresAdmin flag plus a throwNotFullAdmin() helper for components deemed sensitive enough to require the page-all privilege, as demonstrated by the Monit settings controller. The CPE cpe:2.3:a:opnsense:core:*:*:*:*:*:*:*:* covers all unpatched core releases.
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
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L
API-reachable over network (AV:N) by an existing low-privileged account (PR:L); the flaw deterministically bypasses the readonly check (AC:L), yielding config-write integrity impact (I:H) with no data disclosure (C:N) and minor availability effect (A:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
OPNsense is a FreeBSD based firewall and routing platform. Prior to 26.1.11, OPNsense\Core\ACL::hasPrivilege() appends a directly assigned comma-separated <priv> value as one string and then uses an exact comparison when checking user-config-readonly. A user directly assigned both a component write privilege and user-config-readonly can therefore be treated as lacking the read-only restriction, and MVC APIs protected by throwReadOnly() can persist configuration changes for that component. Group privileges are not affected by the same parser flaw because the group path already splits comma-separated values. This issue is fixed in version 26.1.11.
Technical POC Analysis
CWE-863 (Incorrect Authorization) in OPNsense\Core\ACL::hasPrivilege() (src/opnsense/mvc/app/models/OPNsense/Core/ACL.php).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
OPNsense firewall deployments running core versions earlier than 26.1.11 contain an authorization weakness that lets a low-privileged, authenticated account bypass read-only configuration restrictions and permanently write configuration changes through the management APIs. Because OPNsense commonly serves as the network perimeter control, unauthorized configuration edits can undermine security enforcement, although the flaw affects only configuration integrity for the impacted component and does not expose data or enable code execution. Leadership should care most if delegated or self-managed accounts hold write privileges assigned directly to the user rather than through groups, since those are the only accounts affected.
Apply vendor patch (OPNsense 26.1.11). If upgrade cannot be completed immediately: assign read-only and write privileges through separate group memberships rather than comma-separated direct user privileges, audit and reduce directly-assigned write privileges, and monitor configuration change logs for unauthorized modifications.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Insecure permissions in the configuration directory (/conf/) of OPNsense Community Edition before 23.7 and Business Edit
DECISO OPNsense 23.1 does not impose rate limits for authentication, allowing attackers to perform a brute-force attack
A command injection vulnerability in the component /api/cron/settings/setJob/ of OPNsense Community Edition before 23.7
A command injection vulnerability in the component diag_backup.php of OPNsense Community Edition before 23.7 and Busines
/ui/cron/item/open in the Cron component of OPNsense Community Edition before 23.7 and Business Edition before 23.4.2 al
OPNsense Community Edition before 23.7 and Business Edition before 23.4.2 was discovered to contain insecure permissions
Insecure permissions exist for configd.socket in OPNsense Community Edition before 23.7 and Business Edition before 23.4
A directory traversal vulnerability in the Captive Portal templates of OPNsense Community Edition before 23.7 and Busine
A Cross-Site Request Forgery (CSRF) in the System Halt API (/system/halt) of OPNsense Community Edition before 23.7 and
OPNsense 19.1 contains a stored cross-site scripting vulnerability that allows authenticated attackers to inject malicio
OPNsense 19.1 contains a stored cross-site scripting vulnerability in the system_advanced_sysctl.php endpoint that allow
OPNsense 19.1 contains a reflected cross-site scripting vulnerability that allows unauthenticated attackers to inject ma
EUVD-2026-102140
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB