/

CVE-2026-111218

Severity:

HIGH RISK

(7.2)

OS Command Injection (CWE-78) in Netgate pfSense CE

CVE-2026-111218

Analyzed

Vulnerability type

Category:

OS Command Injection

CWE:

CWE-78

Impact:

Root-level command execution

Severity:

HIGH RISK

(7.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Netgate pfSense CE contains an OS command injection vulnerability in Traffic Shaper Limiter handling. An authenticated user with Traffic Shaper Limiters privileges may tamper with a limiter number value and cause commands to run with root privileges when the limiter is deleted.

Netgate pfSense CE contains an OS command injection vulnerability in Traffic Shaper Limiter handling. An authenticated user with Traffic Shaper Limiters privileges may tamper with a limiter number value and cause commands to run with root privileges when the limiter is deleted.

Affected context

The vulnerability occurs in pfSense CE Traffic Shaper Limiter workflows when a user with the relevant limiter-management privilege can influence the hidden number field associated with a limiter. The risk is present when the value is later used by the limiter deletion logic to construct a shell command without adequate neutralization.

The vulnerability occurs in pfSense CE Traffic Shaper Limiter workflows when a user with the relevant limiter-management privilege can influence the hidden number field associated with a limiter. The risk is present when the value is later used by the limiter deletion logic to construct a shell command without adequate neutralization.

Exploit preconditions

  • Attack surface: Authenticated pfSense web administration functionality - Required access: Traffic Shaper Limiters privileges - Trigger point: Deletion of a limiter after its number value has been

tampered with

  • Why exploitation is possible: The value reaches delete_queue() and is

passed unquoted to dnctl through /bin/sh with root privileges

  • Attack surface: Authenticated pfSense web administration functionality - Required access: Traffic Shaper Limiters privileges - Trigger point: Deletion of a limiter after its number value has been

tampered with

  • Why exploitation is possible: The value reaches delete_queue() and is

passed unquoted to dnctl through /bin/sh with root privileges

Why this happens

The underlying flaw is OS command injection caused by incorporating attacker-influenced input into a shell command without safe argument handling. In this case, the limiter number field is trusted when constructing the command used by delete_queue(). This behavior maps to CWE-78 because shell metacharacters or additional command content may be interpreted rather than treated strictly as data.

The underlying flaw is OS command injection caused by incorporating attacker-influenced input into a shell command without safe argument handling. In this case, the limiter number field is trusted when constructing the command used by delete_queue(). This behavior maps to CWE-78 because shell metacharacters or additional command content may be interpreted rather than treated strictly as data.

Potential impact

  • An authorized attacker may execute arbitrary commands as root
  • The attacker could alter firewall, traffic-shaping, or system settings
  • The compromise could expose or modify sensitive configuration data
  • The system could be used to affect connected networks or services
  • Persistence or further compromise could be possible depending on privileges

and deployment configuration

  • An authorized attacker may execute arbitrary commands as root
  • The attacker could alter firewall, traffic-shaping, or system settings
  • The compromise could expose or modify sensitive configuration data
  • The system could be used to affect connected networks or services
  • Persistence or further compromise could be possible depending on privileges

and deployment configuration

General mitigation guidance

Mitigation generally focuses on removing shell interpretation from application-controlled operations. Prefer direct process or API invocation with fixed executables and separately supplied arguments, rather than composing command strings for a shell. Treat limiter identifiers as untrusted input, enforce strict allowlisted formats and bounds, and validate them before use. Where possible, use platform APIs for queue management, limit administrative privileges, and run related operations with the minimum permissions required.

Mitigation generally focuses on removing shell interpretation from application-controlled operations. Prefer direct process or API invocation with fixed executables and separately supplied arguments, rather than composing command strings for a shell. Treat limiter identifiers as untrusted input, enforce strict allowlisted formats and bounds, and validate them before use. Where possible, use platform APIs for queue management, limit administrative privileges, and run related operations with the minimum permissions required.

How teams detect issues like this

Detection can include static analysis for shell invocation, string concatenation, interpolation, or formatting involving request parameters. Code review should examine hidden form fields, deletion handlers, and any path that passes user-controlled values to system utilities. Runtime monitoring can look for unexpected shell children, unusual dnctl arguments, and root processes launched by the web administration service. Policy enforcement can require argument-safe process APIs, input allowlists, and security review for privileged command execution. Automated code-scanning tools may help identify related patterns.

Detection can include static analysis for shell invocation, string concatenation, interpolation, or formatting involving request parameters. Code review should examine hidden form fields, deletion handlers, and any path that passes user-controlled values to system utilities. Runtime monitoring can look for unexpected shell children, unusual dnctl arguments, and root processes launched by the web administration service. Policy enforcement can require argument-safe process APIs, input allowlists, and security review for privileged command execution. Automated code-scanning tools may help identify related patterns.

Sources

SourceLink
abraxaslabs.techabraxaslabs.tech/research/pfsense-ce-leftovers
abraxaslabs.techabraxaslabs.tech/research/pfsense-limiter-number
github.comgithub.com/abraxas/pfsense-limiter-number
github.comgithub.com/pfsense/pfsense/blob/9363ac5b8651a1c7a333180425ce7719070f95f9/src/etc/inc/shaper.inc#L3820-L3821
github.comgithub.com/pfsense/pfsense/blob/9363ac5b8651a1c7a333180425ce7719070f95f9/src/etc/inc/shaper.inc#L3959
vulncheck.comvulncheck.com/advisories/netgate-pfsense-ce-2.7.0-through-2.9.0-os-command-injection-via-traffic-shaper-limiters

Frequently asked

questions

It may be exploitable through the pfSense administration interface when that

interface is reachable and the attacker has the required authenticated

privileges. It is not described as an unauthenticated attack.

The attacker needs authentication and Traffic Shaper Limiters privileges,

along with the ability to modify a limiter's number value and invoke the

deletion workflow.

Avoid passing user-controlled values through a shell. Use direct APIs or

fixed-executable process calls with separately validated arguments, and

enforce strict allowlists for limiter identifiers.

Review all privileged system-command paths, apply least privilege, validate

request and hidden form fields server-side, and use static analysis and

policy checks for shell command construction.

It may be exploitable through the pfSense administration interface when that

interface is reachable and the attacker has the required authenticated

privileges. It is not described as an unauthenticated attack.

The attacker needs authentication and Traffic Shaper Limiters privileges,

along with the ability to modify a limiter's number value and invoke the

deletion workflow.

Avoid passing user-controlled values through a shell. Use direct APIs or

fixed-executable process calls with separately validated arguments, and

enforce strict allowlists for limiter identifiers.

Review all privileged system-command paths, apply least privilege, validate

request and hidden form fields server-side, and use static analysis and

policy checks for shell command construction.

Find out what's already
exploitable in your codebase.