Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
pfsense-limiter-number — pfSense CE 2.9.0-DEVELOPMENT - High - Remote - RCE - limiter number dnctl | Kitploit
Tools/GitHubGitHub/abraxas/pfsense-limiter-number
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlRed TeamingLabs & Practice
GitHubabraxas/pfsense-limiter-number

pfsense-limiter-number

pfSense CE 2.9.0-DEVELOPMENT - High - Remote - RCE - limiter number dnctl

View Repository
112 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Abraxas Labs - pfsense-limiter-number

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-limiter-number

pfsense-limiter-number

Class: RCE Reach: Remote

pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org

Traffic Shaper Limiters emit a hidden number field on edit. Create overwrites that number with dnpipe_find_nextnumber(). Edit does not. validate_input never checks number. GetNumber() is concatenated unquoted into dnctl pipe|sched|queue delete. PHP mwexec is /bin/sh -c. Privilege is page-firewall-trafficshaper-limiter, not Diagnostics: Command.

IDno CVE yet
ClassRCE
ReachRemote (authenticated WebGUI)
CWECWE-78
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
ProductpfSense CE
Affected2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) limiter number
AuthWebGUI session with page-firewall-trafficshaper-limiter
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 only

I pinned public master 9363ac5. The lab is a PHP gadget of pinned ReadConfig / SetNumber / delete_queue. Loopback 127.0.0.1:18840.

What an attacker can do

MethodSinkPrivilege
Create a limiter, POST save with attacker number, then delete that limitermwexec("/sbin/dnctl pipe delete " . $this->GetNumber()) (shaper.inc:3820)Integrity (lab-proven): root shell. Lab: edit-delete wrote the witness (edit-delete-exec=yes). Create overwrite and apply-file path wrote none.
Same root shellhost filesystemRecon (inferred): config.xml, keys.
Root shell or dnctl of attacker numbersdummynetAvailability (inferred): limiter / dummynet disruption.

Lab-proven vs inferred: create overwrite (no witness), apply-file path (dnctl of a file, no witness), and edit-delete exec (witness) are lab-proven. Filesystem recon is inferred from root PHP-FPM.

Requires: WebGUI session with page-firewall-trafficshaper-limiter. CSRF on POST save. Delete is GET action=delete.

Adjacent surface that stays closed

SurfaceLab
Create pathdnpipe_find_nextnumber() overwrites, create-overwrites=yes
Apply pathdnctl of /tmp/rules.limiter, filename not user-controlled, apply-file=yes
Limiter name charset^[a-zA-Z0-9_-]+$
Unauthclosed
Diagnostics: Commandstays closed unless also granted

AQM params into /tmp/rules.limiter are extra dummynet language, not this leftover.

Lab

cd lab
./run.sh

Loopback 127.0.0.1:18840. Compose project pfsense-limiter-number. Image tag pfsense-limiter-number:2.9.0-dev. Witness PFSENSE-LIMITER-NUMBER-WITNESS. Last line:

SUCCESS PFSENSE-LIMITER-NUMBER create-overwrites=yes apply-file=yes edit-delete-exec=yes PFSENSE-LIMITER-NUMBER-WITNESS

The fix

Int-cast GetNumber() before every dnctl. Ignore POST number on edit, or range-check it against the live dummynet id. Create already overwrites; make edit do the same.

References

  • github.com/pfsense/pfsense 9363ac5b8651a1c7a333180425ce7719070f95f9
  • shaper.inc delete_queue / GetNumber
  • firewall_shaper_vinterface.php
  • CWE-78
Download Tool