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-qinq-parent-if — pfSense CE 2.9.0-DEVELOPMENT - High - Remote - RCE - QinQ parent-if ifconfig | Kitploit
Tools/GitHubGitHub/abraxas/pfsense-qinq-parent-if
Vulnerability AnalysisExploitationWeb Application ExploitationNetwork SecurityPenetration TestingCommand and ControlRemote Access Tool
GitHubabraxas/pfsense-qinq-parent-if

pfsense-qinq-parent-if

pfSense CE 2.9.0-DEVELOPMENT - High - Remote - RCE - QinQ parent-if ifconfig

View Repository
6123 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-qinq-parent-if

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-qinq-parent-if

pfsense-qinq-parent-if

Class: RCE Reach: Remote

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

QinQ edit stores a parent interface name with no does_interface_exist check. VLAN edit already rejects a parent that is not a live iface. Form_Select does not re-validate POST. Create write_configs even when interface_qinq_configure returns early. Member add/remove then interpolates the stored vlanif into unescaped ifconfig. PHP exec is /bin/sh -c. WebGUI PHP-FPM is root. Privilege is page-interfaces-qinq-edit, 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) QinQ edit
AuthWebGUI session with page-interfaces-qinq-edit
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 only

I pinned public master 9363ac5. The lab is a PHP gadget of the pinned vlan_interface / interface_qinq_configure / member exec lines, loopback HTTP on 127.0.0.1:18810.

What an attacker can do

MethodSinkPrivilege
POST QinQ create with a parent that is not a live iface, then POST edit adding a memberinterface_qinq2_configure exec ifconfig vlan create ... (interfaces.inc:620)Integrity (lab-proven): root shell via /bin/sh -c. Lab: member-add qinq2 wrote the witness (member-sink=yes).
Same stored vlanif, POST edit removing a memberexec("/sbin/ifconfig {$parent}.{$tag} destroy") (interfaces_qinq_edit.php:212)Integrity (lab-proven): same root exec. Destroy has no IF_NAMESIZE cap.
Same root shellhost filesystemRecon (inferred): config.xml, keys, other tenants. This page does not print exec output.
Root shell or broken ifconfigvlan devicesAvailability (inferred): create/destroy vlan devices; data plane is in play.

Lab-proven vs inferred: VLAN reject, create-only no exec, IF_NAMESIZE block at len 16, and member-add qinq2 witness are lab-proven. Filesystem recon and data-plane disruption are inferred from root PHP-FPM.

Requires: WebGUI session with page-interfaces-qinq-edit. CSRF token. Two POSTs (create, then member edit). Default admin has the page. A limited user can be granted only this page.

Adjacent surface that stays closed

SurfaceLab
VLAN parent existence checkvlan-rejected=yes
QinQ create-only (parent missing)stores config, create-no-exec=yes
qinq2 name length 16if-namesize-block=yes before exec
Unauth / CSRF without tokenguiconfig + CSRF-magic
GIF/GRE name regex, LAGG members does_interface_exist + escapeshellargother pages
QinQ list delete of a never-created parentdoes_interface_exist($vlanif)
Diagnostics: Commandstays closed unless also granted

No Diagnostics: Command. No unauth. Historical class is CVE-2023-42326 GIF/GRE, different page.

Lab

cd lab
./run.sh

Loopback 127.0.0.1:18810. Compose project pfsense-qinq-parent-if. Image tag pfsense-qinq-parent-if:2.9.0-dev. Witness PFSENSE-QINQ-PARENT-IF-WITNESS. Last line:

SUCCESS PFSENSE-QINQ-PARENT-IF vlan-rejected=yes create-no-exec=yes member-sink=yes if-namesize-block=yes PFSENSE-QINQ-PARENT-IF-WITNESS

The fix

QinQ edit: reject a parent that is not a live interface, same as VLAN edit. Integer-check member tags already exist; still escapeshellarg the stored vlanif before every ifconfig. Cap member-delete destroy the same way interface_qinq2_configure caps IF_NAMESIZE.

References

  • github.com/pfsense/pfsense 9363ac5b8651a1c7a333180425ce7719070f95f9
  • interfaces_qinq_edit.php
  • interfaces.inc interface_qinq2_configure
  • VLAN contrast: interfaces_vlan_edit.php
  • Historical class (GIF/GRE, not this page): CVE-2023-42326
  • CWE-78
Download Tool